Sep 092012
 

When we talk about Agile Project Management, Agile Web Development or Agile Management the story of the pig and the chicken always comes up:

A pig and a chicken are walking down a road. The chicken looks at the pig and says, “Hey, why don’t we open a restaurant?” The pig looks back at the chicken and says, “Good idea, what do you want to call it?” The chicken thinks about it and says, “Why don’t we call it ‘Ham and Eggs’?” “I don’t think so,” says the pig, “I’d be committed, but you’d only be involved.”

But there’s a joke my Dad often likes to tell about the pig and the farmer:

A preacher visiting his flock in the country happens to see a pig walking around on 3 legs. The preacher stopped by and asked the farmer. My son, what’s with your pig with only 3 legs?

Well preacher says the farmer, this pig is very special to my family and me, well just 2 months ago, I’m working underneath my tractor, the jack fell and the tractor was crushing me. I yelled and my pig rushed to my rescue, dug me out and pulled me away from the tractor.

Well that’s very commendable says the preacher … but …

That’s not all preacher, last week my house caught fire and my pig pulled my 2 young daughters to safety. It even received a hero gold ribbon, from the village mayor.

I understand says the preacher, but that still doesn’t explain the missing leg!

Well like I said preacher, this pig is very special to my family and well, we just cannot bring ourselves to eat it all at once.

That’s one committed pig.

Share on TwitterShare on LinkedInDigg ThisShare on TumblrSubmit to StumbleUponSave on DeliciousSubmit to redditShare via email
Jan 302011
 

So, I’ve been trying to get my head around how best to deal with our heterogeneous development environment in an agile way. It’s easy to say a process is agile, much like we used to say software was user friendly. We just slapped a label on it that said User Friendly. Now I think we’re sometimes doing the same with Agile.

So, how do we distil agile down to its core elements. Well, we don’t have to, it’s been done already. I think for where I am, competing priorities are the greatest concern. We’ve always got client jobs going on, in different stages of development. However, we usually try to make sure the developers have one block of work on a day, but one day might be a different job to the next. And we need to consider how we invest our time in planning for the future with new technologies.

Almost every good feature in computer operating systems today, including most features in DOS, Windows, and Windows NT, came from the mind of one hacker  or another. Typically the work was not commissioned by a company. It was done as a research project then productized. Without these people, we make no forward progress. – Larry McVoy, The Sourceware Operating System Proposal, 1993.

Our struggle at the moment is finding the right balance between letting the developers have their time to freely investigate a new technology, and doing paid client work. We can’t spend all the time doing study and training, and developers aren’t robots that can churn out code 100% of the time.

One point of view is that research can be done as part of clients’ work. That is, when a client’s job is being quoted or designed we can throw in project time then and there to do the research required to get the job done. I call this the Brave New World way of doing things. The advantage of this is that it’s fully funded research and has a clear end goal and time allocated to the work.

The flip side is having dedicated time not allocated to a particular job where the developers can try out new things that don’t directly lead to a paying client’s job. The advantage here, as in the quote above, is that it tends to lead towards more innovation and discovering unique things that may not have been discovered if the goal had already been chosen. The down side of this, of course, is the cost. It doesn’t directly bring in revenue. Research is a cost, not a profit generator in the short term.

The business person prefers the first way, and the technical the second.

Planning for the long term is expensive, but the investment pays off much later. But how much later? And is it really the domain of a small business to be doing research?

I’m sure if we position research as training, then it would be fine. It might be easier to justify the expense if we had found a training course, the money to send the developer off on it, and off they went for a day or two. We’re not talking about pure research, but about investigating new technology without the pressure of delivering to a client.

So how does this all fit into a agile way of doing things? Well, it doesn’t directly. Agile is about delivering to the customer the best product within the constraints provided. And, although the principles mention

Continuous attention to technical excellence and good design enhances agility.

and

The best architectures, requirements, and designs emerge from self-organizing teams.

We need to think about how we can make those an input to the system rather than as an end product. How can we keep both the business and technical people happy?

Share on TwitterShare on LinkedInDigg ThisShare on TumblrSubmit to StumbleUponSave on DeliciousSubmit to redditShare via email
Jan 082011
 

So, I’m beginning to think that Agile development is a metaphor for the ideal work environment where the client has a clear idea of what they want developed – maybe not the end product but at least a good sense of the direction they want to go in, the development team gets their work done unhindered, the management team gets the resources they need and everything seems to just flow; like a sake cup flowing down a small estuary under the cherry blossoms while lines of haiku are composed.

But in reality, it’s more like the hapless cat herder trying to bring their untameable pets (pests?) under control, while battling a multi-dimensional beast from the planet Zorg with a useless blaster. Not impossible, but down right tricky.

The event that has brought me to this realisation is our effort to try and find a new outsourcing partner to cover our workload. In order to start a conversation (the trendy new-ish word for business relationship) I have contacted a few, and sent them complete specifications of what we want.

Not very agile.

But how are they supposed to quote on what I want? It’s not a big project – we chose this project because it’s rather small, has a short time-frame for what’s wanted, and if it goes pear-shaped we should be able to recover. And in return they have come back with fixed price quotes where the most expensive is 3 1/2 times more than the cheapest. I’ve asked for clarification of the costs from all three, but I’m not really getting very far with that.

But how is this supposed to work for larger jobs? Do we then just take a developer on a retainer and push work through to them? That seems like a better deal. But one of the things we’re looking for is not a single developer, but an organisation that can do different parts of the work: HTML coding, PHP coding, graphic design, etc.

And having someone non-co-located (un-co-located?) is not within the spirit of agile where all the developers work together in the same place and on the same project. You can’t have a daily scrum when some of the participants are in a different location and time zone, and maybe use a different language.

So we just end up with the same processes happening the same way.

The last project I tried to have the outsourced developers work on a daily basis meant that they were trying to second guess some of the development decisions that were clear to me, but not so clear to them. I thought I had explained most of the project to them, but every now and then a decision would have to be made, and they would make it and check with me. And for some reason, it always seemed to be the wrong decision. It wasn’t a bad decision, and looking back it seemed like the most logical thing to do, but it wasn’t the correct thing to do.

The happy medium that we’ve found is to get the local development team to do the interesting part of the project: database design, setting up the framework, some design and any interesting or new coding that is required, and have the offshore developer do a lot of the grunt work based on the work that has been already done. So far, that’s been a good place to start.

In the end, I don’t think we can work within an agile methodology for every project in every instance. We’ll have to have hybrid teams, where the local developers can work together doing what they do best, and we have clearly defined development for the outsource agencies.

Share on TwitterShare on LinkedInDigg ThisShare on TumblrSubmit to StumbleUponSave on DeliciousSubmit to redditShare via email