the blog for developers

Agile isn’t low quality – a rebuttal to Mike Brunt

Mike Brunt quotes an email on his blog. The mail exposes a very negative view of agile. Although the email is not written by Mike, he is “posting this here because it states my reservations very well”. So address him directly because my experience with Agile over the last years is contrary to his experience.

1. Agile programming emphasizes programming over engineering. This results in software that does not have clean interfaces and is intertwined with other code. Of course, such code is difficult to maintain, debug, and replace. Expensive code bloat is the consequence.

The base fallacy here is that agile equals chaos. When looking at the clean code movement, which has grown out of agile, there is a lot of emphasis on good code. With heavy unit testing and refactoring, especially when you do TDD, code has clean interfaces, is easy to debug, maintain and replace. The code is light and agile

Many of these [bugs] are edge cases and not detectable by testing.

I think edge cases are especially found by testing. Agile emphasizes tight integration with testers and quality assurance. From my experience with agile this leads to more test-aware thinking with developers, leading to less bugs. The usage of static analysis tools like FindBugs or PMD is due to continuous integration and automation more accepted in agile circles which also results in higher quality.

An agile team, like a Scrum development team, has more control and more responsibility. They consider the code “their” code, which is often not the case with non-agile teams who are pushed to deadlines and low qualitiy.

Everywhere where I introduced Scrum or Agile code quality went up, architecture quality went up and bugs went down.

4. Agile programming deemphasizes designing performance into products.

Many agile teams have due to continuous integration and tight integration with QA and operations a clear grasp on performance. They include rigorous performance test into their builds and deployment strategies. Especially with continuous deployment designing and measuring performance is a must.

5. Agile programming never views a program or project as complete. There’s always room to tinker and add new levels of abstraction and modify the mechanics of a program. Expenses around programming become a sucking black hole.

To the contrary: Scrum emphasizes business value delivered, as does XP. No more tinkering, no exploding programming expenses. Some agile shops can clearly state to cost for each story point and calculate detailed ROI.

6. Agile programming is a model that rewards software churn. It’s a great model for building fiefdoms in a corporation and employ busy programmers; it’s terrible for corporations who want to produce maintainable stable quality products that will not incure high overheads.

Not sure if this is ironic and the post a satire. Nothing could be more far away from truth. Agile is about communication and cooperation. Scrum of Scrums coordinate teams to solve problems together for the future.

7. Agile programming deemphasizes quality. Deploying software that works after a fashion “rather than waiting for perfection” introduces a dangerous slippery slope. I doubt that many managers can define “acceptable imperfection.” Quality should be job one. Apple demonstrates that customers will pay a premium for well designed and implemented software.

As stated above, agile emphasizes quality on every level. Only agile teams have consistently a level of done agreement with jobs are only done when they are done done. This often includes acceptance tests, documentation, clean code, unit tests, release notes, refactoring, code reviews (reading from the Level of Done Agreement at the wall here).

8. Agile programming over emphasizes schedules. Production schedules and engineering requirements should be balanced by management.

As it’s true that iteration cycles often coincide with releases to shorten time to market, they are independent. In agile product managers can release each minute, each day, every two weeks or every six months, just as you see fit.

9. When there are many projects to add assorted features to a product, code become difficult to manage. Code merges and inconsistencies become difficult to manage so all the pieces play together. Merging code down can take several days given high rates of code churn. Costs associated with code management are not linear as the number of projects increase. I suspect that the cost function is exponential.

Merging sometimes get difficult. With agile or without agile. Many agile shops migrate to distributed version control systems like Git or Mercurial that aid tremendously with merging. Personally working in enviroment from 5 to 70 developers, I haven’t seen merges that “take several days”. Distributed version control helps with keeping costs down.

10. Agile programming uses customers as the test bed. Customers don’t appreciate being treated as guinea pigs.

Agile programming low bug-count, production ready code to customers. Due to late binding of requirements, active communication with customers and reviews customers get what they need and want. Not something that they assumed they needed some months ago. Due to “done done” customers are not used as “guinea pigs” contrary to traditional development with “alpha”, “beta” and “RC” releases.

11. The agile programming model creates an unstable expensive house of cards. The house of cards will eventually collapse despite efforts to keep it standing.

Hu?

I’ve been dabbling with agile since the beginning of XP and Kents first book. Later I introduced Agile in some companies and processes and became a Scrum Master. Nowhere where I’ve been I’ve seen those issues described. To the contrary, those issues were often rampant before the introduction of agile. This leads me to the conclusion that Mike never experienced agile, either by not doing agile or by falling into the traps of “let’s do agile” management, ScrumBut or Snake Oil selling consultants.

