Archive

Software Teams

I’ve been leading a software development project for a little over a month, one of my team members and I have been communicating back and forth steadily.  Via IM or verbally, e-mail or however we need to.  We’re having a good time figuring out things as they come and getting things done in a very Agile way.  To lay it out as the manifesto is written;

We keep ourselves and interactions over process and tools.  We make sure to have working software on almost every single build that could literally be deployed, while forgoing the currently unnecessary documentation.  We collaborate constantly with the customer representative and don’t worry every minute about the contract negotiation.  Response to change is almost instant, as it comes along almost every day.

As we’re hustling along getting a complete vertical implementation of a project together this coworker comes to me and states, “It is great to work on a project with someone that knows what they’re doing, and not sent off in a corner to read documentation books on what was done in the past!”  That statement made me so happy.  This is one of the major reasons I advocate Agile!

Agile helps team members get bought into the project.  The team gets involved in ways that other processes just don’t allow.  The team feels enabled, empowered, or whatever one may call it to actually get the job done!  Being Agile isn’t about process or tasks or work items, being Agile is a mindset, is about being interested and involved in what you’re doing for your project.

After a dirge of conversations and some frustrating efforts recently, this is the type of thing that leaves those negatives in the dust.  This is the type of statement and motivation, when I see it, that makes me love what I do and love to come into the office each day!

So anyway, I had to make this post.  Because today, even though I thought it would be a slightly miserable day.  That one statement redeemed it and my day is now rocking!

Before reading this you should know what the Agile Manifesto is and the Agile Principles are.

I’ve seen it on more than one project in my career and it always seems to happen.  Agile rarely gets credit in this scenario.  People rarely learn what was and was not effective on the project in this scenario.  Those that are Agile Practitioners that know what a truly fast paced, effective, high quality, and successful software project can be know.  What I’d like to know though, especially from those that have successfully dealt with the “Must have big design up front (BDUF) headaches” and transitioned those people to a more Agile style approach.

The scenario generally starts like this…

A project is green-lighted for whatever reason.  Often with some high level manager determining that a project will save or make $X amount of money.  The project is poorly defined or simply not defined at all.  The stakeholders, clients, or others that would prospectively use the software are nowhere to be found and unidentified by management.  There are at least a half dozen external dependencies the project must have completed.  (Take Note Upper Management & Executives:  Six Sigma/Lean Processes can help at this level dramatically)

Waterfall Approach

In a waterfall approach all of these things will have to be documented and nothing initially gets developed.  The people writing the documents, often some sort of business analyst, is forced to basically make up whatever they can come up with.  In addition to that and hypothesis is derived from thin air and someone starts to come up with a more functional, technical, or even concrete UML design documentation.  To summarize, in a waterfall approach a whole bunch of people start documenting all sorts of things about this theoretical application software.  A 6th grader would study this and say, “so they write a bunch of lies right?”

When the actual concrete ideas come to fruition, long hours of the famous death march approach usually start.  Sometimes more and more people are thrown at the application in hopes that somehow it will speed things up, but in reality as a seasoned software developer knows, it only slows them down.  Other issues very common with this approach are horrifying low code quality, a lack of tests, missing ability to regression test, no verification of what done truly means, and a whole host of known issues.

Agile Approach

An Agile approach on the other hand would start finding the clients and consumers of the theoretical software.  These people would be engaged and some paper prototypes or other initial sketches of what the software might do are created.  Maybe sketchflow or some other software is used to create some rapid prototypes to give the clients an idea of what the software would look like and what it might do.  The clients start giving feedback and a more concrete idea is formed around this theoretical software upper management has dictated.  Initial tests and code are written and put into a continuous integration process, with an end product being dropped every few days or weeks.  A 6th grader would study this and say, “you’re building software and having fun?”

What Happens in the End, IF the Waterfall Project is Successful

There seems to be two resolutions that I’ve found that allow Waterfall to actually be successful.  The first is that the project forgoes the charade of Waterfall and starts implementation of more Agile ideals and processes immediately.  This cleans up things and improves morale, all while getting the project back on track.  The second solution is that development/engineering determines they’ll do Agile anyway, and up manage the management.  Management thinks they have a successful Waterfall Project when in reality the proactive developers/programmers took it upon themselves to assure success, and thus moved to an Agile ideals, process, and practices among themselves.

In Summary

