Monday, July 28, 2014

Nightmare on Agile Street

I’m awake. I’m lying in my bed. I’m sweating but I’m cold.

Its the small hours of the morning and the dream is as vivid as it is horrid....

I’m standing in a clients offices, I’ve been here before, I know whats happening.

They are building an website. Quite a complex one, this will be the primary purchasing venue for many customers. This will project the company image - and with the right bits it can up-sell to customers - it can even help reduce costs by servicing the customers after the sale. All good stuff.

But it is atrociously “behind” schedule, someone said it would be finished in a year, that was three years ago before any code was written. Now its two years to completion but in my dream people say 2+3=2.

How can that be?

I can’t say it but the only way out I can see is cancellation. If I was suddenly in charge of the client I’d cancel the thing. I’d salvage what I could and I’d launch a new, smaller, initiative to replace the website.

But its too big to fail, even the board knows how much money they are spending. Who’s going to walk in there and say: “Scrap it.”

Saying “Scrap it” would be to admit one failure and invite a messenger shooting.

And if I was the head of the supplier I’d say the same thing. I’d say to my customer: “I know I’m earning oodles of cash out of this, I know its a high profile feather in our cap but really its out of control you really shouldn’t continue.”

But of course they won’t.

Forget the money they’d lose, they weren’t hired to answer back - like my tailor friend.

And of course I’m neither of those. I’m just the guy having the nightmare and in the nightmare I’m the consultant who is trying to fix, it. In the nightmare I’m not fixing it I’m providing cover, while I’m there its Agile, while its Agile its good, Agile is a good drug and I’m the pusher.

“You can’t cancel it because all the competitors have one and so we must have one” tells me a ghostly apparition.

“We must be best in class” says another apparition.

“We must be head-and-shoulders above the opposition” says third - aren’t the opposition seven times the size? And don’t the competition buy large parts of their solution off the shelf?

But every time I look the work seems to grow. Every discussion ends in more stories. Not just stories, epics, super-stories, sub-epics, mezzanine-stories.

But its OK, this is Agile.

The business keeps throwing new requests at it which are just accepted - because they are Agile!

Some of these are quite big. But that’s OK because the team are Agile. And Agile means the team do what the business want right?

I watch the Analysts work over the stories in the backlog, as they do each grows and replicates like an alien parasite. The Analysts find more edge cases, extra detail which need to be included, more scenarios which need to be catered for. Each becomes a story itself.

But that’s OK because the team are Agile.

And those damn competitors don’t stop adding and improving their site which mean the client must add that too.

But that’s OK because the team are Agile.

And the points…. points are the new hours, in the dream I have a book “The Mythical Man Point”. The backlog is measured in thousands of points. The burn-down charts go down - but only if you look at the sprint burn-down, hunt around Jira and you can find a project wide burn-down, O my god, no….. its full of stories!

This is not a burn-down chart carrying us to a safe landing, its a fast climbing interceptor…

The backlog is a demon… its… its… undead.

The faces of those who’ve seen the chart are prematurely aged. Open Jira and show someone the chart and…. their hair turns grey, the wrinkles appear, in moments they are….

One man is immune. As the points grow his power grows, he is… he is... The Product Owner.

He introduces himself: “Snape is the name, Severus Snape” - I knew I’d seen him somewhere before.

In the planning meeting, he sees the poker cards pulled out, he focuses on the developer with the highest score, there is a ray of cutting sarcasm… he withers. The developers submit, the numbers are lowered. The Product Owner chuckles to himself - no over estimating on his watch!

One of the developers suggest “Maybe we should wait until we finish the current work”

Snape sneers: “I thought you were Agile boy?”

“If you can’t handle it I have some friends in Transylvanian who are really Agile…. do you want to lose the contract boy? … Off-shore is so so cheap…”

There is a reality distortion field around the Product Owner. Show him a burn-down chart and it looks good, his presentations to the steering committee always show perfect burn-down.

