collage of Pragpub magazine covers
Take a step back in history with the archives of PragPub magazine. The Pragmatic Programmers hope you’ll find that learning about the past can help you make better decisions for the future.

FROM THE ARCHIVES OF PRAGPUB MAGAZINE JUNE 2011

Guru Meditation: Getting Past Agile Advanced Beginner

by Andy Hunt

PragPub
The Pragmatic Programmers
6 min readJun 28, 2023

--

Learning curves are typically not uniformly steep, or we’d call them learning slopes. Andy tackles one of the steeper segments of the agile learning curve.

https://pragprog.com/newsletter/
https://pragprog.com/newsletter/

Again and again folks tell me that theyre stuck. They embarked on the journey to become agile practitioners, but despite the best intentions, they cant seem to break through to function as a true, self-directed, self-correcting agile machine.

Instead, they are stuck. Stuck following published best practicesthat someone else came up with for a magazine article. Stuck following a plan that was handed down to them, due on a deadline negotiated by lawyers theyve never met or spoken with.

The team is practicing some agile methods, but they arent agile. Left to their own devices, nothing will change that. Theyve reached the Advanced Beginner stage, and its going to take some care and attention to move past this to become a competent practitioner.

To understand this, lets look at the Dreyfus Model of Skill Acquisition.

The Dreyfus Model

The Dreyfus Model is a helpful way of looking at how people acquire and grow their skill sets. It defines five levels that you experience as you gain abilities at some specific skill (for more, see Pragmatic Thinking and Learning).

Here are the levels, with some key features of each:

Novice — Rules-based, just wants to accomplish the immediate goal

Advanced Beginner — Needs small, frequent rewards; big picture is confusing

Competent — Can develop conceptual models, can troubleshoot

Proficient — Driven to seek larger conceptual model, can self-correct

Expert — Intuition-based, always seeking better methods

Most people, in most skills, never get beyond Advanced Beginner. This certainly seems to be true for would-be agile practitioners. At the Advanced Beginner stage, youre comfortable enough to sort of muddle your way through. And for most folks, thats enough. It kind of looks good on the outside, and you can list it on your resume. But thats a hollow victory. You wont reap the benefits that an agile approach can provide. In terms of productivity, you might as well be coding in COBOL with a pencil on a yellow legal pad.

Fortunately, we can do better than that.

There are five levels in the Dreyfus model, but not all of the levels are equal sized or as easily traversed. For instance, its easy to go from Novice to Advanced Beginner, but the jump from Advanced Beginner to Competent is much harder.

What we need to do is to see how, specifically, to make the jump from agile Advanced Beginner to becoming a Competent agile practitioner. If you look at the levels above, one big difference between an Advanced Beginner and a Competent practitioner is the Competents ability to develop and use conceptual models.

So it seems the first thing we need to do is to establish some kind of a mental model about agility.

An Agile Mental Model

Agile is all about taking small bites and focusing on continuous, not episodic, development. You want to do a little of everything all the time, and not face big lumps of major events. Thats the constantpart in this definition:

Agile development uses feedback to make constant adjustments in a highly collaborative environment. (Practices of an Agile Developer by Venkat Subramaniam and Andy Hunt)

The idea of correcting based on continuous feedback is key, but in order to do that successfully youll need to ensure that all the following are true:

1. All of your development and management practices generate continuous, meaningful feedback.

2. You are able to evaluate that feedback appropriately, in context.

3. You are able to change your code, your process, your team, and your interface to the rest of the organization and the customer in order to respond to the feedback.

Thats just the mechanical portion. To be agile, you need to start off with an agile mindset. Look at the agile values from the Manifesto:

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

…and review the definition above. If you can proceed in a fashion that honors these values and adheres to that definition, and youre able to respond as needed, then youre headed in a more-or-less agile direction. Youve got the basic model of agility in your head, and by asking questions and constantly reviewing what youre doing in terms of this model, youll make progress.

Put It In Practice

Thats the theory, anyway. But theory does you no good unless you can put it into your practice. And practice means trying, failing, learning, and trying again.

Embrace the idea that theres no one here to tell you what to do next. It might seem nice to have someone hold your hand at this point, but thats a luxury few can afford. Youre on your own.

Familiar and comfortable ways of doing things may look attractive, but thats a trap. Dont fall for it. Youll need to venture into the unfamiliar and uncomfortable, and lose a lot of mental baggage while youre at it. Think of the XP maxim and ask yourself, what’s the simplest thing that could possibly work? Whats the least you could possibly get away with? That question works for code, process, documentation, training, QA, and more.

Suppose you need to accomplish a particular goal, XYZ. How can you accomplish that in a lightweight, low-ceremony, agile fashion, and still fully accomplish the goal?

For example, take testing (please :-).

Youve started a new agile-based project and have been getting everyone up to speed on this new agile stuff.Now youre tasked with bringing the QA staff into your fledgling environment to do testing. How can you do so in an agile fashion?

Lets clarify what it is theyre doingwhich is always a fine idea when starting out. Were not talking about unit testing. Unit Testing is mis-named; its a coding practice, not a testing practice. Yes, developers need to do it, and no, it doesnt negatively impact your QA staff. So perhaps your development team is doing Test-Driven or Test-First Development. Thats great, they should be writing unit tests on an ongoing basis, keeping it continuous and episodic.

So now you need to bring QA into the fold to do more comprehensive testing, maybe focusing on acceptance testing, performance testing, other non-functional requirements, and so on. Are you going to wait for the end of a major release to give them code to test?

Of course not, thats thinking of the event as a large, discrete episodethat violates the model. You dont want episodic development, you want continuous development. Are you going to wait until the end of an iteration? Perhaps, but thats still waiting and making a bigger event out of the situation than is needed.

Give QA the ability to pick up a testable version right off your continuous build machine. Every build that passes all the automated developer tests is eligible, and QA can grab the latest functioning code base and have a play. They have the opportunity to grab releases every hour, every half-hour, all day long. Or they can wait and grab it once when done (in a non-agile fashion), but the choice is theirs and they can change that choice at will.

Does It Work?

How does this simple example stack up to our mental model?

Youve implemented a policy thats lightweight and easy to maintain. Youre delivering value Continuously, and youre delivering actual Working Software. Like the Hungry Consumer Model (see The Pragmatic Programmer), QA can make their own decisions about when and what to test. You can experiment with feedback to the development team based on both teams needs. So youre honoring Individuals and Interactions over some rigid process. Youre able to Respond to Change easily, without affecting the development rhythm, as the two teams are loosely coupled.

About Andy Hunt

Andy is a Pragmatic Programmer, author of a bunch of books including Pragmatic Thinking & Learning, and dabbles in music and woodworking. Follow him on Mastodon at @PragmaticAndy@mastodon.social, on Twitter at @PragmaticAndy, or at his blog.

What’s a guru meditation? It’s an in-house joke from the early days of the Amiga computer and refers to an error message from the Amiga OS, baffling to ordinary users and meaningful only to the technically adept.

Magazine cover featuring a drink with ice, cucumber slices, a straw, lemon slice, and mint
Cover of PragPub magazine, June 2011

--

--

PragPub
The Pragmatic Programmers

The Pragmatic Programmers bring you archives from PragPub, a magazine on web and mobile development (by editor Michael Swaine, of Dr. Dobb’s Journal fame).