These two different models are HUGELY disparate, and yet the aforementioned waterfall model approach is still heavily used.  I suspect, unfortunately, that it is primarily used at a majority of businesses (and especially Government).  Even if the business or Government pretends they’re doing Agile and calls their Waterfall Model Agile something another.  This is something else I’ve seen far too often.  This is a complete misrepresentation of what Agile Ideals and processes are.

The Questions

I’d like to know, what methods do you use to attack and remove the barriers caused by waterfall at large organizations?  Do you subvert the existing management infrastructure and just do things in a more Agile way regardless in order to succeed?  Are there any specific practices, techniques, or otherwise that help you align so that one can keep a project moving along quickly, all while avoiding the damage waterfall models do to the actual underpinning project, code quality, and other such items?

Please leave a comment or three.  :)

Yes, 10 times better.  That’s the difference between an average software programmer on an average software team and a rock star programmer on a rock star development team.  The difference is huge, and I’ve been reminded of this lately.

How is this different?  How is the rock star team 10x better?  How is it 10x faster?  How does the average slug along or even survive?

Simple.

The average software teams barely get by.  The average teams are almost always in a reactive mode versus a proactive mode.  Often average teams only get proactive if they build up a huge bureaucracy around themselves, which just allows them to be average.  Average teams might call themselves Agile but don’t follow any of the ideals, let alone the processes that actually enable the PEOPLE to be rock stars.

Over the years I have seen more than a few teams of 5-10 people, sometimes more, only produce what a rock star could produce alone.  5-10 people, $500k to a $1m per year, versus about $100-120k.  That’s 5-10x the cost.  When I first read about this I thought it was silly, nonsense, and generally impossible for developers to be that disparate in abilities.  I know now that I was wrong.  Developers DO differ that much in abilities.

Joel Spolsky wrote about it (and NO, even though I’ve mentioned him a number of times recently, I don’t always agree with him) and he’s spot on.  Hiring and keeping the top programmers is key to success.  Hiring average developers will sink a startup, drag an established company under, and destroy even the most stable of companies.

I’m going to cover some key points that prevent having average developers and prevent an average team sinking the ship.  These aren’t, “well maybe we’ll do these things”, these are “things that must happen, all or at least most of them, for the success and continued success of a company”.  This list is aimed at external observations of teams I’ve seen at Amazon, Microsoft, Webtrends, and others.  Some of these things are done so that the companies keep as large a part of their work force as rock stars as possible.  This is what makes these companies successful.

Successful Companies…

Successful companies encourage and perpetuate continued learning.  Not “I read a new technical book once a year”, I’m talking about rock stars that read a technical book or three per month (get a new one now @Amazon), try new languages whenever a new one crops up (re: Ruby, F#, Erlang, others…), encourage quite work areas, collaboration online, offline, and elsewhere, plenty of white boards and open workspaces, and even funds for out of company education with training courses or otherwise.

Successful companies involve themselves, specifically their technical people, with the social scene around their core technologies the company is built on.  Amazon & Microsoft have this fairly easy, as they’ve built their own social scenes around their respective technology.  Webtrends has even done so to some degree.  Smaller companies should be involved in some of these large companies scenes.  Attending conferences, training, or otherwise being involved with these companies is a great way to do just that.  This builds morale for your rock stars and rock star teams.

Successful companies provide optimal work environments.  Of course, work environments and what is optimal is up for debate.  But generally one can determine if the company at least involves itself enough to try.  Successful companies continually ask themselves things like;  are developers more productive in offices or not, do some developers work better remotely or in office, are developers different any some work better in some environments and not others?  Usually companies that ask these questions realize the later implication that developers are different from one developer to another.  Successful companies have leadership that can determine this and work with the developers to make sure they stay productive, challenged, and happy in their positions.

Successful companies push what makes their technology, product, or ideas interesting and fun to work with.  This may not be super easy for some companies, but even a trash pickup company has to have a cool back end system that uses the latest and greatest and might be migrating to the cloud or something.  Something is cool or interesting about what the company does, and that cool and interesting tech should be known and shown as a key reason the company rocks and should have rock star teams and rock stars on that team.

These are the top things that make an awesome team help build a successful company.  Do any others come to mind?  Please leave an idea or two, or disagree, tell me why rock stars aren’t 10x as productive or why successful companies may not need to focus on great development teams!  There’s always a devil’s advocate somewhere out there on the Interwebs, so light up the fire.

Follow

Get every new post delivered to your Inbox.

Join 3,712 other followers