I’m in my pyjamas standing outside the building at night: a sinister looking figure is breaking and entering, he sneaks into the building, he opens Jira and … inserts stories! His mask falls, it is….The Product Owner! Of course, without stories in the backlog he would cease to exist, his power comes from the size of the backlog, more stories more power.

Ever since his boss came down with a rare form of chronic flu a link in the reporting chain has been missing. Made worse when the next man up was dismissed for inappropriate behaviour in the canteen. Since when the Product Owner reports to the COO, a COO who doesn’t really have time for him and only has a shaky understanding of any IT related topic.

I do the maths. The backlog isn’t so much a backlog as a mortgage, and the team are under water! The payments they make against the mortgage aren’t even covering the growth in stories. The backlog growth is an interest rate they can’t pay.

It takes months for stories to progress through the backlog and reach developers. When work finally gets to developers they too uncover more edge cases, more details, more scenarios, more of just about everything. Why didn’t the Analysts find these? Did they find them and then lose them?

Then there is a stream of bugs coming in - oozing through the walls. The technical practices aren’t solid, they are… custard! Bugs get caught but more get through!

Bugs can’t be fixed because: “bugs are OpEx and we are funded from CapEx.”

Someone has slain the Bug Fixing Fairy, her body is found slumped in the corner, a nice your girl straight out of college. They are hiring another fresh young graduate to send to the slaughter, fortunately Bug Fixing Fairies are Plug Compatible with one another.

Release dates can’t be honoured.

Woody Allen and Anne Hall walk in - since when did Woody Allen do horror films?

‘two elderly women are at a Catskill mountain resort, and one of 'em says, "Boy, the food at this place is really terrible." The other one says, "Yeah, I know; and such small portions.”’

I have X-Ray vision: I can see WIP where it lies, there are piles of it on the floor. Its stacked up like beer barrels in a brewery. But the beer isn’t drinkable. Its a fiendish plan. If anyone drinks that beer, if the WIP is shipped, they will discover…. its full of holes! Quality control is… offshore.

Why is there so much WIP lying around? Why is the WIP rising?

Because they are Agile comes the reply… the business can change their mind at anytime, and they do.

I’m drowning in WIP.

WHIP to the left of me, WHIP to the right of me.

The developers are half way through a piece of work and the team are told to put it to one side and do something else. Nothing gets delivered, everything is half baked. WHIP - work hopefully in process that is.

When, and IF, the team return to a piece of WHIP things have changed, the team members might have changed, so picking it up isn’t easy.

WHIP goes off, the stench of slowly rotting software.

But that’s OK because the team are Agile.

Arhhh, the developers are clones, they are plug compatible, you can switch them into and out as you like… but they have no memory….

It gets worse, the client has cunningly outsourced their network ops to another supplier, and their support desk to another one, and the data-centre to the another… no one contractor has more than one contract. Its a perverse form of WIP limit, no supplier is allowed more than one contract.

O my god, I’m flying through the data centre, the data centre supplier has lost control, the are creepers everywhere, each server is patched in a different way, there is a stack of change configuration requests in a dark office, I approach the clerk, its its…. Terry Gilliam, the data centre is in Brazil….

Even when the business doesn’t change its mind the development team get stuck. They have dependencies on other teams and on other some other sub-contractor. So work gets put to one side again, more WIP.

All roads lead to Dounreay in Scotland, a really good place if you want to build something really dangerous, but why does this project require a fast breeder nuclear reactor?

But that’s OK because the team are Agile.

The supplier is desperate to keep their people busy, if The Product Owner sees a programmer who’s fingers are not moving on the keyboard he turns them to stone. The team manager is desperate to save his people, he rummages in the backlog and finds… a piece of work they can do.

(With a backlog that large you can always find something even if the business value is negative - and there are plenty of them.)

You can’t blame the development team, they need to look busy, they need to justify themselves so they work on what they can.

But that’s OK because the team are Agile.

Get me out of here!!!!!

I’m in my kitchen.

