Technical Debt Is Johnny Cash’s Cadillac Of Software

For those of you who aren’t country music fans, Johnny Cash sings about working in the the GM plant and building a Caddy one piece at a time by bringing the pieces home in his lunch pail over a number of years. In the end, he puts the car together and while he has a functioning, hot-rod Cadillac, it’s a bit, how shall we say, bolted together with duct tape and bailing wire. I can only imagine what it would be like to perform repairs on a car that’s built from a variety of parts over 10 or 15 years. It seems like a far fetched system but in the software world, it’s exactly what you get in a system that ignores technical debt over time to focus on delivery of features.

There’s been some writing lately on metaphors for technical debt which has caused me to think about what it means to have bad, messy, untested code in a system of any size. I think the idea of Johnny’s Caddy is an excellent metaphor for explaining both what technical debt is and how it affects the functionality and maintainability of a system. When you have three headlights and no tail fins, the car still runs but it’s a little odd looking. But when you try to dig into the guts and replace a ’52 carburetor bolted onto a a ’62 intake manifold, you’re going to have to have extremely specialized system knowledge about the car you are working on. If the original mechanic gets hit by a bus, the new guy can’t go to AutoZone and pick up a ’49, ’50, ’51, ’52, ’53, ’54, ’55, ’56, ’57, ’59 Caddy manual.

The same thing holds true for a system that’s been continually extended over a number of years to do more and more things for its users. If the code is never revisited to make it more maintainable or flexible and if it was originally written without consideration for future changes, the system becomes brittle and difficult to understand. Without a manual (either the domain knowledge of the original system builders or tests to protect developers from unintended consequences), modifying the system can become rather hazardous. Over time, if no attempts are made to bring the code into some semblance of normalcy, the system can even get to the point where it can’t be changed for fear of the consequences.

One thing to keep in mind, technical debt is a sign of success. Without the continual driver of success, systems don’t evolve to the point of having technical debt. But it’s important to always be aware of the debt, of its force and effect on the flexibility and maintainability of the system. Without constant attention, eventually the system becomes fragile and unstable, breaking unexpectedly when changes are made to seemingly unrelated sections of the app. Without some sort of design, either architectural through an initial design phase or protective through the use of solid tests, the system development is likely to eventually come to a slow halt because of the interrelatedness of the pieces.

Why I Don’t Hang Out With People Named David

As many of you know, I like to hang out with cool people. I go out of my way to search my iPhone phone book for cool people to hang out with. Sometimes, my mom even sends me the email of random children in my general cohort of people she knows so that I might randomly email them and hang out with them. Seriously, I like cool people. And my main criterion for whether or not people are cool is really simple: Is this someone I’d really want to hang out with?

And really, the only criterion of coolness worth checking out is “Are they named David?”

Now let me clarify: people named David are nifty. They pay their bills, don’t beat their wives, drink something other than Mickey’s Malt Liquor and generally are normal human beings. But you see, being named David is a choice and whenever anyone voluntarily keeps David as their name, I have to ask “Why?”

Don’t get me wrong, being named David isn’t an instant showstopper for being cool. It’s just that lots of people I’ve known that were named David just weren’t cool which is best explained by a really bad simile: Being named David is like being David Hasselhoff.

Being David Hasselhoff is awesome if you want to be a world famous cult figure who goes to awesome parties, sings great songs on YouTube and was once the star of a kick-ass show called Knight Rider with a bad ass car that talked to him and saved him from bad guys. But if you want to be in independent films with Natalie Portman, you can’t because Natalie Portman doesn’t hang out in Cannes with David Hasselhoff. If you want to win Academy Awards, you can’t because David Hasselhoff doesn’t win Academy Awards. In short, if you want to do anything that doesn’t involve being David Hasselhoff, you can’t because you ARE David Hasselhoff.

See, by being David Hasselhoff, he can’t be in independent films. Well he could be but that doesn’t really fit in my story line. Therefore, because David Hasselhoff can’t be in independent films with Natalie Portman (even though he can be, it’s not important, try to forget I pointed that flaw in my storyline out, OH LOOK A CHICKEN!), then it must be true that people named David aren’t cool.

Instead I look for people who aren’t named David because it’s more likely that they fit closely into my weird and oddly supported worldview that people named David can’t be cool. I don’t want someone named David, I want someone named not David.

Just by being named David, your chances of being cool are practically zero and thus, I’d rather have hung out with you after you took a long nap.

So what’s the moral of this whole ridiculously overgeneralized and poorly thought out story? Two things:

1. If you want to hang out with me, avoid being named David. Unless you’re David Hasselhoff, it does you no favors.
2. If you are someone else and you meet someone named David, take notice and immediately become suspicious. They probably aren’t David Hasselhoff and thus, not cool.

It might sound harsh, and it is (with bad punctuation usage to boot). But frankly, life is too short to live without strict black and white rules that involve sweeping over-generalizations and easy ways to get lots of people to link to your site.

Yes, there really is a point to all this.

Becoming An Amateur Nurseryman

I’ve had a garden for a long time but this is the first year I’m growing my own plants transplants from seeds. At $2-3 a plant from the local nursery, I usually end up spending $50-100 in plants. I came up with the grand scheme to grow enough transplants for myself and to sell the remaining ones to friends and family for a good price. Based on the results so far, I may get lucky to give them away for free.

I engineered a lighting scheme, one that’s already going to need to be updated because it doesn’t cover the area I have. I planted the seeds on February 10th and so far, things have been a little hit and miss. The squash got entirely too leggy and I’m not expecting much from them. The cucumbers are doing pretty well. I actually just transplanted both of those into bigger pots today. The tomatillos are not faring well at all and I’m not sure why. Most of the tomatoes and peppers are slowly growing though not as quickly as I would like. I have about 3 more weeks before planting time is here and I’m not sure they are going to really be viable. I’ll probably upgrade the lighting scheme today and see if that makes it any better.

I’m using 1 Burpee grow kit from Lowes and 2 Gardens Alive kits. Neither seems to be outperforming the other right now but the Gardens Alive will definitely be easier to transplant as they have grow plugs that will pull right out of the planter instead of the soil that comes with the Burpee kit. Also, the Gardens Alive kits have a lower profile and require less water which is nice. The styrofoam holder floats in water so that the seedlings always have the right amount of water.

You can see the results of the experiment so far in the pictorial expose below. Notes for next year include to plant earlier, maybe around the middle of January and avoid the squash as I don’t think they are good transplanted. They grow so fast straight from seed anyway that I think direct planting in the garden might be better.