I’ve been lucky enough to lead many engineering teams and work closely with product, design, business, and marketing. From this perspective I’ve seen many repeating “problems* that teams face, it’s rarely just engineers that aren’t proficient. There are ways to address these issues which come from applying published methodologies and combining them with your own experience.
These values are used when building any product. They are purposely high level and dictate the standard by which decisions should be made (different than principles or processes). The goal is to have an up-to-date list of overarching values that can be taken to any engineering team and used as a guide to increase the performance of a team. Some of this will be very opinionated from working with multiple engineering teams, some will come from books like The Pragmatic Programmer or Lean Startup and some may come from Zen Python or the Hackers Manifest.
This article will only contain the guiding principals. Other articles will contain the process processes, principles, and sometimes step by step instructions.
Done has one definition
Saying something is done has one meaning; it has test coverage, coded, checked for bugs, and delivered to production. Looking at it from the user and business perspective, something is done when
Bugs are more than an engineering cost
Bugs do not only concern engineering. They negatively affect sales who are demoing the product, business who are pitching the product, customers who are using the product, and designers who are exploring future iterations.
Reduce the feedback loop
The shorter the feedback loop, the faster adjustments can be made. An engineering team that only releases every 2-3 weeks is less efficient than a team that releases every 2-3 days. A bug that crops up due to code that was written 3 weeks ago takes longer to fix than a bug that is attributed to code from 3 days ago. Not much has changed in 3 days and the engineer still may remember the context.
Many of the specific principles around building a successful product efficiently have these values in mind. As with anything else, there are exceptions to the rules. Getting the team to understand the values such that they become a mantra is a big step toward an efficient product and engineering team. It takes time and discipline to change the previous habits that so often lead to inefficient product and engineering teams.