On Building Winning Teams and Products

Mohammad Shaddad,

A collection of basic nonetheless often ignored rules of thumb to think about while building or maintaining software teams and products.


  1. “Better to wait for a productive programmer to become available than wait for the first available one to become productive” - Steve McConnell.
  2. Better to wait for a good company to become available than to wait for the first available one to become good.
  3. “We have a great product and are growing, but we cannot find enough good programmers.” You believe you are good at selling products and wonder why you cannot sell open positions at your company to programmers. Good programmers are not looking to buy a position, they are looking to sell their time and knowledge. When they want to buy, they will trust their own judgement more than your sales pitch. When they perceive that they are undervalued, they will run. Strive to understand and value them.
  4. “This contract is to ensure that the Employer will supply the bare minimum of money, facilities, machines, and tools while the Employee will supply the absolute maximum of time, knowledge, health, and relationships to ensure the success of this company.” Did that sound… uncomfortable?


  1. Would you rather lose the available manager, or lose the good people on his team who will quit their boss?
  2. Would you rather lose the available programmer, or lose the good people in his team who do not want to read his code?


  1. “In a hierarchy every employee tends to rise to his level of incompetence.” - Peter Principle.
  2. “Companies tend to systematically promote their least-competent employees to management (generally middle management), in order to limit the amount of damage they are capable of doing.” - Dilbert Principle.
  3. “The Law of Crappy People states: For any title level in a large organization, the talent on that level will eventually converge to the crappiest person with the title. The rationale behind the law is that the other employees in the company with lower titles will naturally benchmark themselves against the crappiest person at the next level. For example, if Jasper is the worst vice president in the company, then all of the directors will benchmark themselves against Jasper and demand promotions as soon as they reach his low level of competency.” - Ben Horowitz.

Architecture and Design

  1. “Architect is a title for senior people: is a nice way to say you are old.” - Kevlin Henney.
  2. “A software architect who does not code is like a cook who does not eat.” - Grady Booch.
  3. “When you discover something in your software that is hard to change, that is 'architecture'”. - Kevlin Henney
  4. “Any organization that designs a system will produce a design whose structure is a copy of the organization's communication structure.” - Conway’s law.
  5. “Corollary to Conway's Law: If you design a system, but you didn't design the organisation structure, you're not the system's designer.” - Matthias Verraes.
  6. “Your organization will get the process that it deserves.” - Scott W. Ambler.
  7. “No engineered structure is designed to be built and then neglected or ignored.” - Henry Petroski.
  8. “Simplicity and elegance are unpopular because they require hard work and discipline to achieve and education to be appreciated.” - Dijkstra.


  1. “Perhaps instead of "we must get better at estimates" we should try "let's become less dependent on fortune telling."” - Andy Hunt.
  2. “You release a minimum viable product with the developers you have, not the developers you might want or wish to have at a later time.” - Grady Booch.


  1. “We’re 15% less productive, we have immense trouble concentrating and we’re twice as likely to get sick in open working spaces.”
  2. Deadlines and financial incentives hinder innovation.
  3. Continuous stress degrades memory.


What level is this content for?

We've all had our humble beginnings, it's our hard learned experiences that got us to master our code. We will all learn something sharing our knowledge, leave a legacy and write a post now.
create Write post

About the author

Mohammad Shaddad
Mohammad Shaddad

Mohammad is a technology consultant and entrepreneur with big passion for technology and living systems; aka software communities. He enjoys mentoring other programmers and entrepreneurs, as well as creating new things. Mohammad is the founder of @barmijly and @nafaqati. He currently spends his time between Amman.JO and Dubai.AE.