My hands are wrapped around a hot-chocolate, I need a fresh pair of dry pyjamas but that can wait while I calm down. I’ve wrapped a blanket around me and have the shivers under control.

Are they Agile? Undoubtedly it was sold as Agile. It certainty ain’t pretty but it is called Agile.

They have iterations. They have planing meeting. They have burn-downs. They have a Scrum Master and they have Jira. They have User Stories. They have some, slow, automated acceptance tests, some developers are even writing automated unit tests. How could it have gone so wrong?

Sure the development team could be better. You could boost the supply curve.

But that would be like administering morphine. The pain would be relieved for a while but the fever would return and it would be worse. The real problem is elsewhere. The real problem is rampant demand. The real problem is poor client management. The real problem is a client who isn’t looking at the feedback.

The real problems are multiple, thats what is so scary about the dream. They are all interconnected.

In the wee-small hours I see no way of winning, its a quagmire: To save this project we need to destroy this project. But we all know what happened in Vietnam.

What is to be done? - I can’t go back to sleep until I have an answer.

Would the team be better off doing Waterfall?

The business would still change its mind, project management would put a change request process in place and the propagation delay would be worse. There would probably be more bugs - testing would be postponed. Releases would be held back. This would look better for a few months until they came to actually test and release.

If they did waterfall, if they did a big requirements exercise, a big specification, a big design, a big estimation and a big plan they might not choose to do it. But frankly Agile is telling them clearly this will never be done. In fact its telling them with a lot more certainty because they are several years in and have several years of data to look at.

Agile is the cover. Because they are Agile they are getting more rope to hang themselves with.

But all this is a dream, a horrid dream, none of this ever happened.

Saturday, July 12, 2014

What we forget about the Scientific Method

I get fed up hearing other Agile evangelists champion The Scientific Method, I don’t disagree with them, I use it myself but I think they are sometimes guilty of overlooking how the scientific method is actually practiced by scientists and researchers. Too often the scientific approach is made to sound simple, it isn’t.

First lets define the scientific method. Perhaps rather than call it “scientific method” it is better called “experimentation.” What the Agile Evangelists of my experience are often advocating is running an experiment - perhaps several experiments in parallel but more likely in sequence. The steps are something like this:

  1. Propose a hypothesis, e.g. undertaking monthly software releases instead of bi-monthly will result in a lower percentage of release problems
  2. Examine the current position: e.g. find the current figures for release frequency and problems, record these
  3. Decide how long you want to run the experiment for, e.g. 6 months
  4. Introduce the change and reserve any judgement until the end of the experiment period
  5. Examine the results: recalculate the figures and compare these with the original figures
  6. Draw a conclusion based on observation and data

I agree with all of this, I think its great, but…

Lets leave aside problems of measurement, problems of formulating the hypothesis, problems of making changes and propagation problems (i.e. the time it takes for changes to work though the system). These are not minor problems and they do make me wonder about applying the scientific method in the messy world of software and business but lets leave them to one side for the moment.

Lets also leave aside the so-called Hawthorne Effect - the tendency for people to change and improve their behaviour because know they are in an experiment. Although the original Hawthorne experiments were shown to be flawed some time ago the effect might still be real. And the flaws found in the Hawthorne experiments should remind us that there may be other factors at work which we have not considered.

Even with all these caveats I’m still prepared to accept an experimental approach to work has value. Sometimes the only way to know whether A or B is the best answer is to actually do A and do B and compare the results.

But, this is where my objections start…. There are two important elements missing from the way Agile Evangelists talk about the scientific method. When real scientists - and I include social-scientists here - do an experiment there is more to the scientific method than the experiment and so there should be in work too.

#1: Literature review - standing on the shoulders of others

Before any experiment is planned scientists start by reviewing what has gone before. They go to the library, sometimes books but journals are probably more up to date and often benefit from stricter peer review. They read what others have found, they read what others have done before, the experiments and theories devised to explain the results.

True your business, your environment, your team are all unique and what other teams find might not apply to you. And true you might be able to find flaws in their research and their experiments. But that does not mean you should automatically discount what has gone before.