My experience is very positive, as is the experience of all developers I’ve asked and worked with. But perhaps its best to draw your own conclusion by listening to both sides.

You can leave a Reply here. Of course, you should follow me on twitter here.

You can share this post!
Do you want to tell others about this article? Use the social bookmark icons to submit this artice to the service of your choice. Thanks.

About the author: Stephan Schmidt has more than 15 years of internet technology experience and 10 years experience in agile. He was head of development, consultant and CTO and is a speaker, author and blog writer. He specializes in organizing and optimizing software development helping companies by increasing productivity with lean software development and agile methodologies. Want to know more? All views are only his own.

1 Comment 10 Tweets

Leave a reply.

Comments

Kevin

A majority of it depends on the programmers and how closely you follow agile.

For the set of coders we have on our C++ project the agile process brought out the worst in them. They are OK at being told exactly what to do with a well thought out spec from a waterfall approach but have not done well with agile where they need to think of all the edge cases and account for them before they start coding.

Instead people are just coding away and hacking in fixes as QA brings up the issues later.

There is a VERY strong chance we are not using agile correctly. There was no training, just do it. Teams are too big, scope of work too large, terrible management.

No one has the same agile experience. Almost all patterns work very nicely when performed properly. My agile experience has not been pleasant but I don’t think agile is the problem, management and the programmers are.

“There is a VERY strong chance we are not using agile correctly.”

There is a very strong chance you are not doing agile at all I’d say. Dropping all process, hacking along is not agile, it’s an excuse for chaos, poor management and low professional standards.

“Almost all patterns work very nicely when performed properly.”

Yes, if you do agile, agile works. If you do not do agile, it’s obviously not working I assume. This is somehow like eating bananas proclaiming “I don’t like this apple.” :-)

Some Developer

In my observation, a sloppy mindset takes to Agile the way duck takes to water.

Result? Agile == low quality, generally.

By ‘low quality’, I mean, one or more of critical elements of software have been brutally sacrificed in order to define/meet a milestone. These elements could be performance, design, or raw code quality which includes things like (good and helpful comments, sound variable names, sound factoring of methods, classes and interfaces and packages).

Some Developer

In my observation, a sloppy mindset takes to Agile the way a duck takes to water.

Result? Agile == low quality, generally.

By ‘low quality’, I mean, one or more of critical elements of software have been brutally sacrificed in order to define/meet a milestone. These elements could be performance, design, or raw code quality which includes things like (good and helpful comments, sound variable names, sound factoring of methods, classes and interfaces and packages).

Jakob

I just bought an excellent book on agile development and start to understand and value this style of development.

However I have worked in an “agile” shop for the last year and had terrible experiences. All of them are not because of the agile process per se, but because of a wide variety of misunderstandings, lack of skills and misconceptions in the management.

First of all, nobody at that place really understood agile. It was a term that was thrown at the development team without explaining what it meant. SCRUMs where introduced, but the way they were conducted were just useless (it was decided that all dev teams would gather for 15 minutes and ALL the project managers and sometimes account managers had to sit together).

Then lack of skills. This is in my opinion one of the absolute road blockers. Introducing agile with XP e.g. is a death march when developers lack understanding of their tools like subversion. When developers have never written a unit test before and assume it’s QA’s job to find bugs. I could go on with this list for an hour…

And finally, management misconceptions. Management assumed:

agile == tighter deadlines

This is one of the biggest problems we encountered. Management assumed because we were using agile we could just churn out projects in no time. I’ve been on projects where we’ve been given less then two weeks for a complete microsite. And this attitude just kills every opportunity to really introduce and improve agile process.

This is just my story, but I can imagine that many people’s first encounter with agile might look like this. I am reading more about agile and XP now and see how it all falls together, but if an organization just starts to call themselves agile without actually knowing what that is things get very, very painful.

With that said, I’m eager to work in a real agile team because I see value and a lot of potential in the agile approach.

Cheers,
Jakob

Hello Jacob, thanks for your reply and your story.

” When developers have never written a unit test before and assume it’s QA’s job to find bugs. ”

This is a problem, I’ve experienced this too and it needs some work to change the mindset.

” I’ve been on projects where we’ve been given less then two weeks for a complete microsite.”

How could you have given deadlines in Scrum? The team sets the deadlines – otherwise there is no Scrum and agile at all.

But getting agile/Scrum into a managment mindset – let go of deadlines – is hard, and the toughest fight a ScrumMaster needs to fight.

“This is just my story, but I can imagine that many people’s first encounter with agile might look like this.”

I can imagine this too. And I’m sorry for that that people are burnt by something managment calls “agile” or “Scrum” but isn’t Agile or Scrum at all.

