This post originated from an RSS feed registered with Agile Buzz
by Simon Baker.
Original Post: More on outsourcing
Feed Title: Agile In Action
Feed URL: http://feeds.feedburner.com/AgileInAction
Feed Description: Energized Work's blog.
Ok. Outsourcing ... I said something like: "Not to do it". Outsourcing can be made to work. But at what cost? Is it really a cost-effective alternative when you count the cost of the overheads it introduces? The 2 main issues I have with outsourcing relate to waste and the extra effort required to maintain effective communication.
1. Waste
The 7 wastes of software development can certainly be found in any situation but the following types of waste are amplified by outsourcing:
Extra processing steps required to manage and co-ordinate exchanges with the other company
Motion - finding information or chasing people at the other company (exacerbated by time zones)
Waiting on the other company (exacerbated by time zones)
Transportation - handing items (e.g. documentation, APIs or interfaces, software for integration or testing, test results, etc) over to the other company or receiving items from them
Inventory - requirements specifications and other documentation, typically required by the contract with the other company
Motion, waiting and transportation are made worse by the inherent latency of dealing with an external party. Extra processing steps are about managing the dependency. Inventory is about you believing you can (and must) nail everything down at the start, for contractual purposes, and the other company covering its arse by being able to demonstrate that it has delivered what's written in black and white and then making money from your change requests. A lot of time is wasted when it could be spent producing working software in-house. And time is money so you're paying for it somewhere.
2. Communication
Communication is a value of agility. And your ability to understand, react and change quickly, and deliver business value depends on your ability to communicate effectively and continuously with everyone in the team and the product owner. Communication is always difficult but when people are collocated there are less problems to contend with. Of course you still have to work at it. Face-to-face communication is the most effective way to exchange information. When you can see a person you will pick up all sorts of valuable ancillary information from their facial expressions, hand gestures and body language. And don't forget osmosis. When everyone is sitting in the same office, or better still, the same bullpen, people will tune into information they deem important by filtering conversations happening around them. Important things like pair-programming, daily stand-ups, planning games, iteration reviews and retrospectives are simply more effective when everyone is in the same room.
When development or testing is performed externally there is a tendency to spec the hell out of everything. Specifications are an abstraction. Seldom does the written word truly express the author's thoughts. And when someone else reads the specification the words are interpreted according to that person's knowledge and understanding. It's very likely that the author and reader will end up with different mental models. And what's to say the author's thinking is right anyway? Do all the good ideas really happen at the start of a project, when the specification is being written? I don't think so. How can you be sure of everything up-front without trying things and getting some feedback? User stories provide reminders to have a conversation about the functionality required. They initiate collaboration between the product owner and the team, which reveals detail when it is needed. Writing specifications takes time and costs money. Why not spend the money in-house to develop working software in the time it takes to produce the specification document?
Maintaining effective communication is more difficult and requires more effort when people are distributed. Skype or Instant Messaging can help maintain conversation during, say pair-programming, but they don't help in daily stand-ups and the like. Video conferencing does but distance from the camera and transmission delay can obscure the non-verbal aspects of communication such as subtle facial expressions. Osmosis disappears. And again, time zones exacerbate the difficulties.
If things start to go wrong it's usually due to poor communications. So what do you do? Ironically, you agree with the other company that more face-to-face time is needed to improve communications and remove confusion. This means travel expenses increase.
Simplicity is a value of agility. Keep it simple, stupid! Outsourcing is not keeping things simple. Everything becomes more difficult and requires more effort to sustain flow.
I alluded to this earlier: So often, the relationship with the other company is governed by the contract rather than being built on trust. This makes maintaining shared goals difficult and any differences may interfere with getting things done. In this situation, the other company may become sycophantic. They say what you want to hear even if they don't understand what you want or what you're saying. I'd be surprised if you get what you wanted in the time you wanted it.