Four core values of engineering culture
November 6, 2021
Engineering is a vast exercise in most organisations and consists of hundreds of micro-decisions made day to day by hundreds of people. These decisions are not just technical decisions but also how they choose to work together and this comes to define the ‘engineering culture’ of the organisation. As the organisation grows, it may come to mean different things at different points in time. The core can be boiled down to four key values, which metamorphose into various behaviours and habits. Usually, a team exhibits these values in various proportions from the first day as they are exhibited by the founders and they set the course for the culture of the team in times to come. The expression for each of these values changes with the challenges and size of the company. But if the core value itself is absent in the team, it leaves the leaders with a very uphill task of introducing them. Even in small teams, it may be very difficult to ask the team to imbibe a new value system.
Discipline
It is the commitment and trust to decide upon specifics of routine tasks and to follow them in all the tasks every day consistently. This may be as simple as having a linter and a spell checker, or writing clean code, writing unit tests during development, reviewing all pull requests, doing proper dev testing, adhering to all stages of PDLC and CI/CD, sticking to architectural decisions and guidelines such as service boundaries and data models, planning sprints and doing sprint demos and retros, having proper monitoring and error handling, reviewing application performance regularly, on-call discipline, closing support tickets on time, writing good user stories, properly grooming tasks before working on them, being on time for all meetings, finishing all meetings in time, sticking to agenda during meetings, replying to emails and messages in time, regular performance and reverse feedbacks, etc.
It is not about doing each one of these, but it is about deciding which you want to and sticking to them. This value becomes the foundation of building larger processes when the company grows, which is inevitable. Processes are the cornerstone of any large successful company. The processes can become burdensome and demotivating very soon if even a few people in the team lack the enthusiasm and the willingness and refuse to participate in them. It is very easy to invent processes but equally difficult to run them successfully.
Ownership
It is the quality of individuals and teams to be self-led as opposed to having all instructions being pushed top-down. There are several technical decisions that engineers take every day such as the functions and variables, the queries and data models, choice of frameworks, APIs and interfaces, etc. But they are also constantly choosing which issues to fix, which ones to not, what code to refactor, what to comment on pull requests, what to write in comments and documents, spotting potential issues or inefficiencies, etc. Every engineer constantly picks up something from someone else and leaves behind something for someone else. It is impossible to manage all such decisions from the top, leaving aside the question of whether it is desirable or not. And these translate into the quality of the produced software and ultimately the success and failure of the product organisation.
To cultivate ownership is not just to assign accountability. It is about having a consistent framework for making decisions and for evaluating teams and individuals. The leaders need to constantly work hard to disseminate this framework in their teams and evolve it constantly with changing needs and times. Unless the leaders have defined and communicated this, they have not thought through if the teams and individuals will be able to fulfil their responsibilities. They have not set their teams up for success. Consequently, accountability is no longer enforceable and all goals are seldom achieved fully.
Empathy and Mutual Respect
It is about the team members being emotionally secure and aligned with each other in their work environments. Emotions and expressions can be very different for team members coming from different backgrounds. The absence of discrimination is the very basic prerequisite in creating a safe work environment. But above and beyond that, trust and mutual respect is something that is universally understood and recognised and should be the basis of all interactions. Individuals or teams without mutual respect can rarely produce anything great. A common example is a lack of mutual respect between divisions of the company such product and engineering, or sales and product, or between managers and engineers, etc. As a result, communication is never taken for what it is intended to and teams spend considerable resources backing themselves up against potential blame games. Also, there are times when everyone needs support and cannot give their best. If the team members have a culture of supporting each other during such times, it works out for everyone in the long run. After all, no one is immune to fate.
Drive
It is how much desire the individuals have to solve the problems the company is facing and trying to solve. Do the engineers feel pride in what they have built? Do they share a sense of urgency? A lot has been written on intrinsic and extrinsic motivation and the quality of output of motivated and unmotivated teams which need not be repeated. It requires relentless communication of the vision by the leaders and the impact the product is creating. In the long run, these words would need to be backed by evidence to win the trust of engineers. Secondly, is good engineering recognised and appreciated in the company? This requires leaders to communicate the quality they expect to see in their products early on. In the long run, quality needs to be objectively measured and concrete steps taken to maintain it by spending the resources required to do so. Words not backed by actions turn engineering teams increasingly cynical.