Software development is not like manufacturing.
In manufacturing, you build to the same specifications over and over again.
In software development, you create a new thing each time, and the specifications typically change along the way.
In manufacturing, 100 factories can generally produce 100 times as many things as 1 factory. Adding a new factory means that more things will be produced.
20 programmers are far less productive than 5. Adding another programmer often means that the project will be delayed even further.
In manufacturing, you can gradually tune your methods based on past experience, and become more efficient over time.
In software development, past problems generally have little if anything to do with future problems. The best you can hope for is to find and learn very broad abstract efficiency boosters like “best practices.”
Manufacturing and software development are similar in what I think of as the “expert effect.” Generally speaking, for a given task and a given group of people, one of them will be best at that task. If that expert is given control of that task, then they will tend to do it well; if they are forced to take input from everyone else in the group who isn’t as good as them, then the task will tend to suffer, if only from the time required to evaluate the input and decide not to use it. Management is one such task, perhaps the most important one.
Most people I know seem to accept these premises. That is, unless you’re an Agile Scrum zealot. Then you may think that:
- Specifications change, but that’s OK, because it’s “iterative design”.
- You can predict how long something will take, and your predictions will get better over time.
- Tasks can be broken down based on the time required, and can be assigned to any “qualified” person.
- Programming experts will be happier if they do project management, and are qualified to do so.
This is all 100% bullshit. In the real world:
- Specifications change because it’s virtually impossible to design something that’s never been done if you can’t see it as you go along. The specs stop changing when the team puts their collective foot down to management and the customer, and that’s when “research” stops and “development” begins. The time at which this occurs is flexible, but if you’re targeting a fixed release date, it’d better be soon! If you don’t build in enough time for research, then the product will not be satisfactory.
- Your estimates suck. And they’ll keep sucking, no matter what you do. You’re probably around 10-15% accurate, and if you work your ass off, you can get up to a 20-25% accuracy rate. Estimates that aren’t even remotely accurate are a waste of everyone’s time.
- I’m not the only one, I’m sure, who finds that at least 60% of my planned tasks for any given sprint don’t get accomplished, either because a) they depend on something else that wasn’t evident at the planning meeting, b) they just weren’t as high priority as something that came up since the planning meeting, or c) my time estimates suck, and so I budgeted way less time than required for a few of my tasks.
- No one likes project planning meetings. But, since project managers typically aren’t programmers dealing with the software each day, they need our input. If you’re a product manager, trust me, your team will absolutely love you if you can get these chores down a half hour or less. Streamline every part of the meeting that requires their attention. Focus their time on what you actually need them to weigh in on. Have estimates prepared, and ask them to critique them. Wrapping it in silly games won’t help—that just makes it take longer. Programmers hate project management. So make them do as little of it as possible. Trust me, if they wanted to be project managers, they wouldn’t have degrees in computer science. Let them get back to work. There’s no worse blocker than having to stop coding for a meeting. Like torture or invasive surgery, it’d better be necessary, otherwise it’s all kinds of wrong. (The “5 levels of estimates” is the Dread Cthulhu of time-wasters.)
- Prototypes don’t pay the bills. If you create a bunch of dummy-functional UI screens, you haven’t created software, you’ve created a demo. A prototype is an important first step, a valuable communication tool. But you can’t sell a demo, which means you can’t create demos forever. Once the “research” phase is over, demos are a liability, because they tend to obscure missing functionality.
There are a few things that scrum gets right:
- When it comes to estimating, often the crowd is smarter than the individual. “Planning poker,” though overly goofy and time-consuming, does a pretty good job. But it takes forever, and while I’m waiting to show my card, I’m only thinking,
I’d really rather be coding right now.
I’m not a project manager (that’s part of the problem with Agile Scrum) but I know there simply must be a better way. - A daily meeting is crucial if there’s more than one person on the team. It’s still best if everyone can physically see the people that they’re working with from where they sit, but that’s not always possible. Even in that case, forcing everyone to stand up for a few minutes each morning and tell everyone what they’re up to is a good way to make sure that the team doesn’t get sidetracked or splintered. It keeps programmers from “going dark” and coming back a week later with something that doesn’t mesh with the rest of the product.
It seems that some Scrum Masters are die-hard zealots, and others follow a more “pick and choose” approach. The Agile methodology explicitly encourages project managers to use what works, and customize the process to meet their needs.
In other words, Agile Scrum makes a lot of ridiculous assumptions, and suggests a set of practices—some harmless, some obvious, some useful, and others specifically counter-productive—and then says, customize to your team/product/environment.
If your project fails or misses a deadline, well, you didn’t do it right, or the team wasn’t committed, or the management was unreasonable. Anything at all to avoid placing blame on the methodology.
Anyone else see the similarities to a faith healer?
Ultimately, a successful project that uses Agile Scrum is successful for the same reason that any other project is successful:
- The management managed, and got out of the workers’ way.
- The workers were capable of doing what they were called on to do, and happy doing it.
- The product vision was something the customer wanted
- No one went dark. (That goes for upper management, as well!)
On my current team at Yahoo!, we use Agile Scrum, at least in name. Ostensibly, Yahoo! officially endorses the use of Agile Scrum. In my experience, successful use of agile amounts to this:
- Every week or two, the team gets together for an hour to talk about where the project is at.
- Every day, the team spends 15 minutes in the morning with each person telling what they’re up to.
- Throughout the day, everyone is in constant communication via IM, email, and in person.
- Put your tasks in Bugzilla, and mark them done when they’re done.
- Most important: Management’s vision of the product is something that the team is happy building, and the team is selected for their expertise in the kinds of problems that the product raises.
No one likes to create crap. No one likes to be surprised with new requirements in the 11th hour. No one likes to be held responsible for something they’re no good at.
Everyone loves to be a part of a quality product. Everyone likes to have visibility into their own future. Everyone likes to be praised and respected for doing what they love.
By taking credit for the success of projects that use it, Agile Scrum glosses over these fundamental principles and tries to turn the team into a bunch of part-time project managers. Anything that deviates from the plan is derided as “cowboy coding” or “waterfall process.” Granted, these two paradigms do tend to standardize bad practices, and they do little to encourage communication, but they also admit important aspects of the software development world:
- Actual coding, typing characters into an editor, is best done alone without distractions. You think with your own brain only. All coding is, at some level, “cowboy coding.”
- If piece A depends on piece B, then it makes no sense to start working on A until B is done. It makes even less sense to QA a half-working early pre-alpha dev version of the product, or worse yet, file bugs against it. Of course it’s broken. Don’t distract your developers telling them what they already know.
Chances are wildly against getting any software product out on time or under budget. My heart goes out to project managers and executives who are tasked with controlling the chaos. I understand why many of them might grasp at ideologies that promise to solve the problems, but Scrum rarely helps the odds.
If you’re doing software development right, you’re probably doing Agile wrong.
14 Comments
I do agree with some of your points and I’ve come through the same problems as a project manager. I guess the right decision is to combine scrum and some of the traditional methods to manage your projects. My team and I practice Scrum in Wrike. It’s a great project management app. You might be interested to read this post http://www.wrike…ftware_development_more_agile
Thanks for the feedback, Erwin.
I suppose the best approach is to have “as little process as possible, and no less.” Until we can all just hook up our brains and share knowledge automatically with each other and our stake holders, teams will have to spend some time talking and estimating, and sometimes it will feel like it’s being wasted. Such is life.
Scrum is good in that it places a high value on visibility and communication. Unfortunately, methodologies are memes, and as such, they sometimes fight to stay alive and prosper. The perfect project management disappears in a sort of wu wei, but the minute a project manager starts drinking the kool-aid and gets excited about Scrum, the weightlessness disappears and the meetings increase. When the project starts slowing down, it’s because the team isn’t “scrumming hard enough,” so even more salt gets thrown in the gears, which is exactly wrong. It’s very much like a new programmer who learns that OOP is the way the truth and the light, and so starts implementing Iterator Factories and Collection Managers when all he really needs is a while loop and an array. (bt, dt.)
Project management is hard, risky, and often thankless, and I have a tremendous amount of respect for those that have a knack for it. But I got no love for the hucksters sellin’ ‘em snake oil.
Isaac,
I wholeheartedly agree that whatever methodology you use - you have to be pragmatic.
I found that basing the development on SCRUM and adjusting from there takes less changes than starting with something else and tweaking it..
One thing regarding estimation though - the accuracy of the estimation gets worse exponentially in relation to the size of the estimation. As long as you try to get to “things” whose estimates are half a day/ day you have better chance for accuracy - naturally this is easier said than done
Arnon
Although you’re right in many points I think you’re a bit biased when talking about project management. First when a project is managed well (which isn’t so often situation as we’d like to admit) project manager is more a friend of a developer than an enemy. Of course it’s harsh friendship but still. Second I know quite a bunch of people who actually have degree in computer science and went to project management or similar role (after being active developers for some years). It isn’t so uncommon and in my opinion experience in development makes them better project managers.
Anyway, forcing developers to be part-time PMs is generally wrong as you need a set of skills (leaving approach aside) to deal with the role well. Quite different set of skills than those you need to be a good developer.
Thanks for the comments, guys. It seems that Agile is a popular topic.
@Amon
My point is not just that Scrum sucks, but rather, like democracy and surgery, it tends to suck a bit less than the alternatives. The bad thing about Scrum is the fact that it has grown into an ideology that many attempt to follow without fully understanding. That’s often a recipe for disaster. The bigger the market for seminars and books, the higher the likelihood of zealotry taking over.
The site that pinged this post has a great tagline:
Of course. It’s easier (that is, not impossible) to accurately guess how many steps to walk from my desk to the bathroom than to guess how many steps it is to walk from San Jose to Los Angeles. Getting to estimable “things” is a very involved task that often requires a lot of investigation and development. It’s usually not possible at the start of the project.
So here’s my question: If we’re not yet at the point where we have any visibility into how long various things will take, why estimate them? I’ve literally been in quarterly planning meetings where we’re asked to estimate a project that had no spec, no target feature set, required half a dozen things that didn’t yet exist, and wasn’t scheduled to start for two months. Every second spent on that activity cost the company money with absolutely no benefit. In the end, we just threw out bogus numbers so that we could go back to work.
Don’t make your developers jump through unnecessary hoops. If you have them in a meeting, it’d better be because you really need them to be there. Bloated process is as bad as bloated code.
@Pawel
Read my response to Erwin. I’ve had a great relationship with every project manager I’ve worked with, largely because we’re all professionals and generally really want to be here. The Scrum Master on my current team is indeed a veteran engineer, and my direct manager. If the PM and the developers feel like enemies, then there’s a very deep problem with the team dynamic, and I’d advise getting off that sinking ship.
However, for every programmer who moves into project management, there are lots who don’t, and lots of PMs with degrees in Business Management or Communication. Most developers don’t like that kind of work, and don’t have those skills. I firmly believe that getting better at those skills will, in the long run, make you a better developer; but the time is usually better spent coding or practicing.
@ Issac (Re: estimation)
I don’t remember if it is part of scrum or something I picked up from Mike Cohn books but basically what we do is not to try to estimate how long a task will take rather we try to estimate relative size - i.e. if this task is a three is that task much bigger (7) huge (20) or smaller (2 or 1). At the end of a sprint we can see how many points we’ve made. We try to break tasks larger than 3 to tasks which will be 3 or less.
Moving to the next sprint we commit to *about* the same number of points
Does that mean we are never wrong? no - but on the average it is more predictable
Arnon
@Amon
This is similar to the small-medium-large-xlarge sizing scheme, or the fibonacci numbers, or Planning Poker. The point is, if it’s larger than a 3/small, it’s probably not really worth estimating, or at least, not worth spending a bunch of developer time on.
As the reliability of an estimate approaches zero, so does the value of spending time on it.
I’ll repeat the same thing that my high school Physics teacher used to say: Without units, numbers aren’t measurements.
Points are 100% subjective, but they can work when the same group of people come up with the points each time. Every attempt should be made to avoid debating over the values—it’s not science, it’s guesswork. Do it fast, do it rough, and get out of there as soon as possible.
Great article, however it contains so many subjective statements that I cannot relate to. If the current application you are using doesn’t work out seamlessly for your project, you can opt for alternatives. Personally, I use CommuniClique web-based application to help coordinate all my tedious tasks. There are many softwares on the web which are suppose to make your life easier, I say its time to make the change.
Best Regards,
Benny Tam
Thanks for the comment, Benny.
You’re right, it’s rather subjective. But, in my defense, the title of the article is “Agile scrum sucks,” not “Practical problems with Agile Scrum methodology: A constructive analysis,” so you should be expecting a fair amount of subjective opinion
Honestly, I just think that project management is a somewhat difficult and unpleasant process, but one which is better done than not. Agile Scrum, as a general ideology, is probably better than most other approaches (hence, “but so do the alternatives”), and perhaps it is simply the best solution to a sticky problem. Of course, wise application of “as little process as possible, and no less” is always the best approach.
I’m certainly *not* convinced that Agile methods get working products out faster. In fact, I think they generally take longer to get a finished product out the door, due to the overhead of estimation and prototyping. But, done right, they certainly can aid in visibility and quality, which are extremely difficult problems in software development, since you can’t easily show off the guts of the thing you’re building. The danger is a lot of time wasted in meetings, which hurts morale, combined with a frantic “push for this sprint” mentality that leads to a lot of quickly-produced demoware. (I’ve seen both of these things happen, and it’s not pretty.)
My $0.02: Read the agile books, and learn from them. Just don’t be too eager to drink the kool-aide. Software development is tricky, and in many ways, irreducibly complex. You need your developers’ input, but you also need to minimize the time that they spend in meetings, because that’s time that they could be writing code. There’s no magic bullet, no matter what some Agilistas may say.
I don’t think any of the leaders in the Agile community have ever suggested Agile is a magic bullet.
i too found it hard to relate to your writing about project managment. As you say, it’s subjective. I also find that your relations of degrees to the positions is exagerrated, at least in my experience, many years in the Java-based dev environment, degrees mean pretty much squat.
Wow, I’m really considering closing comments on this post…
Sorry if the reference to the famous Brooks article was a bit obscure. (It would have helped if I’d used the correct title: it’s a silver bullet, not necessarily magical.)
I’ve been told by an Agile consultant that Agile methodologies “regularly result in an order-of-magnitude improvement in performance.” It’s not hard to find others saying this. The definition of “silver/magic bullet”, in my mind, is an order-of-magnitude increase in productivity. Agile is neither a magic nor silver bullet. The “order of magnitude” claim is 100% weapons-grade balonium, designed to sell books and put asses in seats at lectures and conferences.
Way to pick up a non sequitur and turn it into a straw-man. I’ve said before on this blog that degrees don’t matter as much as merit when it comes to programming. I presume that you’re referring to this line:
I’m not saying that all programmers need to have degrees in computer science. For example, I don’t technically have a degree in anything, and it’s never been a problem. Quality output is the best credential in software, and the only one that matters. (I’ve met some real bone-heads with advanced CS degrees and no understanding of the art and science of software development.)
However, I’m sure that you’ll agree that you’ll find a higher proportion of CS grads in engineering than you will in project management. The point is, most programmers didn’t become programmers because they like meetings and timeline estimation. In fact, most programmers despise these activities as boring busy-work. They’d rather be coding. They are more useful when they’re coding. So let them get to work.
Yes, That’s right. Nice point of view. I would rather say that software development is like an art!
It is interesting to see the the full time Agile Scrum PR consultants working over this blogg. I know them only to well
I am not sure a pro 9 /11 blog would equal the level of blog commenting /vitriol featured on this blog. Keep the commonsense rolling on this Agile /Scrum rubbish. My issue with all this is not the fact that these PR consultants are earning fees or Agile signatories milk this crazy /sect for all it worth (I am consultant myself and we all want a new cardon’t we) its just the fact that this is a diversionary subject. We have 70 to 90 percent project failure rates thorughout the world which waste billions of dollars each year. Agile and Scrum is not the answer to this problem and is a small scale /small town attempt to make projects successful. The terrible truth is that we need to take lessons from the construction and engineering industry which has failure rates of 10% or less. Its not rocket science and certainly does not need a bunch of fee earning revolutionaires reinventing the wheel. Better stakeholder managment /project managment and structured planning and risk management might by part of the answer. Just ask a construction project manager. Please read my blogg http://www.claretyconsulting.com
@Kevin Brady
You’re certainly right about one thing: there are plenty of strong feelings about methodologies.
I’m not sure that programming will ever have the kind of failure rates that you see in construction. After all, construction failures are minimized by building the same thing over and over again, and honing the process over time. In software, you (ideally) never create the same code twice. The second time, it is abstracted out, and you never have to write it again. As a result, we get much greater reusability gains than construction, but we also don’t get any of the reliability that comes along with repetition.
In the end, getting good coders in an environment where they can communicate and think clearly is FAR more important than any methodology. For all the hype, no methodology has ever accounted for more than a 5-35% gain in productivity, and that eventual gain is only *after* a temporary 10-50% *decrease* in productivity while everyone’s getting used to the new process. That’s still usually worth it, long term. However, “order of magnitude” increases in productivity (that is, by a factor of 10, or 1000%) are simply fantasy.
When agile fails to deliver magnificent gains, it’s common to blame the people, not the process. That is actually reasonable. For *any* change in productivity, positive or negative, the people doing the work are the single most significant factor. Successful management in software is 90% picking a good team, and 10% removing obstacles.
I will say, though, posts about Agile Scrum generate the most traffic and the most interesting comments. I should write about it more often!
One Trackback
[...] Agile Scrum Sucks (but so do the alternatives) [...]