Good and bad company

A software graduate asked me: “What is the difference between a good software company and a bad one. How do I distinguish them? Is there any way to find out before I work for them? Please advice.”

Answer: The best way is to ask people who work there. Ask developers about their work condition. Find out who are from your school that work there and ask them.

Bad Software Company is full of bureaucracy and competition. In bad company, managers favor some developers over others by only share important information with their favorite developers. Experienced developers control project activities and protect their positions by get all important works, leaving less experienced team members with trivial works, mostly coding and testing. Developers compete with each other for managers’ attention with the hope of “better raise” or “extra bonus”.

Good Software Company is more dynamic and usually growing fast. In good company, managers have vision and clear direction on what to do. There is a sense of teamwork where team members are helping each others as everyone has a chance to contribute to the common goal of the company. Information and knowledge are often shared openly through constant collaboration. There is no individual hero but only team as developers see each other as partners rather than competitors.

Bad Software Company is full of pressures caused by missed schedules, missed requirements and unrealistic expectations. Developers only do what they are told by managers. They may spend weeks working on their own to deliver a function but do not want to share information with others. Many work long hours and often in an isolated area. They do not like reviews and often argue with each others to defend their positions. Few are responsible for their works and often delay fixing things until the last minute. Many often leave the company after few months so there are always jobs opening.

In good software company, developers commit to their works and generally deliver them. They plan works accordingly and follow it at a pace that keeps them finding the best solutions and not rushing to do thing quickly. Testing and integration means taking small steps, knowing immediately if there is any error and never letting defects become unmanageable. Developers support each other when things get difficult. By collaborating they deliver products regularly and get feedback during reviews. They often take a collective responsibility for continually improving their work. They understand that the sooner they fix things, the easier it will be to deliver quality software. Most developers enjoy working there and often stay.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University