Aside from the obvious connotations of the title, I’m actually talking about real cuckoos here, or rather, cuckoo clocks.
Ages ago, just after we first bought the house we’re in now, I was clearing out the attic space and happened upon an old cuckoo clock. This one was labeled a Schatz 8-day, and I’ve since learned it’s a pretty common German cuckoo, probably from the 50s or 60s. Not really a collector’s piece, but interesting none-the-less.
Of course, there’s no telling how long it had been in the attic before I found it, and, not having time or inclination to do anything with it, I stuck it on a high shelf in the garage and promptly forgot about it. You can see it in all it’s glory as I found it in that first picture.
Flash forward to a few weeks ago. I finished out a second contract with a law firm, doing MSSQL Server tuning and optimization, and had some time, so I decided to clear out the garage.
Lo and behold, that cuckoo was still up on that top shelf. Dusty, but otherwise just as I’d found it almost 7 years ago.
The Old Code
Obviously, it was missing some numerals. The hands were so brittle they snapped when I tried to adjust the time. One of the birds on the front piece was gone, no idea to where. The chains were utterly tarnished. The mechanism was completely dusty and grungy. And the bellows (the parts that actually make the cuckoo sounds) literally disintegrated when I took them out and tried to test them.
However, the mechanism appeared to be all there. Both bellows were there. Both weights were there. I still had the chains and the backplate with the chime, so there were lots of positives.
Refactoring
The first step was getting the mechanism out. Pretty simple, really. The bellows needed to be removed, but they were held in with a single screw and a set nail. The mechanism itself was held in with 4 small screws.
I blew it out with an airgun, but it became clear it needed a full on cleaning. After a little internet research, I found that clock cleaning solution is essentially water, ammonia, and Murphy’s Oil Soap, of which I had all three. Mix it up, soak the mech for a few minutes, wash it out thoroughly and the mech was looking almost new.
Next, I got online and found a clock store that sold virtually identical parts. 10$ later and I had on order paper for bellows, replacement numerals and a new pair of hands.
Repapering the bellows looks hard, but was quite straightforward. You just have get the folds in the right places. And some glue and clamps later, the numerals and hands were back on and looking MY-T-FINE…
The Build or Buy Decision
At this point, the only thing left was that bird (or lack thereof). I found an auction on eBay selling a virtually identical bird, but at the last minute, I got caught up in, well, life, and completely missed the auction completion. Doh!
Tons of searches and even emails to clock shops turned up nothing. It was becoming clear that this particular decision was being made for me.
Proper Object Inheritance
Obviously, I needed a new bird almost exactly like the original, but in reverse. So, trace and reverse to get this.
I didn’t have any linden wood (the typical Cuckoo clock wood), so some clear pine would have to do. And my carving toolchest is a tad limited.
Unit Testing
After a few hours of grinding, whittling and chiseling, I ended up with this.
This was a good enough result that I decided to continue on with the project and finish it out. I had to pick up some modeler’s paints, but I had an airbrush, so I was good on that front.
“Good enough” Engineering
The final result came out pretty reasonable. Not a perfect match, but close enough.
Post Mortem
So, what does rebuilding a cuckoo clock have to do with developing commercial software?
More than you might think. When you look at cuckoo clocks, or really, mechanical clocks in general, you really come away with the strong conclusion that clockmakers back when were the engineers and programmers of their day. Looking at the complex system of gears, the escapement, and the cams that drive the bellow lifts and gong ringer, it’s not too hard to see a system of subsystems, inputs, outputs, and programmed behaviors.
As programmers, we spend a lot of time staring and computers and wrestling with the bleeding edge of technology.
Sometimes, it can help put things into perspective by wrestling with a bit of 1700’s bleed edge technology.