Scope Creep Happens On Personal Projects Too

At work I’m fairly religious about such tenets as proper scope definition and change management in running my projects. Without this level of control, things would quickly spin out of hand and projects would never be completed in a timely fashion. Flip through any project management guide (the ubiquitous PMP Handbook comes to mind) and you’ll find pages of information on managing scope creep and keeping stakeholders in check.

But what about personal projects? In many cases, projects are more loosely defined, and lack specific objectives and milestones. The end result is that work gets added or priorities shifted mid-stream, which inevitably causes delays in completion, frustration, and an ever increasing pile of uncompleted projects. Not an ideal place to be!

Here’s a good example. One of the recent additions to the projects list is to build a website for my son, where we can showcase pictures, stories, and movies of his growth. Now at first, this seemed a pretty easy task, given that the steps might look like the following:

  • Select a hosting provider and setup account
  • Design simple iWeb template
  • Upload pictures to Picasa
  • Upload video to YouTube
  • Add content to pages, initial list to include:
    • Birth
    • The First Week
    • Pictures and Video
  • Send notification to immediate family

Easy enough, yeah? Well, being my geeky self, while carrying out these actions I decided to add some interesting learning opportunities to the mix:

  • Instead of hosting, use a dynamic DNS service and host the web site on my VM server at home. It is cheaper and since this site is not financially bound (i.e. if it goes down I won’t loose money), high availability is not a requirement.
  • Install WordPress as the CMS for the site, to allow for RSS feeds.
  • Find and install custom plugins allowing for photo gallery and embedded video functionality.

Getting a bit more complicated, aren’t we! Well, being the enterprising sort, I thought I might want to add even more complexity, so I considered these as well:

  • Setting up a VM to act as a gateway between my home network and the Internet, so as to allow the Internet exposed VMs to be on a separate network subnet from the rest of my internal LAN.
  • Setup of an IDS such as Snort to monitor traffic on this DMZ.
  • Setup of a custom VPN solution using OpenVPN so as to allow grandparents and other close relatives the ability to see additional content over a secure link.

Now, unless you are one hard-core geek (and not a parent of a new baby), you are probably going “What is this guy thinking?!” And you’d be right; while one could argue that the first set of “enhancements” adds some value to the overall project goals (a simple, easy to update, followable web presence), I think you’d be hard pressed to argue the same for that second list.

True, separating Internet and non-Internet facing network zones is a standard best practice, and a solution such as Snort would probably show all sorts of useful data. But really, what is the chance that a) a hacker is going to take the time to scan my network when it’s not widely advertised, b) there is some undisclosed vulnerability in WordPress or PHP, c) once gaining non-root access to the web server the hacker proceeds to succesfully brute force my strong, random 40 character password? Yeah, not likely I think. Definitely not worth the considerable effort for those last three tasks.

Given that my time is going to be rather short for the forseeable future, it appears I’m going to have to curb my knack for adding needless complication to personal initiatives. Just like with real projects, when time is short and resources tight, it’s more important than ever to ensure the work you do is adding real, tangible value to your projects.

Getting worked up over nothing?

Today I caught myself getting rather ticked off after spending around 2.5 hours trying to script out changes to around 25 SQL Server stored procedures. To explain in a non-geeky (if that’s possible coming from me) way, I had to comment out a common line in all 25 procs that needed to be disabled in order to use the proc in my test system. (OK, that failed only slightly in the non-geeky department.)

I’ll be the first to admit that once I get focused on solving an issue, it pretty much consumes my attention, to the point of near obsessiveness. This was no exception, with me getting more and more worked up as attempts to automate this change (rather than cracking the code open on all twenty plus one at a time) failed. Finally I threw up my hands in disgust and walked away, having undoubtedly raised my blood pressure a notch or two in the process.

A short time later, it occurred to me that most of what I was trying to accomplish was completely outside of the work necessary to accomplish my pre-stated goals for this project. In effect, I was trying to change twenty plus bits of code, when this particular effort required just one change. Yep, you heard me, just one. So why even make the attempt to automate the process?

I suppose it’s mostly because I’m a lazy coder by nature; if chances are better than 50-50 that I’ll need to repeat some action in the future, I’ll probably at least take a stab at scripting or otherwise automating the process. Plus, in this case, it presented a worthy challenge, which is always more than enough to entice me into jumping in over my head. I’m a sucker for challenge, almost to the point of it being a character flaw.

In hindsight, perhaps if I’d stopped at the onset and thought things out in a rational, methodical manner, I would have saved myself not only a brooding headache, but almost two hours of time as well. Two hours. Think of all the things you could get done in two hours time.

Next time, I’m going to follow my own advice, and make sure I properly define what my work is going to be, lay out all the time and effort needed, and only then consider adding scope to my plate. Sure, automation is a wonderful thing, but only when used with discretion. Spending two hours to avoid doing something that ultimately took around 10 minutes to accomplish manually just isn’t worth it.