"I'm using Azure DevOps, isn't that practicing modern application development?"
Just because something is labeled a “thing,” in this case DevOps, doesn’t mean that an organization is doing anything modern in its application development practice.
Many people will think that technology decision points drive the “modernization” of applications. To be sure, technology plays a key role, but I prefer to think of application modernization as a three-legged stool.
Modern application development begins with people. Most enterprise IT shops do business via “projects.” We’ve found that successful application development activities occur when people employ a “product” mindset, rather than a “project” mindset. This highlights the first-person role in modern application development: The Product Owner.
The Product Owner sets priorities in an Agile process, ensuring maximum business value is realized as early in the process as possible. When I’m introduced to a project (or product) going through a modernization process, this is the key person I look to find. Some things I seek to discover about the Product Owner:
- Is this person involved at least in some daily ceremonies (like standups)?
- Does this person drive the “sprint planning,” working with the team to arrive at a consensus for the next iteration’s workload?
- Does this person attend “showcases” and help articulate to the business the value of the efforts?
These are key questions and hallmarks of a good product owner.
A second key role in successful modern application development is the Business Analyst/Scrum Master role. This may be a titled position, or one that is simply assumed amongst the team. This is the individual responsible for backlog grooming, driving standups and the one responsible for ensuring work is distributed to the team in a smart way. Some things I seek to discover about the Team Lead/Scrum Master/BA role:
- Is work deployed to the team in a context-sharing manner? In other words, do team members with the least context anchor work tasks so they can gain context?
- Are standups done in an efficient manner? This person should be ensuring team members answer “the big 3” things during their daily statusing: (What have I done, what will I do and what blockers do I have?)
This role’s key contribution will be to remove blockers from the team.
As mentioned briefly above, there are several key processes that are a hallmark of modern application development. For the purposes of this writing, I’ll describe these processes in the form of ceremonies.
- The daily standup: This is an absolutely critical part of modern application development. The format can be different for different teams/products, but the purpose is the same: The daily standup should be a quick status report by each team member that answers:
- What have I worked on?
- What will I be working on?
- What are my blockers?
The standup is not the place for a deep dive into technical problems. Many times, successful, empowered teams will do things like shout, “ELMO!” when things drift from their intended purpose. ELMO means simply “Enough, Let’s Move On.”
- Sprint planning: This ceremony is at the beginning of a sprint of work (generally 2 weeks) and involves the product owner, allowing the development team to “commit” to a certain velocity for their sprint. The velocity is a commitment to a quantified set of work. Each card in the backlog is generally categorized for length of time or complexity with what is called “story points.” These are relative units of measure the team uses to describe complexity or time. Rather than “that will take me 3 hours,” the team agrees to a number of “points” it will take. For example, “that is a 2-point card.” Many teams leverage Fibonacci sequencing to prevent ambiguous level-of-effort scoring. (1, 2, 3, 5, 8), and then further commit to not having any cards worth more than 8 points. This allows for a decomposition of work into bite-sized chunks.
- Showcase: A hallmark of modern application development is the idea of deployable/showcase-able code at the end of each sprint. A showcase is an opportunity to “showcase” the work completed at the end of the sprint. If there is no showcase-able work at the end of a sprint, this means that the work needs further decomposition into smaller chunks. The team will need to iterate further, sprint by sprint, to refine its norm.
- Retrospective: A retrospective ceremony where the team looks back and asks key questions is also important. Participants meet to decide what to Keep, what to Stop and what to Start.
- Keep: What went well?
- Stop: What didn’t go well?
- Start: What do we need to start doing?
Modern application development has certain key design and technology decisions. Gone are the days of the default N-Tier application design. The default modern design today is “microservices.” This is a re-take on the SOA architecture of 15-20 years ago, but leveraging modern containerization practices, actual results can be remarkable with modern application design.
Technologies like Kubernetes, Heroku, Netlify, Cloud Foundry and Nomad are “container orchestration” technologies that leverage the Docker wave that started a few years ago. Containerized applications enjoy true cloud-native capabilities like horizontal scale at the work unit perspective, which enables elasticity where it needs it most. With this comes cheaper runtimes where things can even move into a serverless pay-as-you-use model.
Modern application development that is cloud-native and built to have resiliency will also enable processes like chaos engineering and synthetic testing to explore new ways to harden the code, find edge cases and to make infrastructure more resilient.
Tools like Terraform, Ansible, Chef and Puppet will be found in the core and periphery of modern development teams. Teams that leverage these infrastructure tools for infrastructure and configuration automation show they are leveraging cloud infrastructure in a cost-effective manner, that is far more secure than long-lived computing workloads.
Modern application development is certainly a subjective, loaded term, that means different things to different organizations. I’ve discovered if one views modern application development through the “people/process/technology” lens, there are some signs that help to identify it.
It’s only by balancing these three areas that an organization truly achieves modern application development.