Dan P

As another example: I’m in a “let’s do agile!” project at the moment, with senior management instigating it. The result is appalling requirements management and poor code quality.

Should this be used as a criticism of agile? No – the project manager couldn’t tell you which flavour of agile we’re using (seriously), let alone what the project practices are. What we’re actually doing is straight cowboy coding with tight timelines.

It’s very easy to criticise agile on the basis of projects where the the only thing ‘agile’ is the label.

steven

Mike Brunt?
who the heck is Mike Brunt, and who cares what he thinks, really?!

Stan

Wellcome to customers world : agile == low quality

After saying this You argue that I have’n follow the rules. Eat my shorts…

I’ve been on teams practicing agile for 3 years now. During that time the projects I have worked on, without exception, have made customers very happy. Projects have been delivered on time, features have emerged during the development process that have added much value and the number of bugs in production has been low. I believe this is a direct result of the agile practices that have been followed. In particular it is the constant attention to value to customer, bug rate and time to market that produces such good results. With regards to code quality, bug rate and time to market are the only metrics that have any value. If code quality is low this will show up very quickly with a time to market that becomes exponentially slower. Another agile practice that maintains a low time to market is the emphasis on an ubiquitous language shared between the stakeholders and the code. This semantic consistency means that behavioral changes required by the business are easy to accommodate as they fit naturally with the existing code.

I believe the reason that many attempts at agile fail is that it requires what is essentially a new skill, the ability to constantly adapt code to track the changes in the terminology and requirements of the stakeholders. Much of the body of software practice to date has been to protect code against change, for instance the open closed principle. Because agile focuses on change rather than prevention of change many practices that have been previously followed must be evaluated for effectiveness in this new context. It also becomes vital to practice BDD, this has been particularly difficult for new agile teams as there persists much confusion regarding its’ purpose i.e. many people focus on testing code rather than specifying the behavior of code. It will take time for the industry and education institutions to adopt the necessary skills and understanding to effectively practice agile but when they do I’ve no doubt that there will be a far greater number of successful projects and happy customers.

@Olly: Thanks for your long and thoughtful comment. I have mostly the same experience, especially “I believe the reason that many attempts at agile fail is that it requires what is essentially a new skill, the ability to constantly adapt code to track the changes in the terminology and requirements of the stakeholders”

@Stephan thank you for taking the time to address all 11 points in my original posting of an email which is part of a longer thread that can be found here…

http://www.cfwhisperer.com/post.cfm/an-agile-xp-debate-the-whole-story

I did post a link to this article on my blog in the comments.

@Steven, Mike Brunt is a living breathing human being whom many care about; family and friends, just thought I would let you know and bid you a good day.

@Mike: Thanks for the conversation

Cedric

Stephan, you do realize that by repeating over and over that “what you’re doing is not Agile”, you are confirming the point that I made in this blog post:

http://beust.com/weblog/archives/000519.html

which basically states that

1) Agile is a religion that can never be wrong and never be disproven.

2) Agile is too hard to get right (since so many people fail with it), and therefore, close to useless in its current form. Something I call a “brittle technology”

The faster the software development moves away from Agile and focuses on more pragmatic and proven technologies, the better.

Cedric, do you realize that there are apples and oranges? And that you just can’t know the taste of apples by eating oranges? Zen says you need to taste the apple to reason about apples. Then you can proclaim I do not like apples. But people – like kids – look stupid talking about apples when all they ever tried were oranges.

I would love to see data from people where agile fails, to learn and adapt. To gain knowledge. But most of the anti-agile posts and articles I’ve read are devoid of facts.

My replies:

1.) Sure it can. It’s quite easy. First explain what you’re doing. None of those posts explains what they are doing, just that they are “doing agile”. After following agile for over 10 years, I do not know what “doing agile” means. Second in the tradition of the great Hacknot, tell us what you’ve measured and what didn’t work with agile. This could include: Bad code (CC, High coupling, …), miserable developers (do you use statisfaction radiators?), % of missed deadlines, increasing number of bugs. There are many ways to disprove agile. Just not by saying “I do agile and it doesn’t work”.

2.) Agile – especially Scrum – is hard to get right. Especially managment buyin is a tough one and from my experience the number 1 reason for Agile failures. So it is not for everyone, and it is not too easy. From some successful agile introduction I wouldn’t say it is “too hard” though.

I add a 3.) point: The problem with Agile is that many people can easily claim they “are agile” and aren’t. It’s not as easy to claim doing RUP or being CMMi level 5 – because those practices are bound to hard facts.

“The faster the software development moves away from Agile and focuses on more pragmatic and proven technologies, the better.”

