In a
previous post, I offered examples of trading unknown costs for known costs such as trading the unknown cost of finding bugs for the known cost of automated testing.
This article expands on that concept further, and compares the choices that we make in our projects to a common financial product called an Interest Rate Swap.
Interest Rate SwapsAn Interest Rate Swap is a contract that two parties enter into, which dictates regular cash payments to be made based on the interest on a notional amount. Most commonly, one party will pay a fixed amount of interest (say 5%) for a floating amount of interest (say LIBOR + 1%). Each month, the difference between the two amounts is exchanged.
LIBOR is a market rate that goes up and down as the markets perceptions of interest rates change.
For example, lets say that party A pays an annual 5% fixed interest on $1M in monthly payments. 5% of $1M for one month is $4166. Counterparty B pays LIBOR + 1% on the same terms. If LIBOR was 3.9%, the monthly payment would be $4083. In this case, the guy paying floating should receive $83. If LIBOR moves to 4.1% then the guy paying floating owes $83.
Some more examples are
here and
here.
Generally speaking, people (businesses) enter into these contracts because they either have an appetite for interest risk or they want to reduce their risk (or exposure) to interest rate changes. The party that takes on the risk (pays floating) usually gets compensated by receiving a higher fixed amount.
Software ProjectsUnfortunately, such financial instruments don't exist for software projects. Building software is a tremendously complicated and organic activity that we can't button down into neat transactions. Consider for a second that we could enter into such agreements for our software projects. Which side of the risk equation would most software buyers be on? Would they want to increase or decrease their risk?
Almost always, software buyers want to reduce their risk.
Choices that we makeLets take another look at some of the choices that we make in our software projects that can increase or decrease risk.
- Automate tests now vs Find bugs later
- Keep things nice and organized as we go vs clean up later
- Make information available vs hiding it
- Building for now vs building for the future
- Designing as simple as possible vs over complicating things
- Pair Programming vs Single Programming
These techniques are proven to reduce risk for a reasonably fixed cost. As stated above, software buyers are all in the risk reduction business, so why doesn't every project employ these techniques?
This is certainly a topic that is up for debate, but here are a few reasons that I can think of.
Can Do AttitudeIn their book 'Waltzing with Bears', Tom Demarco and Timothy Lister talk about a teams tendency to ignore risks for the absurd reason that they it is considered to be 'thinking negatively'. The result is the socially more acceptable positive thinking and a 'Can Do' attitude that doesn't put any emphasis on what could go wrong. For example, why spend time automating tests when you have such a great group of programmers. We don't want to accept that programmers are going to introduce bugs.
Clearly this is naive.
Lack of SkillsMost of these risk reduction techniques are far from trivial to implement. They take commitment and understanding at all levels to implement and they are still gaining popularity in the industry so not all teams have the skills required.
Buyer CommitmentA case also needs to be made to the manager/buyer. On the surface, Pair Programming seems ludicrous to a manager, like 2 guys digging a hole with one shovel. Instead of paying $75 a hour to develop software, it now costs $150 an hour. How could that possibly make any sense?
You have to look at the whole picture, isolate variables and look at cause and effect to see the impact. How Pair Programming reduces risk is a bigger topic that I will be looking at in a future posting.
ConclusionThere are a number of software development techniques listed here that can reduce risk in a project. They can be thought of as trading a fixed cost for a floating cost. They take commitment and understanding to implement, but they offer stability and that is often what is desired the most by software buyers.