Focusing my development effort
Long time readers of my blog already know about my tendency to get carried away with stuff. I’ve got carried away with something in the past, just to have to retract the following day. The second post mostly deals with this tendency to get carried away. To sum up: I don’t think the lesson I need to learn is “refrain more”, as that takes away a lot of the energy as well – “learn to acknowledge my mistakes happily and as early as possible” seems a much more valuable lesson for me. And that applies in many other fields.
I’ve also talked about my inability to write short blog posts, and failed miserably to do so almost systematically in the past.
Anyway, to get to the point, this (of course) also applies in my dedication to development. I tend to drift off too easily, especially when the goal involves developing a complex piece of software like NGEDIT. Although I’ve posted in the past about my strategy in the development of NGEDIT, I find that I have to revisit that topic really often – mostly in the messy and hyperactive context of my thoughts, but I thought I’d post about it as it may also apply to other fellow developer-entrepreneurs.
I recently posted about how I had found out the best way to focus my development efforts on NGEDIT. To sum up: try to use it, and implement the features as their need is evident (I’m fortunate enough that I am 100% a future user of my own product). As the first point coming out from that, I found myself working into getting NGEDIT to open a file from the command line. That’s weeks ago, and I have only almost implemented it. How come? It should be simple enough to implement! (At least, given that opening the file through the file-open dialog was already functional).
Well, the thing is that my tendency to drift off, my ambition, and my yearning for beautiful code kicked in. Instead of a simple solution, I found myself implementing the “ultimate” command line (of course). It’s already pretty much fully architected, and about half-working (although opening files from the command line ended up being just a small part of the available functionality). As I did this, I also started refactoring the part of the code that handles file loading into using my C++ string class that doesn’t suck, which is great, but it’s quite an effort by itself. Meanwhile, I found myself whining that I didn’t want to have all that code written using the non-portable Windows API (as a shortcut I took before summer, NGEDIT code is uglily using the Windows API directly in way too many places), so I started implementing an OS-independence layer (I know, I know, these things are better done from day 1, but you sometimes have to take shortcuts and that was one of many cases). Of course, with the OS-independence layer using said generic string class for the interface. And establishing a super-flexible application framework for NGEDIT, which was a bit cluttered to my taste. And sure, I started trying to establish the ultimate error-handling policy, which took me to posting about and researching C++ exceptions and some other fundamental problems of computing…
If that’s not getting carried away, then I don’t know what is!
Today’s conclusion, after going out for a coffee and a walk to the cool air of the winter, is that I should refrain from tackling fundamental problems of computing if I am to have an NGEDIT beta in a few months’ time. The code of NGEDIT 1.0 is bound to have some ugliness to it, and I need to learn to live happily with that. Even if I will have to rewrite some code afterwards, business-wise it doesn’t make sense to have the greatest framework, the most beautiful code, and no product to offer!
In any case, I hope I have improved my ShortPostRank score, even if definitely not among world-class short-post bloggers, and you can see I’ve had some fun with self-linking. Something nice to do after starting beta testing for ViEmu 1.4, which will probably be out later this week.
November 25th, 2005 at 3:28 am
we code very much a like. this strikes me often after reading your post. one thing that keeps me sane is, is thinking terms of a service architecture with multiple functionally aggregated apis. so when i divert to do some intermediary task, i get that missing api in place – even if just choosing the method names and interfaces, but only implement whats necessary to complete the actual issue in the issue tracker. so i end up with these ‘intended’ service apis to backfill later. that way i feel like im still doing the best thing to get beautiful code while minimising the diversion.
November 25th, 2005 at 8:01 pm
Cool. Do you also hate many parts of programming as I do? That would be even cooler! (honest)
You’re suggestion is sensible, and I apply that often – what I often find, anyway, is that designing the interfaces (and especially with the more complex ones involving templates or whole subsystems) is the most work!
Implementing single features is a breeze, and implementation becomes a problem when it requires reorganization of the code, and together with that, designing sensible interfaces…
I’m glad anyway that someone else shares the pain – I can’t stand the programmers who actually actually enjoy the process. (just half kiddin’…)
Good luck with your endeavors!