... indistinguishable from magic
effing the ineffable since 1977


Show All

Recent Posts


Sleep Deprivation


I've noticed a strange symptom when I get sleep deprived: I start getting silly in stuff I type. It's curious because it really does seem to be limited to when I'm expressing myself textually - I'm perfectly normal (at least as much as I ever am) in person or on the phone. Last night I was up until 4am finishing some stuff for work and up again at 6:30am. This morning I was writing one of my ubiquitous TODO lists trying to pin down the steps to implement a particular cmScribe feature. The approach I had in mind at the time left some user actions open that could cause problems, and I couldn't figure out how to implement restrictions that would prevent them (doesn't seem silly so far, does it?). After a little brainstorming I had a "Eureka" moment when I realized that a different approach would avoid the problematic scenarios altogether. I immediately noted the revelation in my TODO file thusly:


After a moment's pause I amended the note:


You probably need to be a parent of young children to get the reference, I'm afraid. In the end after a little research and discussion it was determined that actually, the feature that led to all this hilarity didn't actually have any practical uses, so my great insight was entirely wasted. Awww pickles.

On another similarly sleep-deprived occasion I sent an email to a client to report finishing a troublesome feature. The email began "It's alive! IITT'SSS ALLIIIIIIVVVEEEE!!! Ahem."

There have been other examples of the same thing but I can't remember what they were. Maybe I'd be able to remember if I'd had more sleep ;)


API design, part 2

When faced with the task of designing APIs for a problem that has a lot of inherent complexity, an essential first step is to design exactly how and where to hide that complexity. I was recently faced with the need to redesign an API that I'd created before I learnt this lesson, and I think I did a good job of it - the complexity is almost entirely hidden from users on both "producer" and "consumer" sides of the API.

However, in the process I've learnt another essential, if (in retrospect) obvious lesson: Just because you've figured out how to hide the complexity doesn't make the complexity go away. Implementing the code that actually does the hiding is still complex, probably even more so due to the need to provide the illusion of simplicity. Forget this at your peril!