Attached is the content of a document that I wrote to my CEO when I decided to quit, out of frustration and disappointment with the company's culture. I would say the company had a less technical/development centric culture, more sales centric. She is like a System Integrator trying very hard to be a Software House. Like a typical IT Company run by a sales person, the management always focus on short-term sales solution than long term product development. I am not saying sales are not important, but the following is just my view as the developer at that point of time. I was trying to do some good for the rest of the developers there before my last day :)
---
Company X: An Employee’s PerspectiveTransition of culture from System Integrator to Software HouseCompany X is a System Integrator and Software House, that’s how she wanted to portray herself to others. But the fact is COMPANY X had her System Integrator root so deep in the corporate culture that no matter how hard she try to be a Software House, she will probably never become one.
What basically made up a software house? 4 Elements:
Product Vision,
Elite Software Programmer,
Continuous Effort and
Good Tools.
COMPANY X have a strong product vision, which is a fantastic thing to have. The management has strong will to bring the company one step further. But wanting to do is one matter, the planning and perseverance to make the vision a reality is another matter. We need the other 3 elements to realization of the vision.
COMPANY X have a good team of programmers, but it had a corporate hierarchy of a non-software company. In a COMPANY X’s division, it had a Division Manager, Product Manager/Software Manager, Programmer/Technical Staff. Basically, the idea was to have the Product Manager to lead the Programmer in Product Development. What is wrong with this setup? Firstly, where is the
Technical Lead/
Technical Director/
Chief Software Architect/
Chief Technology Officer? Doesn’t a Software House need someone technically sounds to lead its horde of Programmer Army? It lacks a person with a strong technical knowledge to lead a team of programmer in design and development of a product. Isn’t that the job of a Product Manager? Not quite. A Product Manager might not be a person with strong technical background, but he understands what the product supposes to be, thus able to create a product road map. A Technical Lead shall translate the roadmap into technical detail and lead the team into product development. You can’t really expect a person without a strong programming background to lead a bunch of good programmer, as they would be much communication barrier and perception gap. Every successful software house has a very influential Software Architect. For example, Bill Gates from Microsoft steps down as CEO of Microsoft and appoints himself as Chief Software Architect to overseas the product development. Jerry Yang is Chief Yahoo where he hold the most important and influential technical post in the company. Why does a multi-million founder want to get their hands dirty? Because they understand that Product Development and the Technical Aspect of it is the heart of a Software House. A Technical Lead is like the Colonel (highest-ranking officer on the battlefield), while the Product Manager is the General (officer who gave orders to the Colonel) and the higher management would be the Secretary of Defense and the President.
Another role missing in the picture is a
Quality Assurance (QA) Personnel. Why not ask the programmer to test their own product? Even a novice programmer would that would be practically ineffective. How could you expect product quality without a QA Personnel? Even an ISO procedure can’t guarantee good product quality. There is not point to keep emphasizing on quality improvement without the proper resources assign to tackle the issue.
There is a good book entitled
“Good to Great”, analyzing the difference between a Good company and a Great Company. There is one phrase which continuously pops up in the book –
“Get the Right People on the Bus, Get the Wrong People off the Bus, and Get the Right People on the Right Seat”. It is important to be able to identify the right person to employ. You can ask a Sales Manager to identify a Superb Salesperson, and he will do a great job. If you ask a Sales Manager to employ a programmer, he will end up employing another Salesperson as well. The Sales Manager does not know what quality of a programmer to look for (programmer are mostly Introvert, which is the exact opposite of a Salesperson), because he is not familiar with it. Assign the right people to recruit the right people. You might not see what others saw, but you must be able to trust others judgment. Getting the wrong people had a DOUBLE negative effect. Not only he is not productive, most probably he will be destructive to others around him. A bad sheep is enough to disrupt the morale of a flock of good sheep. Last but not least, get the right people on the right seat. Why would you want to promote a Programming Guru to do Project Proposal or Tender? He might score 10 in programming, but score 6 in preparing Project Proposal. Not only you loose a perfectly good programmer, but you got yourself an average person to perform Project Proposal and Tender as well. Why not promote them a Technical Leadership position? We are a software house, we don’t have to promote everyone to manager as part of career progression. For example, the Government started to realize the true productivity of a teacher lies in teaching. Thus, the post of Super Teacher is created, rather than forcing them to become Administrative Staff. Let people do what they are good at.
Continuous Effort is a big issue in COMPANY X. Product X 5 was launched almost 18 months ago, after which none of the core developers are assigned the tasks to continuously improve the product. Until today, Product X 5 had virtually stayed stagnant for 18 months. When the market had moved forward, a stagnant product shall fall backwards. If ISO is not a destination but a journey, so is Product Development. We should have assigned a core
Product Team to continuously development the product, while creating another
Support Team to perform deployment and product support. How could a software house have a stagnant product for the period of 18 months and expect to remain competitive? Or are we having the mentality of System Integrator? If you don’t have a persistent Product Team, you will never end up with a competitive product. You would only come up with a One-Time product which you try to squeeze every ounce of profit from it until there is nothing left. If you keep milking a cow without feeding it nutritious food continuously, you will end up with either a “non-productive” cow or a dead cow. To be able to harvest the crops throughout the year, you have to plant the seed for the first time and every other time after you harvest them. Not to mentioned a continuous irrigation system. Great works are performed, not by strength, but by perseverance.
Diversification can be an evil in disguise. World-renowned Investment Guru
Warren Buffet (of
Berkshire Hathaway) once said,
“Don’t diversify; Concentrate on a few core holdings and watch them carefully”, while the Wall Street mantra is “diversify, diversify, diversify”. I would choose to put my money on the World’s Second Richest Man. Most successful Software Company started only with a single product and goes all the way to nurture and grow it. Microsoft started with DOS followed by Windows; Oracle started with only Oracle Database. With limited resources, we can’t really afford to diversify too much. With fewer core products, we would be able to concentrate and grow the product to a more superior one, rather than a bunch of average products. Although diversification would give us a bigger playing field, but wouldn’t it be better to become the biggest player in a smaller playing fields (get a big pie) rather than a smaller player in a big market (get the crumbs)? We can then choose to diversify when we have more resources and a stronger footprint in our market segment.
There is an old Chinese saying,
“If you want to do a good job, you must equipped yourself with the right tools”. The basic tool a programmer need is a good PC. Is it worth saving RM 2000 of one time cost and sacrifice the productivity of a programmer, which you pay RM 2000 monthly for? With a slow PC, the programmer will spend most of his time waiting to things to load, which have a DOUBLE negative effect as well. Not only he loose time waiting for the computer, his minds also wonders off while waiting. While the processing completed, he had to bring his mind back and refocus again and again. What is the reasoning behind giving an Administrative Person a Pentium 4 machine while asking a programmer to use a 4 years old PC? Is there more value in giving the Administrative Staff a faster PC? By not paying the RM 2000 for the programmer’s PC, we actually loose more than 10 fold the amount due to lost of productivity and morale. Rather than justifying why we should purchase new PCs, probably we should justify why we shouldn’t buy.
PC is just the very basic. Another aspect is Software Development Tool and Software Component. With the right Software Development Tool in place, it would actually increase the productivity of the programmer at least by two folds. Would you rather paying a couple thousands Ringgit to buy the right tool or paying the programmer double his salary and double the time to get the task completed? Productivity is one aspect of it; a good Software Development Tool also helps to increase product quality. The main purpose of a Software Component is to add more advance feature into our current product without needing to spent too much time and resources on R&D. COMPANY X encourage us to look for free solution to avoid incurring extra cost, but we actually loose more by loosing product features and producing a lesser quality product. Good things sometimes come cheap; but it doesn’t come free (with the exceptions of a handful of reputable Open Source product). Without proper hardware and software of the programmer (which is the very basic of things), we can’t really be serious in considering ourselves a strong Software House?
The above is just a few things I can think on top of my head, there are so much more we could do to move ourselves from the Good position to Great. COMPANY X had a very innovative improvement on the Sales aspect of the company, by expanding the Sales & Marketing Division and creation of Client Service Division. It is a great move to boost the much-needed Sales of the company. Maybe is the right time to make the same move for the Product Development element of the company. To be a Software House, we need a Strong Product Team to create the much-needed Core Product to set a strong footprint in the market. We can’t understand everything; we just have to know the guy who understands the thing, which we don’t. COMPANY X need to catch the wind of change to become a reputable Software House, unless she is satisfied with her current position. From Good to Great, there are only a few distinctive factors, which separate them.
COMPANY X is always Good, but was never Great. Perhaps it is time to make a leap?