Who’s the next guy?

Have been playing with testing against an in-memory database recently but that’s not the subject of this post. Tt was one of the enablers for it, though.

One of the ideas I talked about on my old home was Conscientious Coding, which is capitalized solely in case the term takes off so I can later claim a copyright. There’s not much to it really. The underlying principle is: Someone else is eventually going to have to deal with your code. Be nice to them.

It’s a subjective principle, to be sure. And as I’ve been working on what could very well turn into someone else’s Brownfield application, I can’t help wondering what that fellow is getting himself into if I ever get hit by a runaway dolphin.

The app I’m working on is for my dad’s company, a small- to medium-sized land surveying company, and a good twenty percent of the staff is comprised of the entirety of my immediate family, save the missus and the young’un. The company is based in Virden, Manitoba (population 2500 – 3000 depending on how many times you count sister-wives and brother-uncles) with an office in Brandon (known locally as "The City").

I’ve mentioned before that the application is an update of one I whipped up nigh on eight years ago over a couple of weekends. It was in classic ASP and made heavy use of ADO, XMLHTTP, and JavaScript. It didn’t do a whole lot but they quickly become utterly dependent on it such that I didn’t need any formal notification system to tell me when our hosting company went down because they’d be on the phone to me if it so much as hiccuped.

It’s not the cleanest code I’ve written but I’ve been able to add a couple of little features here and there (like the ability to delete) without requiring a day to re-learn the app each time I went back to it.

Now here I am two months into the re-write and I haven’t even managed to duplicate what the existing app does yet. This is partially due to my veering off to hone some skillz and learn new technologies but it’s also because I’m not quite as cavalier about my code as I used to be. The new version now has more VS projects than the old version had physical .asp files. In case you think I’m kidding, the old app consists of: AddEditJob.asp, JobSearch.asp, SearchResults.asp, and DeleteJob.asp. Plus supporting CSS, JavaScript, images, and XSLT files.

Now we get to my would-be successor. Typically, a company of their size wouldn’t hire an intermediate-with-senior-aspirations developer to build custom software to run their business. They’re having a hard enough time simply finding time to update their website. It’s just a happy coincidence that the one black sheep in the family can actually help streamline things a bit.

So I’ve been thinking about who they would potentially get to maintain the software I’m writing for them. There’s a very high probability, it would be a junior person, possibly even a network person with grandiose ideas of being a rock star programmer. And I’m imagining his reaction when he opens the solution (assuming he’s familiar with Subversion) for the first time and finds things like a) a very large number of objects aren’t "created" anywhere, and b) there are no SQL statements or stored procedures. This is not to mention what he’ll make of the .build file in the root folder.

In a large company, where I work as a part of a team, I don’t pay this no never mind. They have the resources to retain a senior resource who should either be familiar with IoC and O/RM or be able to figure it out without much trouble. Junior developers on that team would almost always have someone they can turn to in times of crisis. But what about this lowly single-developer application owned by a company whose IT department consists of whoever comes into the office first to turn on all the computers? What are the odds they would be able to find someone in their area who could look after it?

Assuming they find someone relatively keen, how much can I assume of this person? Can I assume they’ll be able to Google their way through NHibernate, StructureMap and/or Windsor, NAnt, CruiseControl.NET, Linq, NUnit, and MVC? Will he look at my repositories and think, "why doesn’t he just call stored procedures directly on the database?" followed by "where the &*%$ or the stored procedures?"

These are moot points in some ways because I see little justification for "dumbing down" anything I do in the off-chance this application outlives me. At this point, a well-crafted readme file is probably all that is in order to assuage my guilt of using all this new-fangled technology. One that outlines the technologies that are used and where to start looking if they need help. This is kind of an extension on a post I did just over a year ago on how to make sure your family’s IT department will continue to run after your untimely demise, basically saying in my own terse way that you should document everything.

I like this approach because it doesn’t assume the next person is incapable of handling it while still providing guidance if they aren’t familar with all the little gadgets embedded in it. Assuming it remains more current than the comments in the code…

Kyle the Death-Wished

