A Comfortable Couch

Tuesday, August 10, 2004

What's this blog all about?

Short Concise Version

Man realizes he's unhappy at work.
Man finds project he is interested in.
Man and family decide to live off savings while man works on project.
Man isn't sure how he'll make money from it.

Long Windy Version

I was laid off from Kubi Software a few months ago. It was a blessing, because I wasn't happy there anymore and because I got 1 months severance. Woo Hoo!

But then, I really I didn't want to go back to work for a company again. When I work, I put my heart and soul into it. I want to build something great, something that will last. I realized I'm sick of trying to build it faster, shoving in more features when the ones we already have don't work, fixing problem areas of the code with duct tape and bubble gum, never having that feeling of pride in your work. You know, the standard stuff.

I realized what I really wanted was some real control over my next big project. If I'm going to be spending years building something, I have to do it my way. I'm not so concerned with what I'm building, so long as there are real challenges and I can build it right. Building it right to me means:

  • It must have solid design. Solid design means that if its implemented flawlessly (which is impossible) on a flawless system (which doesn't exist), then the software never crashes, never loses data, and always does what its told. If thats not the case then you have a flawed design, and no matter how great a job you do writing the code, it will always be buggy. This is fine for others, but not for me.
  • No deadlines. The software isn't done until its done. Yes, I know that lots of software projects will never be a success in the marketplace with that kind of thinking. I don't want to work on those projects.
  • The code is well written. Now this might seem like a "well duh" requirement, but so often there are important areas of a project where the code is just plain shaky, even with really good engineers writing the code. Why? I'm my experience the biggest reason is looming deadlines where there is only time to add more duct tape and bubblegum rather than stepping back and fixing it right. Do this enough times and you have a unmanageable mess, and then the cost of fixing it right is much much higher but the deadline pressures still remain. There are other reasons, of course, like engineers who just don't care about good engineering practices. Whatever the reason, poorly written code sucks.
  • No outstanding bugs. When bugs are found, you fix them, right now. If you can't find the bug, you keep looking. And looking and looking. Once, while working on the Domino database team, I spent weeks on a single bug. I was the third engineer to get assigned the bug. It was the classic Heisenbug, it only showed itself when you weren't looking. I used all sort of techniques, examining call stacks and memory dumps, adding ASSERTs, adding extra logging code, and code review, code review, code review. I found several other bugs in the code, but the Heisenbug eluded me. All my work narrowed down where the problem area was, but not the actual problem. Then I just reviewed the code until I couldn't see straight. When that happended I would work on some other bugs, then come back to the Heisenbug. Three weeks it took me. Then one day, after reviewing the same strip of code for the zillionth time, I found the flaw. It was due to a struct assignment where some of the members should have been nulled out after the copy, very easy to miss. It was a eureka moment, I was beaming that I had found it. I certainly saved our customers a lot of headaches and probably saved the company lots of money in support costs. That feels good, sort of. But I was most happy the flaw was removed from the code. I still smile thinking about it.
Then there are the things that just plain make me happy. If I'm happy, I'm productive:
  • I do it my way. I don't mean ignore the requirements and just work on stuff you find interesting, although that sounds like fun! I mean instead write the code that implements feature X the software the way I want to. Things like using scheme A instead of scheme B, simply because its more elegant to me. This isn't super important, but it makes a person feel good.
  • I work when I feel like it. Or to put it another way, if I can't concentrate for any reason, I go home and do something else. Fly a kite, watch TV, play basketball, whatever. Then I come back refreshed and clear headed. Obviously you can't always do that, there are meeting and stuff where its important to be there at a certain time, but otherwise, why not? During one of the most productive periods of my life I had a boss that didn't care when I came or left. Some days I'd say I just don't feel like working, and it was fine. I was happy and extremely productive.
  • I work in a quiet office with a door that closes. Cubicles suck. Read Peopleware. No really, if you haven't read it yet, make it the next thing you read. It’s a real page turner (I'm serious) and it has so many insights I can't believe I didn't read it sooner.
  • Its got to be challenging. I like working on tough problems. Tough problems are the kind you aren't sure you can solve. They're scary, but also exciting. Otherwise, whats the point? This is probably my biggest requirement of all.
