|
A search on Google for Agile Development returns about 4,940,000 hits. Everything is Agile now. Businesses, project management styles, databases, legacy system interface development, architecture, enterprise architecture, enterprises, testing, executives, and the list goes on and on and on and on. Yet the same teams that stank at making software before they were agile, still stink at making software. They just stink at it sooner in the process.
The teams of gurus that decided to put the Agile Manifesto in place, can make software just as well with a high ceremony RUP, or even the dreaded waterfall, as they can smashed into a room the size of a closet with whiteboard wallpaper doing it XP style.
XP was one of the silliest movements I have ever seen. Hey, look at us, we can do software blind folded. It's like Tiger Woods taking me on with only a 7 iron. He will still kick my butt. It seemed like a movement to make things challenging for the pros who got bored doing it the easy way.
I am not saying being agile is bad. What is bad is the branding of agile as something that is new or different. Some new techniques that are useful came out of the movement, but it is time for the movement to die. Please die!!!!!!!
Just like you can't take the RUP and make a team of inexperience developers make good software, you can't take that team and expect them to make good software using XP. Odds are that would just confuse everyone to the point that they don't know what is going on in the process as well as with the product they are trying to develop.
So I guess my point is, processes have not changed the end result of what makes good software development happen. They have renamed things, moved them around, removed things, and added things, but in the end it is the team that knows what it is doing that gets the job done. That includes knowing how to elicit requirements, document the requirements in a traceable way, knowing the patterns that are common to the domain issues and are available in the given technology in order to put together a solid architecture, how to do unit testing or TDD the right way, how to have some sense of pride in developing bug free software, they know how to communicate, they look out for the customers best interest even when it will tick the customer off, they also know what the goal of the project is which enables them to set the proper level of ceremony , and most importantly they realize that nothing is invented, it is only discovered, especially on a software project.
Of course the list is even greater than above, but the point is you either know how to do the tasks in the process right, or you don't. Just doing them is not good enough. So this agile attitude of "Since process activities don't work, let's get rid of them" does not do anything for the team that didn't know how to accomplish the tasks right in the first place. It just displaces their lack of skills to different task. I have seen tons overly bloated software out of agile teams because most teams use agile as an excuse to go right to code.
I personally have found the 80/20 split works best for me when I have an experienced team of developers. That is 80% planning, doing an architectural synthesis, and other prep work, and the 20% construction. Most places you find it a 20/80(60+20) split. 20% planning and thinking, 60% coding, and 20% fixing the code because they didn't plan enough. Teams now using agile methodologies wrong are doing 5% planning, 60% coding, and an additional 60% fixing. Making the project end up with 120% coding time.
They also end up with no roadmap to the code. That roadmap being documentation. Of course the teams that don't know what they were doing, ended up with bad roadmaps anyway, so who cares if you don't have one when you are done.
If you have been doing RUP, UP, or even PLE (Product Line Engineering) right, you have always been agile because you have taken the time to create an architecture that allows for it. A lot of the companies I talk to today do not understand that an agile process is only as agile as your architecture allows it to be. So you ask what are these teams doing that don't need to create an official architecture? They are golfing with a 7 iron. They are good enough and have gained enough experience to be able to build an architecture without the entire blue print. That does not work for the average team. They need the blue print.
What you will find is that the average developer can follow a well done blue print, but very few can read minds. And no, talking about it in little groups with your thoughts on an index card and then all running back to the same room where you can't think straight unless your head phones are good enough to drowned out the noise does not add value.
The blue print also adds value the modifiability of the project, meaning it can have a healthy maintenance phase. A project without the proper blue print is a legacy application the day it is delivered. I don't care if you have tests around the whole thing or not.
Processes are tailored for a project. Always being low ceremony does not work. Low ceremony does not have anything to do with being agile. Agile is an enabled state that is only accomplished through experience. It can be learned, but absolutely not by doing less.
Could not agree with you more. Being agile is a state of mind. It is a
state of being ready. To some extent the process can help, it might change
the mind and attitude slightly, but it will not get you more experience.
And without experience, being "agile" is disastrous.
I completely agree with your statement that 'Agile' cannot make a bad team
good by removing process. However, I disagree with your premise that Agile
equates to a lack of process.
Steve:
I must have not communicated properly, or said something wrong, because the
entire point was that Agile does not equate to a lack of process, except in
those shops that take advantage of the Agile branding and use it wrongly to
make it equate to lack of process. Thanks for your comments. There all
good!!!
I think that a methodology must be to a programmer like a low is for a
phisicist: a way of modelling reality. As everyone who ever worked with a
real project nowdays knows, one of the characteristic of developing, is to
have customer requirements changed during the developing cycle. The
waterfall based models simly doesn't take into account changing
requirements, so someone thought something different was needed; something
that was able to consider changing requirements as part of the process.
That's why iterations was conceived in agile metodologies. The other main
point is that integration tests are more important that unit tests, so the
software must be tested end to and from the start of the project, and
(again) that's why iterations are there.
I agree with all of that, and more. At the outset, let me say that I'm
inherently in favour of Agile practices and techniques; I've worked in both
environments, on large projects and small, and I know which types of
project worked for me, and worked in general.
But, I've worked at either end of the spectrum of agile; a great team that
managed to vastly exceed expectations, build great software and allowed me
to learn a lot in the process. But equally I've worked on teams at 'the
other end' who were - not necessarily poor developers - but who were not as
engaged with their project as they might have been.