In my nearly 20-year software career, I have worked in many, many companies with diverse corporate cultures, variable number of employees (from 20 employees to 125,000+ employees), and differing expectations of their employees.
The 2 most memorable experiences of corporate culture that I have are from the smallest companies that I have worked for in my career. One company had around 20 employees, and the other around 30.
The CEO of each company directed the entire corporate culture of each company. I guess it must be that way in most small companies.
In my case, I have worked for 2 small companies with CEO's who had extremely different philosophies on personal work ethic, productivity expectations of themselves and their employees.
In my first small company experience, the CEO was a 9-to-5'er, never worked weekends, never came out of his office except to play occasional foosball, and never held his executives accountable for missing sales goals, missing talent on HR hiring, and missing marketing goals. The only reason that our engineering team made our product development goals is that we actually had a VP of engineering who drove us to excel and produce, and whom we liked and trusted. And we were passionate about delivering cutting-edge technology.
But the CEO never worked extra hours, never shared the vision of the company with us, never was a leader, never seemed to care that much about the success of the company. Although the employees of the company liked working there and it was indeed a fun and challenging place to work (technology-wise), there were no clear goals and the company could never really learn to sell it's innovative product, and there was no accountability amongst the executives to meet their team's goals, if there ever even were goals identified. Even though it was technically a start-up company, most employees (other than the engineering team) worked normal work hours and produced very little.
Not coincidentally, that company went out of business within 3 years, and that's only because it lasted longer than normal because it was started in the dot-com boom in the late 1990's.
Fast forward a few years ahead.
I was working at a company that was doing better financially with less employees, but the CEO of the company had such incredibly high goals (and at most times, unrealistic) for himself and his employees. This CEO often slept afternoons and sometimes evenings at work, but overall working 20+ hour days through the day and night, and expected 50+ hours or more from his employees, it was even written in the employment contract. The corporate culture was based on production only, and hinted of HR action if employee goals were not met. It was the ultimate in pay-for-performance compensation. Produce and be rewarded with your job, miss whatever expectations there are and you are gone quickly.
Since I am naturally an accountable person and expect other employees to be accountable for their actions and performance, I was cool with this.
Initially, it was great to work for a CEO that lead by example and worked crazy hours, had incredible attention to detail, and seemed to completely understand every single minute detail of his business. He demanded a micro-understanding of every single detail that occurred at his business, regardless of his competency to really understand if these events were good or bad for his company.
Employees at this company worked scared because they knew if they made perceived mistakes, they would soon be laid-off or fired. I was the 4th architect hired at the company in less than one year, each successive architect before me lasted a mere 3 months. 3 other high-ranking employees quit the company in the first 2 months that I was there. I very quickly realized that I was in trouble. No matter what I did, it seemed this CEO, who made all hiring/firing decisions (actually any company decision on business or whatever) would eventually impose unbeknownst and unrealistic expectations on me, which very soon came to fruition.
I produced a great architecture and delivered it to the company and my employment ended after 7 months because I realized what everyone else before me had been through: you can't please someone who is not pleased with themselves and imposes their expectations, often unrealitic and unattainable, on you and the rest of the team. Oh and he made me accountable for tasks that had never, ever, had agreed about in the job summary during the job interviews. This CEO expected you to be the greatest things since sliced bread at whatever task he needed done.
Looking back on both of these job experiences, I realized that although you can do your absolute best to ask questions during the job interview to try to understand the company's expectations of you and the tasks that you will be responsible at the job, you are always taking a chance regardless. My best advice is to ask yourself: Do I trust this person? Do I trust the company? Do I trust what they are telling me about the company and why it is such a desirable job for me?
My point to you is this: be careful during your job interview to identify and be acutely aware of red flags when learning about excessive employee turnover or lack of executive accountability, because both will cause the company, and ultimately your career goals, to fail. And for no reason of your own. And acutely understand what their expectations of you are and get it in writing.
And if it's a small company, try to understand the phsyche of the CEO as much as possible. If he's a nutjob like the 2 in my examples were, then steer clear of the company; it's in your best interest.
Tuesday, March 10, 2009
Monday, August 20, 2007
The 2 types of modern software engineers
I have been a software engineer for over 15 years now, and have been writing software since getting my first computer: an Apple 2+ in 1984.
It's amazing how computer languages and hardware have evolved in the last 30 years. Even more interesting is how software engineers, like myself, have evolved over the years.
I recently have come to the conclusion that there are really only 2 types of software engineers in this world nowadays: those who think high-level software design is more important than the actual implementation, and those who don't.
In my opinion, software implementation without high level design, encapsulation of functionality, decoupled or loosely coupled frameworks is a disaster waiting to happen.
What this implies is that we need to "think" about modeling real-world tangible things or concepts in code that accurately represents them. And that this is even actually more important that coding the software itself.
My opinion is based on the fact that I have lived through so many projects at this point in my career which failed to have the complete lack of what I just stated.
Oh, and this isn't an object oriented vs. embedded programming argument. This is a "should I think a little about it first?" vs. "I will just get started and hack" argument.
Most of us in the "Design is more important" camp rely heavily on the use of Software Design Patterns, and prefer to implement the design using higher-level object-oriented languages such Java. We don't feel the need to be too close to the processor.
Don't get me wrong, I like c and c++. I do write code in c/c++ at my current job and am a fairly decent programmer in these languages. I just don't see any reason to use them if the task can be done with Java assuming performance and memory benchmarks can be met and lack of byte-level processing is necessary.
And I am not implying that code written without design is bad, or that the software engineers who do this sort of thing are not as talented as us design people; on the contrary, they are often more knowledgeable in almost any language than design people. But, they have to be. They are better "programmers", but that doesn't make them better software engineers.
When you are developing an application that models a customer account or a shopping cart or real-time multi-threaded UI or server, do you really want to deal with unsigned integers, process byte arrays, dereference pointers, parse a char array, or perform pointer arithmetic or access a register on the processor? Of course not. Knowledge of those things doesn't help you build an application faster.
The funny thing is, is that each camp is fiercely loyal to their opinion. And having a conversation about software and implementation between 2 people that are in different camps is not possible. Their priorities are entirely different, and their understanding of the problem domain and the implementation solution are entirely different.
What do you think?
It's amazing how computer languages and hardware have evolved in the last 30 years. Even more interesting is how software engineers, like myself, have evolved over the years.
I recently have come to the conclusion that there are really only 2 types of software engineers in this world nowadays: those who think high-level software design is more important than the actual implementation, and those who don't.
In my opinion, software implementation without high level design, encapsulation of functionality, decoupled or loosely coupled frameworks is a disaster waiting to happen.
What this implies is that we need to "think" about modeling real-world tangible things or concepts in code that accurately represents them. And that this is even actually more important that coding the software itself.
My opinion is based on the fact that I have lived through so many projects at this point in my career which failed to have the complete lack of what I just stated.
Oh, and this isn't an object oriented vs. embedded programming argument. This is a "should I think a little about it first?" vs. "I will just get started and hack" argument.
Most of us in the "Design is more important" camp rely heavily on the use of Software Design Patterns, and prefer to implement the design using higher-level object-oriented languages such Java. We don't feel the need to be too close to the processor.
Don't get me wrong, I like c and c++. I do write code in c/c++ at my current job and am a fairly decent programmer in these languages. I just don't see any reason to use them if the task can be done with Java assuming performance and memory benchmarks can be met and lack of byte-level processing is necessary.
And I am not implying that code written without design is bad, or that the software engineers who do this sort of thing are not as talented as us design people; on the contrary, they are often more knowledgeable in almost any language than design people. But, they have to be. They are better "programmers", but that doesn't make them better software engineers.
When you are developing an application that models a customer account or a shopping cart or real-time multi-threaded UI or server, do you really want to deal with unsigned integers, process byte arrays, dereference pointers, parse a char array, or perform pointer arithmetic or access a register on the processor? Of course not. Knowledge of those things doesn't help you build an application faster.
The funny thing is, is that each camp is fiercely loyal to their opinion. And having a conversation about software and implementation between 2 people that are in different camps is not possible. Their priorities are entirely different, and their understanding of the problem domain and the implementation solution are entirely different.
What do you think?
Sunday, June 3, 2007
Google: Evil or Righteous?
I'm often fascinated by Google.
I lived in Mountain View, CA from 1997-1999 on Tyrella Ave., near Middlefield Road and Moffett Ave.
The big dog on the block at that time was Netscape Communications, which owned several buildings near the 21st Point Fitness Center on Middlefield Ave., which I was a member of.
Google started in 1998, somewhere close to where I lived in Palo Alto, CA from what I understand, by Sergey Brin and Larry Page.
The technology they created was absolutely necessary at the time: a search engine for content on the internet. At the time Google started, the 3 most popular search engines on the internet were Infoseek, Yahoo! and Excite. Infoseek was a really good search engine, the other 2 (Yahoo! and Excite) were garbage, for the most part useless (especially Excite).
Luckily for Google, Infoseek was purchased by Go.com which was owned by Disney. Disney quickly made stupid decisions and Infoseek was deprecated, called Go.com and buried amongst Disneys various websites. From the moment Disney purchased it, it was doomed. So all of the great work from the Infoseek engineers - the search algorythm, was lost due to brand marketing and incompentent idiots who were running Infoseek after being purchased by Disney.
Yahoo! was OK for a website, but was really useful as a site to go for web links to other sites. Their search was tool was weak at that time.
Excite was just a 3rd-rate useless tool that you went to as a last resort. Excite was started by a bunch a people who thought that they were alot smarter than they actually were. But luckily for them they got their site out there a little bit ahead of the curve, and alot of people threw money at them not knowing that they would eventually lose it due to the uselessness of Excite and it's technology. It was basically a copy site, inferior to Infoseek and even Yahoo!
So in 1999, most people were fed up trying to search for stuff on the internet, and here comes Google with a great little search engine. I loved Google Search and still do. I can find what is most relevant to me at any given time. Their search algorythm works.
They got big, went public, stock soared, they all got rich and then something predictable happened: most of them became arrogant assholes.
It's very understandable. Put people together that believe they are better than the rest of us in the world and you get what Google is today: a company mostly full of rich, arrogant people.
Why do I say this? I mean, doesn't Google own the very site that I am blogging from?
Of course they do.
Google has a motto: Don't be evil.
But for the many ways that Google has improved technology and our lives from offering free products and services on the internet, they have also displayed the sort of "evil" behavior that they so publicly disdain from their main competitor, Microsoft.
A couple of years ago, Google tried to publish every single book in print to the internet without getting the permission of the content rights holders: the publishing companies and the authors. Nice going. They stormed into public libraries and started copying everything they could.
Now Google is making it such that you can see at street level at any place at any given time. Cool technology, no doubt. But did Google ever think about privacy concerns? Of course not.
Another thing I particularly hate is how they recruit new new employees: Solve some riddle at some random billboard location in the Bay Area and then solve another brain teaser from a newspaper advertisement. The whole strategy is to recruit the so-called "smart people". Well, I know a bunch of those people who couldn't carry my jockstrap when it comes to software design and implementation. People that get into Google are smart, no doubt.
Keep an eye on what Google is doing. They are increasingly deciding their own rules. In 10 years, they might be the hated company that Microsoft is today.
I lived in Mountain View, CA from 1997-1999 on Tyrella Ave., near Middlefield Road and Moffett Ave.
The big dog on the block at that time was Netscape Communications, which owned several buildings near the 21st Point Fitness Center on Middlefield Ave., which I was a member of.
Google started in 1998, somewhere close to where I lived in Palo Alto, CA from what I understand, by Sergey Brin and Larry Page.
The technology they created was absolutely necessary at the time: a search engine for content on the internet. At the time Google started, the 3 most popular search engines on the internet were Infoseek, Yahoo! and Excite. Infoseek was a really good search engine, the other 2 (Yahoo! and Excite) were garbage, for the most part useless (especially Excite).
Luckily for Google, Infoseek was purchased by Go.com which was owned by Disney. Disney quickly made stupid decisions and Infoseek was deprecated, called Go.com and buried amongst Disneys various websites. From the moment Disney purchased it, it was doomed. So all of the great work from the Infoseek engineers - the search algorythm, was lost due to brand marketing and incompentent idiots who were running Infoseek after being purchased by Disney.
Yahoo! was OK for a website, but was really useful as a site to go for web links to other sites. Their search was tool was weak at that time.
Excite was just a 3rd-rate useless tool that you went to as a last resort. Excite was started by a bunch a people who thought that they were alot smarter than they actually were. But luckily for them they got their site out there a little bit ahead of the curve, and alot of people threw money at them not knowing that they would eventually lose it due to the uselessness of Excite and it's technology. It was basically a copy site, inferior to Infoseek and even Yahoo!
So in 1999, most people were fed up trying to search for stuff on the internet, and here comes Google with a great little search engine. I loved Google Search and still do. I can find what is most relevant to me at any given time. Their search algorythm works.
They got big, went public, stock soared, they all got rich and then something predictable happened: most of them became arrogant assholes.
It's very understandable. Put people together that believe they are better than the rest of us in the world and you get what Google is today: a company mostly full of rich, arrogant people.
Why do I say this? I mean, doesn't Google own the very site that I am blogging from?
Of course they do.
Google has a motto: Don't be evil.
But for the many ways that Google has improved technology and our lives from offering free products and services on the internet, they have also displayed the sort of "evil" behavior that they so publicly disdain from their main competitor, Microsoft.
A couple of years ago, Google tried to publish every single book in print to the internet without getting the permission of the content rights holders: the publishing companies and the authors. Nice going. They stormed into public libraries and started copying everything they could.
Now Google is making it such that you can see at street level at any place at any given time. Cool technology, no doubt. But did Google ever think about privacy concerns? Of course not.
Another thing I particularly hate is how they recruit new new employees: Solve some riddle at some random billboard location in the Bay Area and then solve another brain teaser from a newspaper advertisement. The whole strategy is to recruit the so-called "smart people". Well, I know a bunch of those people who couldn't carry my jockstrap when it comes to software design and implementation. People that get into Google are smart, no doubt.
Keep an eye on what Google is doing. They are increasingly deciding their own rules. In 10 years, they might be the hated company that Microsoft is today.
Wednesday, May 23, 2007
Thank You Kim Polese
One of the questions I always ask during a job interview to a prospective Java Programming candidate is: Do you know who Kim Polese is?
I've asked this question a number of times, and have never been given the correct answer. (I have the reputation amongst my peers for being a very difficult interviewer).
Kim Polese was the brilliant Product Manager of the Java Product at the time of it's first release 1994-1995-ish. It was she who had the innovative marketing decision to make it "free" to download and use. The result: Massive acceptance and use almost immediately. Within 4 years, Java was by far the most widely used programming language for most applications.
There is also a lingering side-effect to her decision that most people who use use the internet are not aware of: Her decision to make it "free" to use, spawned a huge Java-application-based open-source community with people inspired to donate their work such that others can use it for free based using whatever open-source license they choose, and, in some ways, one could argue that "free" application use over the internet was also influenced by this decision.
The latter was also heavily influenced by market conditions and the dot-com boom pricing structure. But, every time you use the internet, most likely you use a free product or free service indirectly influenced by the brilliant marketing decision that Kim made and the spirit of contribution and sharing of innovation, software, and services that resulted because of it.
You can learn more about this brilliant person here: http://en.wikipedia.org/wiki/Kim_Polese
I've asked this question a number of times, and have never been given the correct answer. (I have the reputation amongst my peers for being a very difficult interviewer).
Kim Polese was the brilliant Product Manager of the Java Product at the time of it's first release 1994-1995-ish. It was she who had the innovative marketing decision to make it "free" to download and use. The result: Massive acceptance and use almost immediately. Within 4 years, Java was by far the most widely used programming language for most applications.
There is also a lingering side-effect to her decision that most people who use use the internet are not aware of: Her decision to make it "free" to use, spawned a huge Java-application-based open-source community with people inspired to donate their work such that others can use it for free based using whatever open-source license they choose, and, in some ways, one could argue that "free" application use over the internet was also influenced by this decision.
The latter was also heavily influenced by market conditions and the dot-com boom pricing structure. But, every time you use the internet, most likely you use a free product or free service indirectly influenced by the brilliant marketing decision that Kim made and the spirit of contribution and sharing of innovation, software, and services that resulted because of it.
You can learn more about this brilliant person here: http://en.wikipedia.org/wiki/Kim_Polese
Subscribe to:
Posts (Atom)