Agile development methodologies have been widely adopted by many industries for over two decades as a more effective and efficient way to manage product development than the often disparaged “waterfall” model. No arguments there, but let’s keep in mind there are always trade offs.

The idea of “Agile” in software development can be deceptive. What I mean is that when someone, or some process, is being “agile”, that is a lot better than being “rigid”, right? Sure, definitely.

But we often miss the fact that it’s not just something or someone else that will make my life better because they are being “agile”. It’s also us going to be up to each one of us individually that will need the agility to pivot and respond much more, and much more often, to increasingly complex changes in the environment, unlike that of the traditional waterfall development experience.

When “Agile” applies to me just as much as anyone else, well that actually sometimes make our lives as developers, analysts, testers, product owners and managers rather complex and sometimes more hectic than a more structured Waterfall model. Why? Because the context switching is more frequent. One can find themselvs switching back and forth between: Define –> Design –> Develop –> Deliver (“Integrate”) –> Deploy, several times during the week across two, three or even four different Stories. (Testing occurs at each phase).

In sum, when the environment and team around me is responding to my needs in its best form of “Agile” then we smile 😃.

But when it’s our turn to be agile for someone else (for the third time today), the 😃 can quickly fade to a 😣 .

A Feature passes through all five of the following phases (until software reaches it’s end of support life cycle.)

Defining

Designing

Developing

Delivering

Deploying

Do you notice a couple things?

  • First, each of the five phases are actions/verbs (gerunds), not infinitives. Because each phase is a continuously occuring incremental peice, that is followed by another phase until the larger end product is finalized.
  • Second, “Testing” is not mentioned? Since testing, or validation, is not an insulated independent activity, but instead it should occur at the end of every phase, it does not need it’s own concrete phase to be spelled out.
  • Testing, whose form is appropriate to each phase, occurs at the end of each phase !!

1) “Living in the Limelight”: It focuses on validating what the business sees has the highest value areas of the system or application.

2) No need to reinvent the wheel.

A common problem with a large code base maintained by many people over many years is how often the wheel gets reinvented. If there aren’t strict controls placed and a solid foundation laid you wind up with a lot of low level infrastructure code that performs the same or similar functions. And often the engineers and developers already know this, but for practical and political reasons continue to create the redundant code anyways. This can lead to uninspiring and unfullfilling work.

On the other hand, development of automated testing software will almost never encounter this problem. Because of the reality where project budget priorities place Software testing relative to the regular application development, test cases in Quality Assurance or Quality Engineering, whether automated or manual, will almost always have to focus on those parts of the software and systems that the business considers most critical to its operations.

“Each test should run in any order, any number of times, and produce the same result using the same data.” QA Wisdom

In other words, regardless of how many times an operation is executed, the outcome remains consistent and unchanged after the initial execution

OK, that might be a bit unfair. There actually can be valuable outcomes from meetings. But at some point during the later part of my tenure at Amex, a novel approach of segregating development activities between the morning and afternoon (or first half and second half of the day) was introduced. Although never did anyone, or any team, 100% adhere to this approach, it quickly became the gold standard that everyone raved about when it acutally happened… and otherwise hoped for someday.

Morning activities were to be reserved for all of the kinds of work that do not involve writing, deploying and testing one’s code. Mainly meetings (of the working variety or otherwise), such as:

  • Coffee and some early morning chit chat
  • “Slack channel rush hour”
  • Scrum standups with the PM and team
  • upcoming Sprint planning
  • Design meetings at the whiteboard
  • Cross team release planning calls
  • Managing the endless number of enterprise technology requests:
    • ServiceNow tickets and incidents
    • IIQ approvals, etc
  • training
  • more of course…

The Afternoon activities should be spent most of the time in:

  • an IDE
  • a shell command line
  • a CMS such as Confluence, referring to or revising documentation or system diagrams
  • the CI/CD pipeline to deploy and test your code
  • some other testing tool like Postman or soapUI

But we rarely had a release that we struck gold…. lead was more like it most of the time! 🙂