This entry was posted in Conscientious Coding. Bookmark the permalink. Follow any comments here with the RSS feed for this post.
  • Kyle Baley

    Keep in mind that in this case, it really is a mom-and-pop application in every sense of the phrase. Which means there will probably be *no* transition period to another developer. If I can’t work on it, it’s because I’m in a coma. And this is not uncommon. A lot of these are for a friend of a friend or some colleague’s sister or in some other capacity where you will likely always be the sole developer on it.

    I’ve actually considered making the application open source, at least when it’s closer to having some decent functionality. It was more to use it as a reference for others and to invite critique but there could be something to using it as an ongoing maintenance mechanism. It wouldn’t be quite as “open” as other open source apps though because the functionality would be driven by their specific needs, not the typical way of voting on features.

    On the other end of the spectrum, I’ve also had commercial aspirations for the app. Given the market though, I have doubts as to whether it would be worth the hassle of having a concrete obligation to respond to issues. Both are future considerations as the immediate need is just to get it working.

    Back to the original concern, we also have to take into account the fact that we are essentially guessing who the next person will be. Maybe they’ll actually find someone relatively local and who is more than capable of taking over. I know a few great developers in the nearby cities who might consider it for no more reason than outright philanthropy. Or because they know I’d do the same for them.

    The moral of the story: always have an exit plan

  • stevey

    Find a practical solution to this is tough. Even you are lucky and everything goes right (got a right junior dev and, transfered everything, he grasps very well). I think once the new dev knows all the pieces in the app, it is not far for him to become intermediate. Then it is the time for you to hire again.
    how about make that app more generic and open source.

    a sincere blog reader

  • Just Remember

    Even with a well crafted readme (which is likely tainted by your expert knowledge, you know you will omit something you think is basic but the following coder won’t know) you need to be very concerned about mom & pop shops and the skill of developer that will come behind.

    The one thing previous posters missed is that even if with mentoring it “takes a week”, that is a week of programmer time that the mom&pop will be charged for. The programmer following may be a good salesman but incompetant and criticize the codebase and convince the mom&pop to just do a re-write, costing them more money.

    I think that finding the cost/benefit sweet spot for 3rd party libraries and advanced techniques is one of the most valuable skills an architect/coder can have.

  • Kyle Baley

    @Ayende: I don’t disagree with you in that we could spend a week with a developer on a codebase and get them up to speed. But that’s on applications where there is more than one developer. The mom-and-pop apps, as David refers to them, are, at best, an intermediate developer’s side project. Mentoring is probably not going to happen to any great extent, if at all.

    The sweet spot is a balance between making it maintainable for you and maintainable for the next person making reasonable assumptions of who that may be. And even that would be skewed toward my own personal preference given that the only thing that’s going to sever me from this app is death or, more likely, psychosis.

    Suddenly, I’m having flashbacks to my actuarial classes.

  • http://www.davidhayden.com/ David Hayden


    It is a balancing act and all you can do is your best. You try to find that sweet spot for the client and hope for the best. As jdn mentions, it isn’t cut and dry.

  • http://www.ayende.com/Blog/ Ayende Rahien
  • http://www.e-Crescendo.com jdn

    To me, this brings up the whole debate about maintainability that I’ve had previously (Ayende in particular online). Maintainable for whom?

    It isn’t a cut and dried subject.

  • Kyle Baley


    That sounds like a bit of a balancing act but that’s something to consider. On the one hand, using these tools helps to make them more mainstream. On the other, using them in this context is riskier.

    I’m pretty sure Linq to NHibernate is at the wrong end of the spectrum at this point. But it’s just so darn shiny.

  • http://www.davidhayden.com/ David Hayden

    I do quite a bit of side development for small and medium-sized clients, and although I do not dumb-down the application, I try to pick tools, technologies, and techniques that are more mainstream / common so the customer has a better chance of finding a knowledgeable developer at a fair market price.

    If you find yourself honing your own skills to create the application, you might be reducing the chance of your client finding someone capable of maintaining it.

    The fact that you are sensitive to this matter shows that you are a very Conscientious Coder.

  • Tyrone

    I always try to use best practices while keeping in the back of my head the KIS principle. NHibernate, StructureMap and/or Windsor, NAnt, are CruiseControl.NET are all good tools to use; but sometimes they tend to make a fairly simple app more complex and more dependent on third-party components.

  • http://devlicio.us Derik Whittaker

    You bring up a great point.

    I know I have pondered this many times when doing web work for ‘mom and pop’ shops. In the end you need to do it the way you feel is best ( dare i say ‘Best Practice’) and just hope and pray the next guy knows how to pick his (or her) jaw off the floor long enough to ask for help.