A difficult question with no single answer. I do like a number of the traits listed in the following Quora question:
- Optimize for iteration speed
- Push relentlessly toward automation
- Develop a focus on high code quality with code reviews
- Build a culture of learning and continuous improvement
I really like the following description of what it means to be a team and what the objective of a software engineering team should be:
High quality software engineering is the product of a team. No one individual can be expected to deliver, nor take credit for, a successful product on his or her own. This gets fuzzy in small startups where there may only be one engineer, but otherwise holds true. A culture that celebrates one individual at the cost of another is making a grievous mistake.
There is an important distinction to note here about what comprises a *team* of engineers versus a group. The distinction is that a group is not a team until everyone in the group is committed the purpose [1]. In my experience, this commitment comes from inspirational leadership and transparency. The fact that an engineer is employed by a company is not reason enough to incite the determination, dedication, and thoughtfulness necessary to produce quality code. Committed engineers are engineers who are proud to work where they work and excited to talk about their jobs and their company’s products.
Ultimately, a good engineering culture is the result of a complex equation that includes the culture of the company, the objectives of the founders, the product being built and ultimately the first couple engineers. If you want to balance the equation, make sure you have product-engineering fit as well as product-market fit.