So, where can I get a job where I can do all these things? I once had a job at Iris Associates that came pretty close to most of those requirements. We were owned by IBM, but still a separate corporation with its own policies and benefits. It was pretty great. But then IBM decided to make it just another IBM division, with IBM policies and benefits. We had IBM execs address us a big company meeting, they said things would change much, that they were doing because they could save money but everything would stay the same, we'd still be able to work unencumbered. They either lied or they believed their own BS. Either way, it was clear IBM was clueless as to why Iris produced like it did. So I left for Kubi which, while better than IBM, wasn't even close to the old Iris. I think places like SAS Institute, Google and maybe Apple are great places to work, but how can I get a job there? I've sent in my resume to those places, and nobody even calls me. Why? Unless you know someone already there, the only way you're going to rise above the noise is if you cured cancer or something similarly great. They simply get too many puffed up resumes.

Then one day I was thinking about the Google File System (yes, those are the types of things I like to think about). It's their internal file storage system, and its a big part of why they can keep a cache of nearly every page on the internet and give a gig of storage space to users of their free email service. I read some interesting things about it; how it was highly reliable and scalable, yet built on commodity hardware (cheap PCs). I kept thinking about how they might have built it. The technical details fascinate me. Then the bright idea hits me, why not build something similar?

Writing a highly reliable, super scalable file system is just the sort of technical challenge that gives me brain-wood. So many problems to solve, so many things to learn. I couldn't stop thinking about it, I had to build it!

But no one will pay me to build it. I have good reputation in the software industry, a lot of people I really respect think pretty highly of me, but not high enough to pay me to write it my way. Few people do have that clout, and I'm not even close.

And the Venture Capital route is fools gold. Taking VC money is like selling yourself, you work for them now. And they will want it built as fast as possible so they can sell out quickly. And yes, they will fire your ass if you don't do what they say. They don't care about you, your dreams, or building something great. They care about making money, and they think they've found the formula for assembly line innovation. Unless you already have something really impressive to bring to the table, you'll get their money on their terms. And that means they are in control.

And while I do have a fairly good, although somewhat narrow, background in the distributed systems, I don't know beans about writing file systems. There is a lot to learn. But I'm quite confident in my abilities; I know I can build it given enough time. But who will help me make my dreams come true?

(pause for crickets)

I know! I know! ME! My wife and I will sell our house, move back to Charlotte NC where our families are and the cost of living is low, and live off our savings while I build. it Oh man! That's PERFECT! I can learn a ton. I can build something useful. I can build on my knowledge in one area and learn a ton about another area. I can do it my way! Its so simple! Oh... wait... there is the pesky little problem of earning a living. When the money runs out, then what? I don't know. And I've decided I don't care. When its built, then I figure out what to do with it. Until then I just want to build it, the right way as I see it.

That's what this blog is about. A guy building something because he wants to bring a creation of his making into the world. Getting paid is a detail to be addressed later.

2 Comments:

Jake said...

Brave. I too have an idea without backing and hope one day to have a product. I too am doing it at my own pace and refuse to get outside investment. I don't pretend to be a developer anywhere near the level of your expertise, but I have had some money people (small order, but money people nonetheless) sniff around me and my idea. One more similarity: I've been doing Notes/Domino related development since '97.

My nascent idea blog: http://atom_shmooze.blogspot.com/
My ramblings: http://gimleteyes.blogspot.com/

Good luck!

7:18 PMlink  
Anonymous said...

Hi,

Check out this place: http://www.osr.com/

Good luck.

10:04 PMlink  

Post a Comment

<< Home