Three Essential Skills for Agile Developers
Agile software development requires us as developers to do far more than just write code. It requires us to be dynamic professionals who can integrate with every part of the development process. Let’s discuss three sets of skills which every agile developer needs.
1. Business Analysis
Software must fulfill a set of conditions known as requirements, which are often documented as user stories. Agile developers must understand both the user story and the business process which it is based on.
An ideal user story would give a developer all the information they need to implement it. However, in most real projects, user stories will contain ambiguity or lack vital information. A naive developer will have to ask a business analyst or a product owner for guidance. Frequently, this will result a modification of the user story which adds unnecessary technical complexity to its implementation. By contrast, developers who understand the user story’s underlying business process, do not need external feedback. These developers can make implementation choices which both minimize technical complexity and satisfy the business requirements.
Business-savvy developers also create intuitive and adaptable codebases. They structure their code such that it matches the structure of a business workflow. When the workflow changes, it will be easy to modify the existing code to incorporate the new change. Since these developers recognize business logic which is used in many distinct business processes, they also correctly create centralized and reusable software components.
2. Project Management
The essential feature of agile development is the reliable delivery of an agreed upon product at the end of an iteration with a fixed duration. If we cannot determine what parts of the product can be finished by the end of an iteration, then agile development is impossible. Thus, developers must be able to accurately estimate the duration of development work and commit to only they can finish within an iteration.
There many strategies for accurately estimating development tasks. For example, one can identify a similar task completed in the past and use the duration of its completion as a baseline. Another common strategy is the splitting of large tasks into smaller sub-tasks which are generally much easier to estimate accurately.
When estimating individual tasks, developers must account for unexpected difficulties encountered during their completion. One way is to add a percentage of the original estimate’s time to itself to produce the final estimate. For example, if we think feature A will take 5 hours to implement and we use a percentage buffer of 20%, our final estimate would be (5 hours) + (20% of 5 hours), which is 6 hours.
When committing to work for an iteration, developers must consider time spent on unexpected issues which are unrelated to the iteration’s tasks. Common examples of these issues are bugs in pre-iteration functionality and infrastructure failures. A developer must reserve some time in the iteration for these. For example, if a developer has 60 working hours in an iteration, they should commit to 55 hours of tasks, reserving 5 hours for unexpected problems.
It’s common for some developers within a team to meet their sprint commitments early, while other team-members may be in danger of not completing their tasks for the sprint. In these cases, the developers who finished their work early can take on some of the overburdened developers’ tasks in order to ensure that the sprint goals are met. It is much easier to do this if tasks have been split into sub-tasks which can be independently worked on in parallel by multiple developers. Tasks should be split in a way such that the sub-tasks are not dependent on each other.
3. DevOps
DevOps allows for efficient software development by continuous integration (CI), continuous delivery (CD) and the automated management of application infrastructure. Every agile developer should have a rudimentary level of skill with these elements of DevOps.
CI/CD pipelines are the heartbeat of a modern development process. They allow a rapid feedback cycle for software updates made during an agile iteration. CI/CD pipeline malfunctions can bringing the development process to a grinding halt. They block quality assurance analysts from testing the latest software changes and block developers from implementing features dependent on those changes.
Because of the massive impact of CI/CD pipeline errors, every agile developer should be able to resolve them. Developers must identify which stage of the pipeline failed, determine why that stage failed, devise an appropriate solution and apply that solution. Thus, agile developers must be skilled at the retrieval and analysis of the CI/CD pipeline’s logs. They must also understand the configuration settings of the pipeline and how to modify them.
Agile developers must be able to identify the deployed software version on any environment at a given time. This is a critical skill for coordinating with testers, who will require the changes to be deployed to the appropriate environment. Confusion about what version is deployed in an environment can waste a significant amount of time for both testers and developers. This is one more reason an understanding of the CD pipeline is crucial.
A key aspect of DevOps is the management of application infrastructure. A developer must be conscious of the nature of the application’s infrastructure and how it is managed. The correct implementation of an application’s logging, concurrency and state management will depend on infrastructure. For example, if an application runs inside a Docker container, persistent state information should not be maintained within the container’s file system. If the container restarts, the state information will be lost.
Summary
To be a successful agile developer, one must have the skill to:
- Understand the business processes upon which software is based
- Commit to the correct amount of work for an agile iteration
- Manage CI/CD pipelines and application infrastructure