If other teams have found consistent results with an approach then it is possible yours will too. The more examples of something working the more likely it will work for you. Why run an experiment if others have already found the result?

Now I’m happy to agree that the state of research on software development is pitiful. Many of those who should be helping the industry here, “Computer Science” and “Software Engineering” departments in Universities don’t produce what the industry needs. (Ian Sommerville’s recent critique on this subject is well worth reading “The (ir)relevance of academic software engineering research”). But there is research out there. Some from University departments and some from industry.

Plus there is a lot of research that is relevant but is outside the computing and software departments. For example I have dug up a lot of relevant research in business literature, and specifically on time estimation in psychology journals (see my Notes on Estimation and Retrospective Estimation and More notes on Estimation Research.)

As people used to dealing with binary software people might demand a simple “Yes this works” or “No it doesn’t” and those suffering from physics envy may demand rigorous experimental research but little of the research of this type exists in software engineering. Much of software engineering is closer to psychology, you can’t conduct the experiments that would give these answers. You have to use statistics and other techniques and look at probabilities. (Notice I’ve separated computer science from software engineering here. Much of computer science theory (e.g. sort algorithm efficiency, P and NP problems, etc.) can stand up with physics theory but does not address many of the problems practicing software engineers face.)

#2: Clean up the lab

I’m sure most of my readers did some science at school. Think back to those experiments, particularly the chemistry experiments. Part of the preparation was to check the equipment, clean any that might be contaminated with the remains of the last experiment, ensure the workspace was clear and so on.

I’m one of those people who doesn’t (usually) start cooking until they have tidies the kitchen. I need space to chop vegetables, I need to be able to see what I’m doing and I don’t want messy plates getting in the way. There is a word for this: Mise en place, its a French expression which according to Wikipedia means:

“is a French phrase which means "putting in place", as in set up. It is used in professional kitchens to refer to organizing and arranging the ingredients (e.g., cuts of meat, relishes, sauces, par-cooked items, spices, freshly chopped vegetables, and other components) that a cook will require for the menu items that are expected to be prepared during a shift.”

(Many thanks to Ed Sykes for telling me a great term.)

And when you are done with the chemistry experiment, or cooking, you need to tidy up. Experiments need to include set-up and clean-up time. If you leave the lab a mess after every experiment you will make it more difficult for yourself and others next time.

I see the same thing when I visit software companies. There is no point in doing experiments if the work environment is a mess - both physically and metaphorically. And if people leave a mess around when they have finished their work then things will only get harder over time. There are many experiments you simply can’t run until you have done the correct preparation.

An awful lot of the initial advice I give to companies is simply about cleaning up the work environment and getting them into a state where they can do experiments. Much of that is informed by reference to past literature and experiments. For example:

  • Putting effective source code control and build systems in place
  • Operating in two week iterations: planning out two weeks of work, reviewing what was done and repeating
  • Putting up a team board and using it as a shared to-do list
  • Creating basic measurement tools, whether they be burn-down charts, cumulative flow diagrams or even more basic measurements

You get the idea?

Simply tidying up the work environment and putting a basic process in place, one based on past experience, one which better matches the way work actually happens can alone bring a lot of benefit to organizations. Some organizations don’t need to get into experiments, they just need to tidy up.

And, perhaps unfortunately, that is where is stops for some teams. Simply doing the basics better, simply tidying up, removes a lot of the problems they had. It might be a shame that these teams don’t go further, try more but that might be good enough for them.

Imagine a restaurant that is just breaking even, the food is poor, customers sometimes refuse to pay, the service shoddy so tips are small, staff don’t stay long which makes the whole problem worse, a vicious circle develops. In an effort to cut costs managers keep staffing low so food arrives late and cold.

Finally one of the customers is poisoned and the local health inspector comes in. The restaurant has to do something. They were staggering on with the old ways until now but a crisis means something must be done.

