cleaning up your own mess

dimanche, 18 février 2007

one of the interesting things about doing a ground-up redesign of spendthrift is that i get the opportunity to reflect on the three years of its existence and the numerous poor decisions i made in its construction. it's bittersweet, because i obviously did a few things right, since thousands of people have used it, and my usual self-deprecating nature aside, a lot of them probably still do.


it had been nearly a year since i'd done serious work on it, up until recently, when i threw myself headlong back into writing version 3. i came back from work in the evenings and had other things that occupied my attention, including just plain being fried from work and wanting to fire as few synapses as possible. lately, though, work's been slower and i've needed a distraction. it was enormously gratifying to pick up working on the program again and remember almost everything about objective-c and cocoa; i refer to the documentation less and less each time i start writing again. not to put too fine a point on it, but it makes me feel smart, which is nice, since most days i do not.


but that last statement is somewhat funny, considering part of what makes me feel smart is fixing all the things that i did in a time where i was not so clever. it's interesting to list out all the things to do (i have a bulleted list of features and requirements that i try to stick to; it's possible that work designing a medical device has rubbed off on me some) and look at what has been done and what hasn't, and how i've approached it. fairly large chunks of functionality were left until late in the game (i.e. this weekend), because, well, i'd been putting them off. the way i work is to attack something difficult, like saving files, or whatever, and then coast for a while, fiddling with the preferences, or the about box, or some other nonsense.


and difficult usually means that it was a pain in the arse for me the first time around. and if it was difficult for me two years ago, it probably also meant i had made some really reprehensible decisions that i was either already working around, or now have to undo. in most cases, the size of the code decreases greatly, and i recoil in horror at what i did and pat myself on the back for coming up with a better way. in other cases, i did something that affects the file format, which i change only as a last resort, largely because forward-compatibility handling is so difficult.


for instance, today in the scheduled-transaction handling system, i found that i'd represented the last date a transaction was handled in a completely asinine way that made it impossible to compare in a meaningful way, and impossible to really complete the functionality that i implemented two years ago (since i never use these myself, i didn't realize how lacking it really was). so not only do i have to come up with a new way to do it, i have to find a graceful way to fix old mistakes with as little inconvenience to the user as possible. so while i am pleased with myself for having fixed it, it was dumb of me to put myself in that position in the first place.


and that brings up a more delicate point, which is the responsibility i assume in releasing a program like this. i've heard from a little over a dozen users who've had the program crash on saving and corrupt their account file. i hate that i couldn't do anything about it. i can't obtain their files due to the nature of the data, so all i get is crash logs and console output. i test out my files on my system, do every goofy thing i can think of, and i never saw it happen. i use spendthrift nearly every day, and haven't ever run into it. but i feel for these people; they trusted me to some extent and i let them down, and it hurts me personally, but this is the major reason that i give away a reasonably complex and fully-featured software as 'postcardware'. if they paid me for it, there is always the possibility of a problem that i just don't know enough to fix, and a certain warrant of usefulness of the software is implied, one that i may not be able to fulfill.


this time, of course, the design of the software is significantly streamlined (the size of the code is noticeably reduced, as i said), and there are fewer places for things to go wrong. and i'll need to be more patient and thorough with testing. hopefully i'll earn and keep the trust of new users, and win back the trust of old users who may have had trouble. and maybe get some postcards from some new and interesting places.

comments
post a comment




Remember Me?