What kind of engineering principles can I set for my development team?#

Contributor(s): Siavash Sakhavi, Senior AI Engineer, Co-written with https://rytr.me/


Principles and values are two important concepts that should be set for any software team. All teams should set certain principles and values for themselves in order to be productive, successful, and happy. These two concepts are what will help guide your projects and keep everyone on the same page.

What are the differences between principles and values?#

The first step in setting the values of a team is to identify the principles that will guide their behavior. These principles are the underlying beliefs that drive their behavior and decisions.

A principle is something that is true for all members of a team, no matter what. These principles are typically agreed upon by the team members at the start of their project or business.

Values on the other hand are more personal to each individual and reflect what they believe in. In order to set your values, you need to first identify your principles and then list what those principles mean for you and how they will affect your actions as an individual on the team.

Examples of Engineering Principles#

The following are some engineering values that you can consider for your team:

  • Learn with curiosity: Learning is often about following the rules, but this can limit your mind. When you are curious, you have a spirit of exploration that can lead to creative solutions. Curiosity leads to questions, which lead to experiments and discovery.

  • Strive for simplicity: This includes the use of simple software design to ensure the user is able to understand it with ease. The engineer should also create documentation that is clear and concise. Simplicity is key in developing software that has a low bug rate as well as being easy to update.

  • Articulate your mental model: A software engineer’s mental model is their internal representation of the system being developed. It is the most important part of their job. They should be able to articulate this mental model to other developers in order for them to be able to understand what needs to be done, as well as what has been done and why it was done that way.

  • Teach with compassion: It is essential that software engineers are willing to teach their team members who may not know as much about the given task. Not only will this ensure the success of the project, but it will also provide a better work environment for all.

  • Ship fast, sustainably: Software developers often focus on the idea of “shipping” a product. But that’s not the end goal. The goal is to have sustainable software engineering practices. This means shipping software in small iterations, and ensuring that the team has a good work-life balance because nobody can be productive if they’re exhausted or burnt out.

  • Fix problems, even when they’re not yours: Ther is an epidemic of engineers who feel the responsibility for their own code but not the code that they don’t touch. This leads to uncoordinated, confusing and unmaintainable code. It is important for developers to take responsibility for the whole codebase and not just their own piece of it.

  • Communicate early and often: Communication is one of the most important skills in any team, and software development teams are no exception. From simple voice conversations to a more complicated Google chat discussion, it is essential that all members understand what is going on at any given moment. Without good communication, chaos can ensue and deadlines can be missed.

  • Company (i.e. Client) over team over individual: The software development team should prioritize the client’s requirements over the team’s ambitions and individual’s professional progress. It is easy to get distracted with new “shiny” software and frameworks. However, when the client’s needs are not a priority, this can lead to poor code quality and even missed deadlines.

  • Outcome over effort (Don’t reinvent the wheel): Most of the code required to process data, define a model and the given model is available online. There is no need to write everything from scratch.

Reference(s):