Building vs Maintaining

Note: This post doesn’t really go anywhere or draw any significant conclusions, but is more a follow on from my previous post and an observation of the way I look at the process of developing my site, so if that kind of navel-gazing annoys you, you’ll probably want to click away right about now.

In theory, I guess you could regard this website as “finished”—at least as much as any website is ever finished—in that it (mostly!) works (i.e. looks and behaves) the way I want it to right now, but there’s probably always going to be something that I need/want to do. It’s very much a case of theory ≠ reality and working ≠ finished.

When I wrote about why I built this site in the first place, I mentioned the downside of “not being a professional” and how that translates into my perceptions of fragility around the code I write. But that’s fine, after all, one of the goals is to learn to write better code by actually writing code. The more I learn, the more I realize that from both an architectural and functional perspective, I’ve done some Pretty Dumb Shit.

I’m cool with all that; making mistakes is part of the learning process. But along the way, I’ve come to realize that I enjoy the process of building things far more than maintaining them. The upshot of this is that some of those things probably aren’t going to get fixed, even though I know they could/should be. I’ll note that this only really applies to non-essential or non-security-related things… those I try to get on top of ASAP. But when it comes to a more elegant way of structuring a view in Django, or a more efficient way to build a query, or a simpler way to achieve a given outcome, I tend not to get to doing anything about it, at best, I’ll do it differently the next time I rebuild from scratch, which I tend to do every so often; see above re: building vs maintaining.

A large part of my problem is that I tend to build without a plan. I have an idea—”I’d like to add X to the site”—then jump in and start messing about with stuff until I have X working at least approximately how I’d envisioned it. Yes, this gets me to where I want to be, but it often makes for a less-than-optimal implementation. I’m basically creating some significant technical debt for myself right from the beginning.

For the functionality that lives exclusively within the boundaries of the site, this is also fine. But when it comes to functionality that has external dependencies, like Webmentions and Micropub, the shortcomings in the way I’ve done things start to become very apparent. In order to be able to implement these things, I am having to go back and take a look at the way I’ve done things and make them work differently so that I can move things forward, which has slowed the pace of progress significantly. And as I’ve been picking up little bits and pieces along the way, I’ve also been engaging in quite a bit of “yak shaving” which has slowed things down even more.

I think that’s where this process is starting to fray my patience; having to spend time re-building things that are already “working” rather than doing something additive. And because this is a hobby that I do in my free time, there’s a bit of a sense that I’m wasting that time. Rationally, I know that’s not entirely true because I am picking up additional skills and knowledge, but it does feel like a lack of forward momentum.

This is most definitely a problem of my own making, but being aware of that doesn’t make it any less irritating and that irritation is compounded by the fact that I’m not sure that, in the short term, I’ll be able to take too much from knowing this or modify my behavior right now; I simply don’t know enough yet to make the better architectural choice or write better code from the outset. Pragmatically, I think I just need to make peace with the idea that I’m going to have to get used to fixing and maintaining things rather than constantly starting over if I want to make actual progress.