The vibe this week: hunting down obscure problems.
While I've been going through profiles of bizarre performance behavior one agonizing step at a time, the Twisted Matrix server has been on the fritz.
Exarkun is at the facility right now, taking the server's case off, poking the components with sticks, and generally abusing it. Right now we're thinking maybe it's a problem with the CPU fan, but since it starts off spinning at 4000 RPM, it seems unlikely that it's the fan itself that's broken.
In particular it was an epiphany about the YAGNI and DTST rules. I always assumed, based on the examples that were given, that the rules were meant to say "keep it simple, because that's probably good enough anyway". In other words, if you are sure that the simple approach isn't going to work, if your customer requirements include stuff outside the scope of the simple solution, you should use a more complex solution until you can encompass all the requirements. It should be no more complex.
Ward seems to be saying that this is wrong: that the goal is not to arrive at the simplest correct solution, but to arrive at the simplest solution that moves you forward, even if you know it's wrong. In fact, especially if you know it's wrong. Because you're going to arrive at the wrong answer multiple times anyway, it's very important that those answers be simple. Even if you can see deficiencies in your solution as you're implementing it, it's better to complete it quickly, put it in front of a customer, and determine experimentally whether the deficiencies you've spotted are as important as those the customer spots.
What I'm taking away from this article is that the key thing is release velocity, not correctness of the implementation or completeness of requirements analysis. The customer will change their mind. The estimates will be wrong. The only way you can compensate for this is by making changes cheap. The only way to make changes cheap is to practice making changes, and the only way to get practice is to make a lot of changes.
Being a drinker of XP kool-aid for quite some time now, it's funny how this still seems so counterintuitive to me. Looking at it sideways, though, it's a really distilled worse-is-better, with a much more narrowly-defined definition of how to "win big".
So, what do you think? Does "you have to do it wrong before you can do it right" sound like an accurate aphorism, or am I distorting Ward's words?
Today was my first real full day off in several months. It was great. The fact that my computer has stopped freezing up didn't hurt my mood, either.
I've had many (far too many) days where I didn't work over the last year, but most of them have been quickly soaked up by moving, or coping with various unfortunate events. Today I got in some actual relaxation, and with it some much-needed time to reflect.
One of the things that I've realized is that my 5-year separation from Ying has given me an intense appreciation of fairly banal activities. For example, cooking ramen, making a grocery list, and setting the table are not things that most people would consider "awesome". I imagine that soon, some of the novelty will fade. However, after years of feeling kind of stuck in a situation (and the last few months, that feeling has been very intense), it's really noticeable how much basic things like that give me a feeling of control over my environment.
Having Ying here is certainly the bulk of this feeling. Leaving out the bumps along the road, being apart when I was in school was sort of normal, an opportunity to prove that I was serious about our relationship. Being apart when I moved to Jersey was unfortunate, but a necessary part of my life's path. While I was at Origin, it was a quest. By the time I was at Ninjaneering, the distance was a constant ordeal. When I finally got here to Cambridge, it was a cosmic joke. So, now that she's back, there's several years worth of weight lifted from my daily concerns. I no longer need to figure out how and when I'm going to get across the country, or drag her. I see her every day - it's only been a week of this so far, so my subconscious hasn't fully accepted that I'm not on some kind of trip yet, and I'm not going to be returning to somewhere else...
There are other things, too, though. After years of eating at my desk, I have a table specifically for eating. Ying doesn't notice anything particularly positive about this, since her family would routinely eat in different rooms, but something from my childhood makes me view it as a sign of being well. The only times I'd eat in my own room as a child was when I was seriously ill or one of my parents was. The fact that as an adult I mostly ate by myself was when I was depressed didn't help.
This post is more rambling than I thought it would be. The point I'm trying to make is - I know many of you out there in internet-land have been worried about me. I'm doing much better. Not only am I much better, but I'm appreciating the fact that I'm much better.
Maybe the best thing about being back in a relatively sane situation was that the dramatic increase in my mental health has enabled me to fiercely concentrate on my work. I was starting to have real fears that I'd "lost it" in terms of getting productive coding done, and that the rest of my life was going to be a constant bitter struggle to force a few LOC out of my ten daily hours with emacs. If anything being depressed was more to blame for my slowdown than I gave it credit for; I've been able to consistently sit down and do something useful every day this week.
You know, "handwriting on the wall" might have been a better title for this blog.
Yesterday kazekage continued to crash unpredictably (twice in the middle of work) despite numerous tweaks to the kernel command line and several recompiles.
I think I've got it fixed, but who can tell? It ran for 24 hours yesterday without crashing, then crashed every 2 or so for a while. The IDE cable (which has now been thrown out) was probably not bad, but the one I'm using now is 40-pin, so I need to get a new one.
Also, while Ying was driving my car yesterday, the right rear tire blew out, fomenting yet another unexpected expense and inconvenience. At least she got it the tune-up that it needed.
So, the KVM appears to be not a total disaster. got a 2-port as well. When I first set it up the ghosting was so bad that my monitor couldn't autoconfigure, but some jiggering with the cables and monitor settings got it to acceptable parameters. It just so happens I had gold-plated monitor cables in reserve which fit the requirements of the new switch (M2M) and enough type-A USB connectors to get up and running. The gold-plated cables seem to produce visibly superior results to my old KVM, even though this is not such a well-reviewed one.
That's my theme for today: no total disasters. I think it's working out.
(By the way, did I mention that did a cool little case detail for me? I'll update with a photo later.)
I just moved my office out into the common area in the apartment. Now ying and I can work at the same time without constantly bumping into each other every time we turn our respective chairs.
Of course, nothing is allowed to go well right now, so my KVM switch broke in a completely inscruitable way as soon as I was finished moving things. Also, the cheapo network card I bought because the nvnet driver would have been a hassle turned out to be an 8139D rather than a normal, working, 8139C. This despite no external difference on the packaging since the last card that bought. She was nice enough to lend me her network card for the interim, so I am now posting this from the newly-reborn "kazekage". (For those of you following along in the book: the last machine's name was "orochimaru".)
Luckily the new, optimized network setup works just fine: I took out my old 10/100 switch so that I can transfer files between machines again at full speed. When we get tandem ('s desktop machine) hooked up to the network again, we should be able to effortlessly send anime episodes to each other.
Tomorrow I will try to pick up a new KVM, since VoIP is on windows, pairing tools are on MacOS, and development is painfully slow on everything but linux. Hopefully with the additional purchase (exchange, really) of the network card for 's machine, that will be the end of technology-related disasters for the moment.
Generally things are going great though. The apartment is really starting to be livable. There was actually enough room in the living room for me to move my workspace in there, which is saying
Since so many of you were asking, this is why I had to buy ski goggles today.
In keeping with the at-least-one-catastrophe-per-day theme of the last month, today had a pretty severe allergic reaction to what appeared to be a feather stuck to her eyeball. I couldn't make stuff like this up if I tried.
Since she was having a series of reactions from cleaning up some of the stuff that's been lying around here collecting dust for months, we decided that she should probably have some kind of eye protection. At first, we thought a scuba mask, but we have no plans to go scuba diving any time in the next millennium. However, sometime around the heat-death of the sun we may make some time to go skiing in the nuclear winter. So, ski goggles it was.
In better news, the apartment is getting a lot cleaner. Ying cleared out a lot of the major stuff which I am too much of a wimp to throw out myself, put it in bags, and had me drag it outside. After that I stacked up several of the DVDs and CDs littering the floor, and now there is a spot almost big enough to twirl my arms around on the floor of the living room.
Also I managed to get a surprising amount of work done / bugs fixed this morning. One of the bugs which I was nervous about was not so bad. There are still waaaaay too many "I can't reproduce this under the debugger" or "it only happens sometimes" bugs for my taste, though, especially for a program which only uses threads in one very small segment of the code (which, thus far, has suffered from no such bugs).
(As you may have noticed, my LiveJournal subscription lapsed and now I don't have access to the page layout that I used to use. Sorry, but this will have to do for now.)
I'm back in the apartment in Cambridge, with . I'm very happy about that despite the following:
Orochimaru, my primary linux machine, is now toast. It was crashing sporadically before I left, and now it turned itself off while I was away and it won't even power on, let alone POST. I need to find a good bare-bones linuxable x86 setup on the cheap, very soon. (With an AGP slot.)
The toilet which flooded when I was in NY flooded again.
We have more laundry than we can do in about a week in our tiny washing machine.
There is no food, and there are dishes to be done in the sink.
Luckily there are things to be done about almost all of these things. I'll be shopping for a new linux machine tonight, and if I don't find anything quickly I'll probably order online - for the moment my Mac laptop will be my primary machine. The toilet didn't flood the basement again, just a small area in the bathroom. We're going to be taking some laundry to the cleaner's today to have our first massive batch done professionally, folded and all.
So, still one minor catastrophe after another, but things are starting to settle down. I hope to be catching up on work this weekend.