Software Development Skills Roadmap

Introduction

Modern professional software development organizations must adopt multiple disciplines to stay competitive and adapt to change at scale. Knowing what skills are required is essential for any development manager but attempting to tackle everything at once can be both daunting for team-members and disruptive to a development workflow.

The Software Development Skills Roadmap is a proven path for rollout of technical skills in your organization. This roadmap provides a straightforward, effective path to follow which allows teams to focus on adopting one skill at a time and considers management concerns, like how long it will take for each investment to pay off.

The first step is to create alignment in the organization using Acceptance Test-Driven Development (ATDD). Next, teams should focus on improving design skills with a focus on fundamental quality by using design patterns and underlying theories to guide technical conversations. Third, teams should bridge high-fidelity domain understanding and strong design skills by creating fast, actionable feedback using Sustainable Test-Driven Development (STDD).

These three disciplines provide the foundation. From here, teams can move on to a deep understanding of design principles and software professionalism with Advanced Software Design. Finally, teams can create direct connections between business and production code and maximize reuse of analysis artifacts with strong Acceptance Test Automation.

Start with Alignment

One of the biggest challenges that large software development organizations face is a lack of alignment on what is going to get done. All too often, a team finishes some work only to find out that they did not do what was requested. Perhaps these misunderstandings cannot be eliminated completely, but it is possible to reduce their incidence dramatically.

Summary of benefits

Here are some benefits you will see:

  • Quick, almost immediate return on effort
  • Fewer defects
  • Fewer misunderstandings and low-fidelity handoffs
  • Better communication throughout entire product development organization
  • Better understanding of the domain by the software development organization

What is the relationship between BDD and ATDD

BDD and ATDD share much in common. Both use Given/When/Then, involve technical and non-technical people, and require effective collaboration.

Consider the SIPOC diagram that shows the flow from expectations to requirements to specifications and the actors involved in making this happen. BDD starts with requirements and produces the specification of a desired behavior. ATDD takes the outcome of BDD and turns it into an executable specification (a “test”). This is true whether or not the ATDD execution process is automated.

ATDD makes BDD executable and therefore verifiable immediately and in the future as the system changes. When teams learn to do BDD properly, they can also do ATDD effectively without increasing effort. Thus, we always teach BDD and ATDD together to maximize the benefit for students.

Lay a foundation of Design and quality

Change is part of business. To endure, software products must be able to change. Design and quality are what make software flexible enough to change when the need arises. In fact, certain critical change-enabling disciplines such as Test-Driven Development absolutely depend on the developer’s understanding of, and ability to change, design.

A deep understanding of design patterns and some practical experience using them to identify and address problems builds a foundation atop which all other technical skills rest. Design patterns change how a team communicates and how its team-members think about design. A rich understanding of code qualities changes how developers look at code. Some intensive practice at the beginning cements this knowledge and accelerates a team’s ability to adopt the required skills.

Like ATDD, investing in a team’s design skills offers quick benefits: immediately or in a few weeks. The combination of ATDD and design patterns can be used to get some quick technical wins that can then be used to pay for the bigger investments.

Summary of benefits

Here are some benefits you will see:

  • Benefits begin very quickly
  • A sure foundation for all other technical skills especially STDD
  • Bringing technical analysis into the process at the right time and in the right amount

Build quality into your process with a new workflow

Adapting to change works better when you know that modifications do not carry any unintended side effects. Unforeseen side-effects can come from many sources. For example, a developer might:

  • Do something other than what they intend to do
  • Not have a clean place to make a change
  • Not understand the thing they are changing
  • Make a simple “bone-headed” mistake

Sustainable TDD is a single discipline that addresses these problems by fundamentally rewiring the development workflow. Starting by defining what the software is supposed to do crystalizes understanding of the change you intend to make and focuses your intent. Attempting to connect a test to software tells you if the software in question has a design that will support the change and triggers refactoring if it won’t. Tests already written serve as technical documentation of what something does and helps a developer understand that thing before they change it. As executable specifications of behavior, tests warn someone if they have made a simple error that causes their software to violate an existing expectation.

However, TDD must be conducted in such a way that the suite of tests itself does not become an undue/unsupportable maintenance burden. Developers must learn how to conduct this discipline sustainably. This must include the issue of legacy code, and how to incorporate changes to existing, often untested code into the process.

The investment cost of Sustainable TDD can be substantial but the dividends are enormous: If done properly, it drives out much of the wasted effort in a team’s daily workflow. Some teams have reported a 25% increase in velocity after becoming competent in Sustainable TDD.

Summary of benefits

Here are some benefits you will see:

  • A natural bridge between domain analysis and design analysis
  • An executable specification that is always up to date and defines what the software should do
  • Continuous protection against the most-common sources of defects
  • A persistent, verifiable record of the knowledge used to create the system

Amplify gains with advanced software design

The profession of software development is founded on skills that run very deep. Basic patterns thinking and communication will greatly improve the quality of code but learning about software design is a lifelong journey. ATDD and STDD help to specify what you are going to build and to automate tests for it. All of this is good but you can realize even more improvement when you begin to think deeply about the relationship between specifications and tests.

Advanced Software Design expands a software developer’s mind by introducing developers to additional design forces, exposing them to more design patterns, and showing how different design patterns can interact. More time spent on larger exercises gives developers an opportunity to practice the analytical part of the software design process in an intensive way. It cements the idea that software development is a profession that needs the same care and attention that any other profession such as architecture or law would require.

The Net Objectives ATDD Automation Lab serves as a sort of capstone course, bringing together everything that has been learned in all previous technical courses, closing the circuit with ATDD, unifying ATDD automation and STDD, and showing teams how to get the most out of their ATDD specifications. Upon completion of this course, a developer will know how to reuse an ATDD specification gathered through collaboration with business stakeholders in multiple ways, including using them as unit tests and integration tests. This results in otherwise unparalleled visibility into what a software product is doing as well as how healthy it is.

Summary of benefits

Here are some benefits you will see:

  • Driving home the concept of software development as a profession
  • Exposure to complete set of design forces
  • Maximized reuse of ATDD specifications
  • Deep, business-readable visibility into health and functionality of a software product

Next steps

Net Objectives offers coaching and training on a wide variety of topics pertaining to software development, including the subjects outlined in this page.

Specifically, we have training options for ATDD, Design Patterns, and Sustainable Test-Driven Development. For a deeper training experience, with a shorter time to payback, organizations can invest in courses such as the Design Patterns Lab, the ATDD Automation Lab, and Advanced Software Design.

We can help you determine the best way for your organization to begin and the most effective schedule for the time you will spend with us. Usually, our training is conducted onsite so there are no travel costs for the attendees.