October 20, 2015

Doing it again – Or “Biting Bullets”

Biting a bullet is never going to taste good. It’s not going to be your first choice. If there’s another way out, then better take that. But sometimes – sometimes, it’s best to just bite it.

Does this sound familiar: You’ve got this system running but when you ask for changes to be made, nobody is very enthusiastic. Something pretty simple from your point of view, results in a lot of ‘blow-back’. People say ‘OK’, but they shake their head. Their body language doesn’t match up to their words. They don’t really want to do it. Why not? Because they’re not sure how to add something new without breaking what you’ve already got.

Or this situation: you’re working agile and all is good. Then one day the team, instead of accepting 10 stories into the Sprint, accepts 5. Why? ‘Tech debt’ they say. ‘Oh – OK’. But the next week it gets worse. Only 4 stories, and just doesn’t get any better. What is all this technical debt? Can somebody tell you when the velocity is going to go back up? No. What are they doing? They’re trying to re-build the system, bit by bit, piece by piece. Will it work? Maybe not. Eventually you might get a bit bored or frustrated, and you go to a friendly tech guy and say ‘when is this going to end?’ and he says ‘I can’t tell you, mate.’

So, you come up with the idea: ‘Why don’t we build it again?’ and everybody shuts up in horror. Do it again? Are you kidding? No, you’re not. There must be a way to replace the current service without risking the business. I mean, there must be. But how?

If you’ve got a public facing service, let’s say you sell property, you can’t just stop working on it while you build something new. That’s suicide. Things cannot be left to rot. So, you need to keep working on it, while you build something new alongside. Then when they are both equivalent in functionality, and the new service is stable, you can switch everybody over to it, and the only thing people will notice is that it’s faster with greather up-time.

If it’s a web service then you’ve got three layers: view (HTML), controller (something like PHP), and model (say SQL). How’s this for a suggestion – just concentrate on one thing, fix the contoller logic. Leave the data. Leave the re-skin (HTML) for another time. Re-use that stuff.

Sound easier? Yes, easier, but still not easy. It’s perfectly do-able though. Two guys, 6 weeks, to come up with a plan. Lock them in a room. Make it worth their while. It’s called ‘reverse engineering’, and mixed with a little good old fashioned UML, in a couple of months you’ll have forgotten why you were nervous. And the velocity will go back up – probably stay up too.

This post first appeared here.