They clean the kitchen, they buy some new equipment, they let the chef buy the ingredients he wants rather than the cheapest, they rewrite the menu to simplify their offering. They don’t have to do much and suddenly the customers are happier: the food is warmer and better, the staff are happier, a virtuous circle replaces a vicious circle.

How far the restaurant owners want to push this is up to them. If they want a Michelin star they will go a long way, but if this is the local greasy spoon cafe what is the point? - It is their decision.

They don’t need experiments, they only need the opening of the scientific method, the bit that is too often overlooked. Some might call it “Brilliant Basics” but you don’t need to be brilliant, just “Good Basics.” (Remember my In Search of Mediocracy post?).

I think the scientific method is sometimes, rightly or wrongly, used as a backdoor in an attempt to introduce change. To lower resistance and get individuals and teams to try something new: “Lets try X for a month and then decide if it works.” Thats can be a legitimate approach. But dressing it up in the language of science feels dishonest.

Lets have less talk about “The Scientific Method” and more talk about “Tidying up the Kitchen” - or is it better in French? Mise en place…. come to think of it, don’t the Lean community have Japanese word for this? Pika pika.

Thursday, July 03, 2014

A footnote of a book: Agile Reader, 3rd edition

AgileReader3-2014-07-3-17-59.jpg

If you have had the pleasure to see me present in recent months - either in public or on a training course - you might have noticed that I have taken to describing myself as “a writer who pays the bills by consulting and providing training.”

Partly thats because I always seem to come back to writing, I seem to have this insatiable need to express myself and explain my thoughts. Hence two traditional, old fashioned books Changing Software Development and Business Patterns. When I say traditional I mean full on professional publishers (Wiley): an editor, proper copy editing, professional layout, print runs that run to thousands and so on. A book by anyone’s standard.

And more recently Xanpan: Team Centric Software Development. A book, two hundred pages of words, even printed on dead trees but really an e-book at heart. But no formal publisher; yes it has been professionally copy edited but layout, you don’t get many layout options in LeanPub. The print on demand version even has some really good reviews online (see Xanpan at Lulu).

I’m very happy with Xanpan’s success, and I have ideas for two more volumes. Although, as I keep pointing out: writing doesn’t pay the mortgage so I should do something more commercial with my time!

However, there is another book. A book I shy away from calling “a book” - I usually call it a mini-book. Perhaps pamphlet would be a better old-fashioned term. Surprisingly the sales on this lessor known book probably exceed any of the other three. (Actually I’m still trying to work out what a book actually is, these four books demonstrate the dilemma very well.)

And I’ve just released a third edition. This time I’ve moved it all over to the LeanPub system so you can buy a cheap e-book Agile Reader for you Kindle (or whatever) but I’m also making Agile Reader available via Lulu print on demand as a printed book. (As with the printed Xanpan, all printed books include a token to obtain a free e-book version by the way)

I don’t make a big fuss about Agile Reader because historically little in it is original, its just pulls existing material together. But much to my amazement two people have already bought the third edition it from LeanPub - before I’ve even told anyone it exists!

Agile Reader is a collection of writing I give attendees on my training courses as further reading. I don’t believe slides make for interesting reading so I provide a book. I believe my Agile course should be about giving people Agile experience in the classroom so they can just do it. Agile Reader exists to fill in everything else.

The funny thing is, because everyone on my courses for the last 3 years have received a free copy Agile Reader 2012 (the second edition) it is one of the top selling (top 100) books on Lulu globally! But I felt it needed a refresh….

Originally Agile Reader was articles I had published elsewhere. In the second edition, Agile Reader 2012, there was some new material and a contribution from Kevlin Henney. The third edition, Agile Reader (3rd edition), retains Kevlin’s contribution and has more original material. In addition a lot of the other material has been refreshed to bring it up to date.

In fact, Agile Reader 3 contains so much revised material on requirements that I think its almost a Xanpan volume 3 prototype. But now I’ve refreshed Agile Reader I really want to write Xanpan volume 2, I’m just bursting with things I want to say so volume 3 will have to wait!

Just a foot note really.