Standards

In the team, we all share a common goal and we need to establish a unified approach to achieve it.

After all, I would rather have a standard that I don’t like rather than have no standard.

Why standards?

This is a true value — with standards we know what to expect, and we do not need to ask detailed questions since everything is outlined in the standard. It is important to strive for this level of clarity.

Defining standards is never a waste of time.

Types of work

Deliverables

These are artifacts produced by engineers, such as code, documentation, emails, reports, etc. When working on these types of tasks, it is best to use a template. Many systems provide support for templates, such as issue or merge request templates. Even a Jira story can be considered a type of template, as it provides fields to be filled in.

Processes

These are tasks that engineers perform. The main issue is that we frequently forget things. Defining a standard that ensures all tasks are performed in correct order, and have expected results is a simple solution for repeatable processes.

Checklists and templates

Checklists are an excellent type of standards for tasks, and I use them whenever possible. Reviewing code? Follow a checklist. Releasing to production? Follow a checklist.

Checklists have a long history in engineering and other fields, such as aviation. They can take on different forms and be referred to by various names, such as playbooks or workbooks. However, their purpose remains the same. They are used to ensure that no step is overlooked in a task. Additionally, checklists serve as a form of documentation and can be a foundation for automation.

Checklists have their own chapter in “Code That Fits in Your Head: Heuristics for Software Engineering” by Mark Seemann.

Third party standards

Defining a standard can be challenging, but fortunately, there are some readily applicable standards. One example is code formatting standards. For most programming languages, there exists a standard formatting style along with corresponding tools for enforcing it. Examples include clang-format, gofmt, and Python’s Black.

Examples

The standards that I usually prioritize are:

  • Code formatting: In modern languages, this is not a problem. Tools like gofmt or Black enforce formatting standards, leaving no room for debate.
  • Merge requests: I prefer to use templates for merge requests. These templates can require engineers to provide certain information or go through a checklist.
  • Bug report: This is a common example of using a template. Many open source projects on GitHub use bug report templates to ensure that developers provide all the necessary information when reporting a bug. You can find an example here: link
  • Changelog: You can refer to this example: link
  • Commit messages: For commit messages, you can follow the guidelines outlined here: link