2 Inner Loop: Development Environments

 

This chapter covers

  • Working with requirements and codebases
  • Setting up a portable and reproducible development environment
  • Implementing new requirements in the inner loop
  • Defining a baseline for the developer experience

In this chapter, we will start exploring the inner loop activities that developers perform to do their work. The inner loop takes place within the context of a development environment and it’s triggered by a new requirement that needs to be implemented to produce business value.

We’ll start by exploring how to work with requirements and new codebases. Next, we’ll evaluate a few options to handle the challenges of development environments, aiming for a portable and reproducible outcome. Finally, we’ll implement a new requirement for one of the services in the MinSalus application and describe the basic inner loop activities with hands-on examples in Go and Java.

2.1 Preparing for Development: Requirements and Codebase

Imagine you’re an application developer who has just joined a new team. You’ve been given a new laptop and are ready to start working on the project. You get assigned a task to implement a new feature in an existing application. You’re excited to kick off the inner loop activities and start coding. Before jumping to the implementation, though, let’s explore how to work with new requirements and codebases.

2.1.1 Working with Requirements

2.1.2 Managing the Codebase

2.2 Managing Development Environments

2.2.1 The Anatomy of Development Environments

2.2.2 The Challenges of Traditional Development Environments

2.2.3 Service Portability with Containers and Podman Desktop

2.2.4 Developer Experience Pattern: Development Environment Activation

2.2.5 Development Environments with Devcontainers

2.2.6 Development Environments with Nix and Flox

2.3 Implementing a Change

2.3.1 Understanding the Current Behavior

2.3.2 Code and Run

2.3.3 Test and Debug

2.4 What we learned

2.4.1 Friction Point #2: Setting Up a Development Environment

2.4.2 Friction Point #3: Making a Change

2.4.3 Friction Point #4: Testing a Change

2.4.4 Friction Point #5: Running a Change

2.4.5 Friction Point #6: Debugging a Change

2.5 Summary