Archive for February, 2008

the software stability curve

February 8th, 2008

It's always fun to start coding something from scratch, because it has no faults yet, you get a clean slate.

Being there from the beginning of the software life cycle also means that you see the whole thing up close. Baby's first steps, first school play, it's an adventure. I've noticed something that happens to my perception, though.

In the very beginning I have a clear vision of what I want to do and how I'm going to realize it. But the code isn't there yet, and the code that has been written up to this point isn't ready either. So when I'm coding and testing I find a lot of bugs. Some are things I didn't realize at the outset, and some are just errors in bad code. Both get fixed, but in the throes of this process I'm very in tune with how raw this thing still is. It's unstable: push it two inches beyond where it's supposed to be and it self destructs.

At this point I'm excited about the project, because it's new and I'm in the middle of it, enthusiasm running high. But I'm also conscious of how unstable it is presently. So although I'd like to, I'm not eager to give it to people. I don't want to expose them to this that I very well know is unlikely not to crash while they use it. I want to protect them from that. I also don't want someone to come back with a desk and bash me over the head with it. It's great, it's just not ready to be used yet.

The perception also depends on the type of bugs I find. There are both incidental and structural bugs, although the latter feeds the former much of the time. If I've coded a similar kind of thing before, I probably did something really stupid the last time, and I may have learned from that. Unfortunately, the space of mistakes is huge, so by the time I've exhausted all the mistakes and I'm guaranteed that from now on I'm not making any more, I would have aged considerably. But at least I can get it right when I'm starting with a clean slate. That or I can hack it up and redo the structure if I'm not too far into the process yet.

So when I'm in the midst of development and the code is visibly unstable, it sometimes feels like this is not only the current station but also the final destination. It's always going to feel like this.

But over time something unexpected happens. I run the code 50 times, it crashes 3 times. When I start to close in on feature completeness and say 80% code completion the code actually starts to be dependable. Structurally the system is almost ready, and what remains is to fill in the blanks. If the structure is decent the incidental bugs start dropping off too. So it's turning into a piece of code I can actually use, just what I had in mind in fact. :cap:

Without quite knowing when or how I begin to gain confidence in the code. And when I bounce off a few pieces of bad input and a couple of unforeseen scenarios get handled gracefully, my mood almost points toward celebratory.

I know I promised you a curve. Well, I lied, I don't know what the curve looks like. :P But it's there, be sure of it!

King Rat

February 1st, 2008

When I was 15 I spent a few weeks at a camp in the summer. We were sailing. Up in the top right corner of Poland there's a region called Masuria, a region of lakes. It's pretty much the only place in the country you really wanna go sailing. It's vast and quite uncontaminated by urbanity and worse: industry. You'll find small picturesque towns scattered between the lakes and the way of life is to stay on the lake most of the day and set up shop at night in tents.

So where was I going with this? Oh yes, sailing is fun, but it's hard to fill 14 consecutive days to the brim with it. There was a lot of down time, and plenty of boredom as well. I didn't know any of the people and I felt quite alone. I was also the youngest. There formed cliques, but I wasn't in any of them. I shared a tent with a guy who was 18 and we didn't fraternize. And anyway he was busy with his girlfriend.

Toward the end of the camp it got a little better for me. I had nothing to do, but I noticed my tent partner started reading a book he'd brought with him. I wasn't big on reading back then, but when you're that bored, a book will do nicely. One time he was out I got curious. It was a nicely bounded volume and I started looking through it, reading a few words out of the middle. The characters appealed to me, I kept on reading. Before long I was caught up in the book.

I guess my tent partner was a little put off, but well he knew I had nothing to do and most of the time I was indeed not doing anything, so he just let me. Anyway, it was his book, he could read it anytime, and his girlfriend was more interesting to him. Somehow word got around that there's a good book in the camp and several people got interested. The camp was coming to a close and I started to worry that, especially with this new interest, I wouldn't finish it. But despite the hype I kept on reading it pretty much all the time, and most people aren't the type to rip an item you're holding out of your hands, so I was in control. On the trip back from camp I finished the book with about 2 hours to spare.

Unfortunately, I forgot the title and years later I remembered the incident and tried to figure out what it was. That turned out to be harder than I expected. All I could remember was that it was a story about prisoners of war held by the Japanese during World War 2. And I vaguely remembered the title, but not accurately. I also didn't know what it would be called in English.

At one point I thought it might be Lord of the flies, the title sounded close enough. But that turned out to be a children's book, and a bad one at that. Eventually I tracked down the story, called King Rat, which is a literal translation of the title in Polish.

I read it a decade ago, and when I read it today the story is still captivating. It's a tale of Allied troops being held in a POW camp in Singapore during the war, under strict Japanese rule. Their living conditions are difficult to imagine, and prisoners have regular afflictions of fever and disease, those that are surviving. Food is scarce, drugs are lacking. They know nothing of the outside world, nothing about how the war is going, no news of home.

These are the circumstances in which survival is a privilege. From a sociological point of view it's almost like.. a controlled experiment. Prisoners realize they cannot survive alone, so they form groups of 2 of 3, accomplices they can trust, and take care of each other. They share food, help the sick, and look out for trouble. Everyone is putting some food aside just in case it might get even worse.

And this is the world of the King. A lowly American corporal is the one man who knows how to survive, nay how to live, in these surroundings. The only one not malnourished, the only one not diseased, the only one not clad in rags. He is.. a business man. Those prisoners who have somehow managed to hide their last possessions are keen to sell them when they have no other choice. Watches, jewelry, things that can buy a wealth of food to last weeks. The King is the only man who can arrange such a trade. He trades with the outside, clandestinely. The Japanese overlords strictly forbid it.

And this is the gripping story of a not-so-distant past.