Home
Up
Services
Training
Articles
About Us
Contact Us

Tales of Fragility

Some business organizations are bravely retro about their software goals. Their fear of change is a greater motivator than their mixed history of success in delivering working software. In these organizations (and they come in all sizes) the technical management is quite often represented by managers who were COBOL or RPG programmers 20 years ago, moved into middle-management at the advent of client/server technology in the 1980s, and have no development experience in today’s distributed, event-driven systems. They think in out-dated terms and honestly believe that “programming is programming.”

Another group of companies comprises those that say they want to change (because of their checkered history), embrace the latest buzzwords and continue to do the same things they have done in the past. They sound committed to change, but the reality is quite the opposite.

BRUF―Big Requirements Up Front

On one large project I heard a manager say, “we’re going to iterate after we get all the requirements”.  He was dead serious: they had engaged 9 analysts for 6 months developing what they felt were requirements. This quote quickly became a slogan of gallows humor among the developers, but it was indicative of a major fragility on this project.

This was a project fraught with uncertainty. The hardware was new, there was huge uncertainty about the features needed, and the development team had only passing familiarity with the new software technology chosen for the system. The iterative, incremental approach is made-to-order for this type of project so you can get early and continuous validation that you are on the right path. But the waterfall approach that this company was actually following is best on projects with known requirements, and with little uncertainty.

And to my utter amazement, the developers on this project were actively prohibited from writing code until the requirements were completed. When that day finally arrived the business manager announced with a flourish of ceremony that the functional group had that day signed-off on their last big deliverable of the project― a total of over 300 pages of big deliverable. But when the developers saw this document the unanimous response was, “But what are the requirements?”  Later I told that manager, “On an iterative project, there is no such thing as a big deliverable.” He didn’t understand.

A justification for iterating is to “eat the elephant one bite at a time” until you can determine just what the elephant really is. (Remember the story about the blind men and the elephant?)  BRUF is justifiable if it is actually possible to capture all requirements up front. But it usually isn’t possible. The requirements on any significant project change over time, as does our understanding of those requirements.

An agile culture will embrace these principles:

  • You always focus on the goal: delivering the proper, executable software.
  • You don’t try to define everything up-front.
  • You admit that it is impossible to define everything up-front.
  • You don’t try to answer everything before beginning.
  • You admit that some answers cannot be found until you make some mistakes.

The last principle that agile cultures adhere to is the most crucial justification for an iterative, agile approach: you move forward so you can quickly discover what you overlooked. It is easy to spend months trying to get every last detail. But it is impossible to find everything you have missed until you move to the next step in the process, and look at your system from a different perspective. The project I have been discussing did not incorporate the humility and tentativeness that is integral to an agile approach.

Dis-Serving Your Customer

The party who buys your product is not the only customer you have. A customer is anyone who accepts a deliverable from another group or person. QA is a customer of development; development is a customer of the requirements team. In any delivery process it is the vendor/supplier who determines cost, and produces and transfers the deliverables; it is the customer who establishes the priority and acceptance criteria for those deliverables.

On a large business project the development group specified that the operational requirements be delivered in use case format. The business analyst group, however, delivered data flow diagrams, internal algorithmic descriptions, and RDBMS table references. This was what they knew how to produce, but it was not what the development team needed, or asked for.

This gross mismatch in expectations was simply a perversion of the supplier/customer relationship. On this project the supplier determined what the development group needed, how much it needed, when it needed it, and the form in which the deliverable (a requirements specification) would be represented.

In an agile culture the customer’s (i.e., development’s) request would have been honored. The customer would have established the format (use cases, please), the priority and time-frame (these 3 use cases in rough form by next week, these next 4 use cases before the next iteration…) and the content (no ER diagrams or technical details, just how the system interacts with its users). The supplier would have been able to offer cost and conflict estimates to development, and they would have agreed to a delivery schedule that allowed both teams to be fully occupied simultaneously. In the project above, the process was emphatically linear, and only the business analysts were doing any work while the developers waited…and waited, eventually receiving a specification that still did not tell them how the system should interact with its users.

Model Hobble

Sometimes values get turned upside down.

It was a mission-critical project for a multi-billion dollar a year company. The development team had never followed an iterative approach, and they were not familiar with UML. Before the use cases were scheduled to arrive, we petitioned management to obtain a large room where we could do the initial modeling sessions on the project. Nothing could be found. We offered options:

  • move the team offsite,
  • rearrange the modular office layout to create a modeling wall,
  • give the team a conference room.

The development manager even volunteered to vacate his private office!  I offered my truck to carry whiteboards from the office supply store.

Silence. Then we slipped our schedule for our first iteration. The next day we received word that we had a room for modeling. The team immediately went to inspect. The room was in a locked and secured area, 3 floors below the development team’s offices, it could comfortably seat only 3 people (it actually was a closet)―and it had no whiteboard.

We never did get a whiteboard. We made do with clingy-sheets on the wall, and getting very cramped together in the room. It was always warm, we fell over each other, and we wasted a lot of time taking down the cling-sheets and stacking them in order so we could transcribe the models on them.

Sometimes values get turned inside out.

What amazed me about this dysfunctional organization was the response we got from the Vice President with direct organizational responsibility for this project. He said he wouldn’t move the office furniture to create a modeling space for our team because “it would look like elitism and other groups don’t have the same space.” Apparently he was not aware his rather plush and well-appointed corner office was shouting “elitism”. But, that’s a whole different story.

Even in hindsight it’s obvious that this organization purposefully chose to hobble this team and not provide the resources the team said they needed to do the job they had been assigned. The managers had clear reasons why they would not provide a suitable room, why they would not buy 4’ x 8’ whiteboards, why they would not deviate from the corporate standard office layout that had been dictated to them by some anonymous bureaucrat who was clueless about what kind of office a software developer needs.

For lack of a $500 whiteboard, and an Allen wrench to take apart the modular office walls and move them 4 feet―and for lack of the proverbial “can-do” attitude, this software project was brought to its knees. And it never recovered.

Actually, what was wrong with this organization is that if forgot what it's goal really was: develop software to support the business goals of the company. Instead, they focused on self-imposed constraints--better known as self-inflicted wounds. By thinking that every developer needed the same office space, that every project has to have only the resources available to every other project group, by trying to enforce some Public Relations image—they actually guaranteed they would not achieve their real goal.

In an agile culture each group, each person is considered individually. If you really need a tool to do your job, justify it and it will be obtained. If a room isn’t suitable, or whiteboards aren’t available, any and every alternative should be considered. On another project where we didn’t have whiteboards, we did our modeling on the floor-to-ceiling windows of the office building. The markers work perfectly, and people would come up to our floor just to see that we really were drawing on the windows!  All we were trying to do was get our job done. And we did.

On yet another project we simply commandeered a large conference room that contained two large white boards. We put a sign on the door reserving the room for the next 10 months. It made waves, but we made our case and it became our war-room for the remainder of that (successful, commercial) project.

Sometimes we actually value what is really important.

 
 

Copyright ©2008 Evanetics, Inc. All Rights Reserved.  www.evanetics.com