Low Cost Legacy Help
If I think back a number of years, I can remember sitting in a software shop and feeling like the iconic stranger in a strange land. I valued writing clean code, practicing TDD, refactoring away from procedural, legacy cruft, and generally improving my craft. This was not otherwise common. There were architects in that place that were long on seniority and opinions but short on chops, and they really, really liked them some global state. And class size? The bigger the better.
I seriously felt like I was in some kind of weird, parallel reality. We’d have lunch & learns and watch things like Uncle Bob videos or talks from Channel 9 or whatever, and I would leave thinking that some kind of brainwashing A/B trick had resulted in me watching a different video from everyone else. It was discouraging.
I made progress in fits and starts. I’d refactor a method here, kill a singleton there, inject an interface here, delete some dead code there. But, then I’d go for a long weekend trip and come back to find a new singleton with more global state than its recently deceased cousin. It was two steps forward and one step backward on a good week. Like wading upstream against a raging, waist-high river, it was slow, exhausting progress.
I remember thinking that it’d be great if I could plead with one of the speakers in the video to come in and talk to people in this shop. Maybe if one of the folks from the video was there, speaking live to them, something would finally get through. Or maybe the video hero would take pity on me and offer me a job. But I also knew that this was a pipe dream because hiring a consultant like this would be wildly expensive.
A lot of years have passed since then, and my life has evolved considerably. I make most of my living doing coaching and helping improve software development craft. Other parts of my living come from making videos and writing books about the same. And through it all, I’ve never forgotten that feeling — a feeling with which, I’d imagine, many reading are familiar.
I’ve recently piloted with great success a new coaching model. Think of the Chess TDD series, but imagine that instead of building a (non-trivial) toy application, I was doing a codecast in which I refactored some nasty legacy method in your code base to make it testable and narrated over it, explaining what I was doing and why. The beauty of this approach is that we can pick some problems that are representative of your code base, and you can refer to the videos for context when doing refactorings from then forward.
This has proven to be a good option for small shops because it’s low touch. It doesn’t require much if any synchrony, and, perhaps more importantly, it doesn’t require flights, hotels, a multi-day engagement fee with opportunity cost, or advanced schedule clearing. It’s really just a matter of billable hours, which winds up being something like three hours per hour of video footage. And five-ten hours of video footage is a surprisingly large, helpful amount.
Think of it this way. It’s like someone recording a Pluralsight course wherein they refactor your code. So if you’re reading this, and you think your code base and/or team could use a kick in the pants, feel free to reach out, even if it seems like a long shot. There’s no charge for us to talk and even for me to sign an NDA and take a look at your code. You can tell your boss or whomever that I really just kind of jump into problem solving mode and only start to think about billing arrangements once I’m convinced that I can contribute meaningful value to you.
Because, honestly, it’s also a lot of fun. 🙂
I’ve wanted to have an informal local meet-up where we did this kind of thing, but it’s difficult to get traction my city for some reason. There may be about one or two user group meetings where we share code, even if it’s just personal projects. If memory serves, some people called it “code and coffee” where you meet at a coffee house for an hour and whoever shows up can participate in a group review or coding session. I think it’s a fantastic way to level up and connect with other devs. I just need to find the right… Read more »
I’ve thought about having this sort of thing as well, but I’ve never taken it anywhere. Too busy, I guess. But yeah, rather than just getting together once per month and listening to a talk (not that I mind that), it seems like it’d be interesting to pull a group together periodically and work on getting something done.
Once I wrap up with the chess game, I’m actually thinking of starting a project of some kind where anyone can participate, so long as they record what they’re doing. Might be a fun experiment.
I’m almost hesitant to say this because I know we’re in the same (general) geographical area. One place where this exact method has worked really well for our company is in research institutions. Places where you get a lot of math nerds, marketing researchers, or scientists writing code tend to both see the value in having someone get a project started for them, or to pick up an existing project and gently set it back on the right track when things start to get messy. It is very good work when it comes along. 🙂
I appreciate the good faith advice in spite of potential competition 🙂
I wouldn’t worry too much, even if you were inclined to worry. I’m so booked these days that I really only take these kinds of gigs passively when people seek me out. I’ve just been enjoying it, so I thought I’d throw it out there and see if more people came knocking.
I think it is a great idea for a service, hopefully I’ll be able to rip it off someday 😉 I just left a job that could have used this. We had some consultants come in for a week and give talks. In my estimation that didn’t really change the culture much. It was fairly abstract. It’s easy to know the definitions of SOLID or TDD or refactoring. The challenge is putting them into practice. Specific videos practice these things could help and would be cheaper than getting an embedded team involved. It seems like a nice fit. Something applicable… Read more »
Glad to hear that it sounds like it’d be useful. By and large, that’s the feedback that I’m getting. I’m also experienced enough with enough different consultants to know that there’s a tendency to be hand-wavy with solutions if you don’t keep yourself in check.
And, I’ll definitely keep you posted if/when I start a collaborative project effort for the next series of work.