I've been in a bit of an "in between" state recently.
At work, I'm between projects.
Honestly, I'm often between projects. I rip through projects like a circular saw through pine. But I'm not just between projects, I'm between PROJECTS: with my team, we've arrived at the culmination of a five year effort to build and deliver a coordinated set of functionality that completely raised the bar for the level of usage that our product can support.
When I arrived at this company, we would talk about a 2,000 user installation as a large installation, and those installations were continually struggling; now we routinely talk about the problems of (simulated) 50,000 user installations, because our existing large installations, though they are five times as large as they were when I arrived, are just humming along, servicing massive user bases easily. In my field, there are currently no 50,000 user installations; an immense installation is 10,000 users, so we can support 5-fold expansion of our current installations, even if hardware doesn't improve in the meantime to save our bacon.
So, not only am I between projects, but the whole company is between projects. We're thinking about entirely different directions to take the product, which is interesting, but leaves me without a lot of concrete work to do in the meantime.
I want to talk a little bit about how you know that a project is done.
In my view, there are a number of indicators that you can use:
- You've gone through all your own checklists, the ones you keep on your whiteboard, and scribbled on pieces of paper and notebooks, and you keep finding that you've checked everything off.
- You've trawled your internal bug database over and over and over. While there are still items left, they are minor, and you look at the open bug reports again and again and notice that they were reported by you, and not ever observed by any customers
- Then, even after looking at those bugs for the tenth time, the risk of fixing them still seems higher than the reward of having it gone.
- You're continuing to write new tests and extend your existing tests, but the new tests that you're writing aren't finding any new bugs. Someone asks you a question and you think, "Interesting; I ought to write some tests in that area," but when you go to look, you've already got a bunch of tests in that area.
- People stop asking you questions about the project; importantly, they stop asking you "when will it do this?" because it already does that.
People say, "software is never done." This is true, but there is definitely a time when software is DONE ENOUGH; at which point, it's time to find a new project (but, I think, not a new company; just a new project).
Meanwhile, in my personal life, I'm kind of "in between" right now as well. My kids are thoroughly grown up. As recently as 6 months ago, they still came to ask me for help, or had problems I could help solve. But now they just take care of stuff on their own. In fact, they're starting to ask me if they can help me!
Another way that I've noticed that I'm "in between" is that I've reached that age when the medical industry is starting to view me as a growth opportunity. I'm still in fine health, but the doctors, and my co-workers, are warning me that I'm about to start devoting an excessive amount of time to allowing various specialists to poke and prod me (and charge my insurance company obscene sums). In fact, these "old man" pokings and proddings begin this month, sigh.
When you're "in between," you have to choose which direction to face. You can look backwards, because now there is a lot of backwards to look at, and a lot of things to think about in that direction. In fact, it's easy to look backwards, because you know what there is to see and you can choose things that suit your mood.
In software, this takes the form of sticking with an existing project for too long, over-engineering it, adding unnecessary extra frills and decorations, fixing extremely minor problems that just churn the software without improving it. It's, unfortunately, a very easy trap to fall into: you know A LOT about the existing software: you know where it has warts, little rough spots that you could smooth over, imperfections that could be removed.
But there's much more ahead. The brand new projects not yet embarked upon have much more potential, at long last, than the "finish coat" on the work left behind. I have ideas, big ideas, for projects to do, and places to go, and accomplishments to achieve.
I just have to get through this little "in between" part.