4 ways to make your engineering team more productive

Improving the efficiency of your software engineering team has many advantages, prime among them being the ability to make up for problems in other areas.

Whether you’re facing budget constraints, having problems sourcing and retaining talent or simply wanting to boost product iteration, focusing on increasing your engineering efficiencies will yield strong results for a long time to come.

Here are four ways to start optimizing your engineering resources:

Analyze your development workflow

CI/CD pipelines are generally slow and break often, leaving developers frustrated and looking for problems.

A recent report found that 47% of surveyed companies took days to deploy CI/CD pipelines, and only 10% could do it within minutes, which is what time-efficient pipelines should be able to do.

Focusing on increasing your engineering efficiencies will yield strong results for a long time to come.

Why is that important? Puppet found that high-performing IT teams — which could deploy and push code to production faster than their peers — experienced 60 times fewer failures and recovered from them 168 times faster. It’s paramount to have tools in place that can help you analyze and fix your development workflow.

The first step is to map out all the steps of your CI/CD pipeline. Pipelines today are becoming increasingly complicated: unit tests, integration tests, security tests, compliance checks, load tests and so on. There are countless ways things can slow down or break.

The second step is to put in place tools to monitor and analyze these pipelines. Datadog, Splunk, Athenian and open source DevLake are some tools that can help get you there.

The third step is to spot what is broken and improve what is slow. What’s the PR cycle time? How often do you release? Are there specific parts of the pipeline that are problematic? These are the questions to ask, answer and act on to increase your shipping pipeline velocity.

Make your development environments reproducible

Reproducible development environments are slowly becoming an industry standard, but it can be difficult to make an existing environment replicable. Whether it’s to allow a new hire to push their first commit on day one or enable your engineering organization to have an identical development environment — replicability is critical.

Containers — democratized by Docker in the last decade — offer one way to reach reproducibility. But because their focus is on application portability, some argue that it’s not always the best approach for making development environments reproducible.

Another open source project, Nix, offers similar features as well as complete environment reproducibility. Nix has a steep learning curve, but it is worth it in the long run. And the good news is that Docker and Nix work together, which lets you get the best of both worlds.

Make your codebase easily searchable

The Unix command grep, first released in 1973, remains the de facto standard for searching code bases. While it is a great tool that serves its purpose well, we now have tools such as GitHub Code Search or Sourcegraph that offer a much better search experience.

There are plenty of use cases for a good search tool, including finding existing snippets of code that can be reused, navigating a codebase and its dependencies, filtering results by languages, making large-scale code changes or simultaneously searching across multiple local or cloud-based repositories.

A good search tool will offer these and more features that will boost your developers’ productivity.

Put your development environments in the cloud

Attrition in tech isn’t happening only because of bad managers; engineers often leave companies because they’re forced to use inefficient tools or deal with massive tech debt.

A Stepsize survey found that 51% of the surveyed developers left a company or considered leaving due to the large amounts of technical debt, while 82% said lack of proper development practices affects their job satisfaction.

While most companies’ infrastructure has been moved to the cloud, the development environment is often still based locally. This leads to a lot of headaches, such as keeping up with the computer OS, managing coding tools and setting up and maintaining dev environments.

Using cloud-based development environments offers many advantages that local ones can’t:

  • Spin up ready-to-use development environments in a jiffy.
  • Lower build and test times by leveraging cloud computing infrastructure.
  • Allow for multi-gigabit bandwidth between the environment and other cloud services.

If cost optimization is one of the goals associated with improving developers’ efficiency, not having to buy your team powerful laptops will definitely help. This is especially true for teams that have serious computing needs, such as machine learning, big data or dealing with huge codebases.

One of our customer’s developers had to wait 30 minutes for builds to complete even with a top-of-the-line 32-core MacBook Pro, but their build times went down to just six minutes at 25% of the cost after they moved their development environments to the cloud.

In the last decade, a lot has been done to make the deployment and operation of software easy, but as a16z said, “large parts of the developer experience are still largely ignored,” and I believe that is the case for developer tools. They still run locally, take days or weeks to set up, are a nightmare to maintain and get in the way of the high velocity that companies are looking for. Now is the time to change that.