There is a lot of (scientific) data about agile. I’d think there is more recent data about agile than any other methodology. I myself have a lot of measurements about agile processes to show that they work (according to my definition of “it works”, better code qualitiy, low bug count, high customer satisfaction, high developer satisfaction, very short time to market but YMMV).

Cedric

Hi Stephan,

I’m not convinced there is that much evidence (hard and empirical) that Agile is actually that successful. Especially if you compare it to Linux (Linux success stories are easy to find).

But let’s try something different.

You say you have a lot of experience with Agile and with successful projects using Agile. That’s great, so how about you give details how you did it?

First of all, it will be a learning experience for a lot of people, and second, I bet that a lot of people will tell you that you didn’t do Agile properly.

Well, actually, they probably won’t since you will be telling a success story, so why don’t you post on the Agile boards with your own story, say that it didn’t work for you and let’s see what the reactions will be.

I’m betting that even you are not doing Agile properly.

I don’t care about doing Agile right or wrong, I care about things that work.

Leave a Reply

What people wrote somewhere else:

New blog post: “Agile isn’t low quality – a rebuttal to Mike Brunt” http://retwt.me/h0Yj

This comment was originally posted on Twitter

RT @codemonkeyism: Agile isn’t low quality – a rebuttal to Mike Brunt http://retwt.me/h0Yj | Agile is especially valuable at startups

This comment was originally posted on Twitter

New blog post: “Agile isn’t low quality – a rebuttal to Mike Brunt” http://retwt.me/h0Yj (via @codemonkeyism)

This comment was originally posted on Twitter

Code Monkeyism: Agile isn’t low quality – a rebuttal to Mike Brunt http://bit.ly/18gcye

This comment was originally posted on Twitter

@dhanji See my reply http://bit.ly/33oOAJ – Obviously doesn’t even know the basics of agile (deemphasizes quality, …)

This comment was originally posted on Twitter

RT @codemonkeyism: @dhanji See my reply http://bit.ly/33oOAJ – Obviously doesn’t even know the basics of agile (deemphasizes quality, …)

This comment was originally posted on Twitter

Agile isn’t low quality – a rebuttal to Mike Brunt http://bit.ly/caUon

This comment was originally posted on Twitter

RT @codemonkeyism Code Monkeyism: Agile isn’t low quality – a rebuttal to Mike Brunt http://retwt.me/h0Yj

This comment was originally posted on Twitter

So lange jedes chaotische Projekt behauptet agil zu sein, braucht es solche Erklärungen: http://bit.ly/33oOAJ von @codemonkeyism

This comment was originally posted on Twitter

In the interests of balanced debate here is a rebuttal of a recent blog piece I did on Agile methodologies http://bit.ly/33oOAJ

This comment was originally posted on Twitter

Additional comments powered by BackType

Guide to CodeMonkeyism

Over the last 4 years I wrote many articles on this blog. To make it easier for you to find the relevant ones, I've organized them into topics.

Top 10

6 reasons why my VC funded startup did fail

Go Ahead: Next Generation Java Programming Style

Java Interview questions: Write a String Reverser

The dark side of NoSQL

7 Bad Signs not to Work for a Software Company or Startup

Is Java dead?

Scala vs. Clojure

Never, never, never use String in Java

No future for functional programming in 2008 – Scala, F# and Nu

Clojure vs Scala, Part 2

Java Developer

Is Java Dead?

Go Ahead: Next Generation Java Programming Style

Be careful with magical code

All variables in Java must be final

Never, never, never use String in Java

Bending Java: More readable code with methods that do nothing?

NoSQL Guy

NoSQL: The Dawn of Polyglot Persistence

The dark side of NoSQL

Essential storage tradeoff: Simple Reads vs. Simple Writes

Sharding destroys the goals of your relational database

The unholy legacy of databases

Startup/CTO

Development Dream Teams

6 reasons why my VC funded startup did fail

American vs. European style of Software Development

12 Things to Reduce Your Lead Time and Time to Market

The high cost of overhead when working in parallel

Essential storage tradeoff: Simple Reads vs. Simple Writes

Job Seeker

Another Good (Java) Interview Question

7 Bad Signs not to Work for a Software Company or Startup

Java Interview questions: Write a String Reverser (and use Recursion!)

Java Interview questions: Multiple Inheritance

As a Manager: What I value in developers

Top 10 Tips (+1) to Get a Pay Raise

Agilist

What Developers Need to Know About Agile

5 Practices Better to Change in Your Scrum Implementation

Scrum is not about engineering practices

ScrumMaster and ZenMaster: The joke of certification

What is Trans-Scrum?