You’re reading Signal v. Noise, a publication about the web by Basecamp since 1999. Happy !

Jamis

About Jamis

He makes marshmallows and bow ties, plays guitar, and researches dead people. Sometimes all at the same time.

Cracker packaging

Jamis
Jamis wrote this on 33 comments

The first graham cracker company that produces decent packaging will win my loyalty forever. There is very little as frustrating as breaking every cracker in the package as a by-product of opening the package—especially when you’ve got a yowling one-year-old watching impatiently as you do so. The plastic envelope around each set of crackers is all but impossible to open cleanly, and you can forget about it being “resealable”. Once open, you have to resort to a plastic bag to prevent the crackers from going stale in a hurry.

I won’t go so far as to say how hard could it be?, but this can’t be the best possible solution, can it?

Saltines could definitely use some packaging love, too, but graham crackers are the worst.

Embrace real constraints, not artificial ones

Jamis
Jamis wrote this on 7 comments

I’ve been doing research for my RubyConf presentation on November 6th, and while digging through one of my old projects, I ran into an interesting bit of code.

The project in question was Needle, a result of a brief love affair with complexity. (This was before I met 37signals, and both 37signals and my wife have since forgiven me.) It was a fun project, but I added features because they “sounded cool”, not because I had any practical need for them.

Adding new features always results in increased complexity. (For some features, the added complexity may be fairly small, but there is not necessarily any relation between the perceived complexity of the feature and its implementation. That, however, is a topic for another dissertation.) In the case of Needle, I wanted (essentially) to be able extend objects on the fly, and I had two ideas for how to do this. In one, you specify an existing extension to append to the object. I called this the “with” approach, since the object is extended “with” another one. In the other approach, you specify an anonymous block of code to extend the object with. I called this the “doing” approach, since the object is extended by “doing” something.

Both sound cool, right? Yeah, man! Extend objects on the fly! Whee!

So I implemented both. The problem was that I couldn’t immediately see how to make both work together. What would happen if wanted to extend an object both “with” something, and by “doing” something? Adding the features themselves added complexity to the project, and I wasn’t willing to further complicate things by making the two features compatible, so I created an artificial constraint: the library would raise an error if you tried to use both features on the same object.

Now, constraints are good, and you should certainly seek to embrace yours. But creating artificial constraints because you’ve painted yourself into a corner is code smell, and the solution is not to accept your corner and wait for the paint to dry, it is to unpaint yourself out of that corner. In the case of Needle, I should have either worked harder to make the two features compatible, or removed one of them. (Or both of them!)

Ultimately, Needle failed because it didn’t fill a real-world need, and so its code is a graveyard full of things like these artificial constraints. Real projects need real applications. But complexity being what it is, eventually you’re almost certain to find yourself heading for that corner with a trail of paint chasing you. When you do, pause for a moment and consider whether this is a true constraint you’re embracing, or whether you can do with less complexity. Chances are, the prospects aren’t as bleak as you thought.

This is all related to a RubyConf presentation I’ll be giving in Orlando on November 6th, entitled Recovering from Enterprise: how to embrace Ruby’s idioms and say goodbye to bad habits. If you’re going to be there, do stop by and introduce yourself!

Beware of future creep

Jamis
Jamis wrote this on 22 comments

So, you’ve got your scope creep, and you’ve got your feature creep. Lately, though, I’ve been thinking a lot about a little gremlin I’ve been calling “future creep”.

Future creep is not about adding features to your products. At least, it is not directly about that. Rather, it is about adding infrastructure to your products in preparation for features that may or may not be added later. In the future.

This is really subtle, because it can happen even (or perhaps especially) when the feature list for a product has been frozen. So, sure, you can’t add any more new features for this release, but there has been talk about some new feature X being added eventually, and if you just tweak the code a bit here and here, and maybe there, the way can be paved for X that much more easily!

That feature X can be anything: a programmer interface (API), a drag-and-drop UI, element categorization, data export/import, batch processing, anything at all, anything that you don’t intend to implement immediately, but which has been bandied about as a possible addition someday.

Paving the way doesn’t sound bad at all, though, does it? In fact, it sounds proactive and laudable. And if that feature X goes through in a timely fashion, exactly as you envisioned, I’m sure you’ll be praised for your foresight.

BUT.

Even the simplest of potential features can be implemented in a number of ways. Or not implemented at all. At best, your “foresight” can result in wasted time, where you spun your wheels for a few hours (or days!) playing “what if” and “let’s pretend”, trying with too little information to think of how best to architect your code to accommodate that future feature.

Continued…

Hand Shadows

Jamis
Jamis wrote this on 15 comments

My wife recently ordered Henry Bursill’s classic Hand Shadows and More Hand Shadows. It was first published in 1859 and 1860 (in two parts), but what’s best about it is that, aside from the name of each pattern, the book is simply a book of pictures. No text. No preface by a famous hand shadow practitioner. No page of text describing the history and variations of each pattern. Just pictures.

Each page is a single picture, drawn in mid-19th century style, demonstrating how to position your hands, and showing the resulting shadow. No text is needed; the book explains itself.

Obviously, this extremely minimalist style wouldn’t work for every book, but how many books could be improved by including less than they have? How much do you really have to say about a hand shadow, when a picture says it all?

Standing versus Sitting

Jamis
Jamis wrote this on 67 comments

Almost two months ago, I decided that I wanted to try working standing up, rather than sitting down. When sitting in my comfortable, reclining office chair, my posture was terrible, my attention span was narrowing rapidly, and I was constantly battling fatigue. After looking around online a bit, it sounded like standing was the way to go.

So I propped my keyboard and mouse up on a few encyclopedias and gave it a go. The first week was rough on my feet and legs, which ached constantly. I kept a bar stool handy for resting periodically on, but I really tried to stand at least 80% of the time. After that first week, though, things improved rapidly.

My attention span improved, too. I noticed an immediate increase in my ability to focus on a problem for longer, and with greater clarity. When I was blocked by some problem, I was able to just walk away from the desk, whereas before the effort of getting up from my chair often made me prefer to just sit and stew in my frustration.

stand-up deskSo now, nearly two months later, I am able to replace my book-stack keyboard platform with a real stand-up desk, and I love it. When I was shopping around for a new desk, I quickly realized that I didn’t want stainless steel or plastic. I wanted wood, being the xylophile that I am. And of all the places that sold wooden stand-up desks, Standupdesks.com (the web outlet for Amish Country Furniture Sales) was the most compelling. I purchased a 4-foot-wide variant of this computer desk, and am very pleased with it so far (it just arrived yesterday). The workmanship is top-notch, and I love its simple elegance.

Software carving

Jamis
Jamis wrote this on 16 comments

Just a quick observation: writing software is like carving. You start with the computer and all of its potential, and you whittle away the possibilities, constraining the program until you get what you envisioned.

Typical person? No such thing.

Jamis
Jamis wrote this on 21 comments

This morning I was reading through some of the comments on an article at Hacker News, and stumbled across this one:

The key is to hire rockstars—they produce more value in four days than a mediocre employee does given weeks. If you gave the typical person free food and time off. They’d stuff themselves until they got diabetes and spend the rest of their time watching reruns of ‘Room Raiders’ on MTV.

I am perfectly willing to acknowledge that not all of us excel at the same things, but I’m coming to believe more and more firmly that this whole “typical person” entity is a myth. I’ve never met a typical person. There are only people who are passionate about what they do, and people who aren’t. When the latter become the former, they become “atypical”, because suddenly they are self-motivated, insightful, excited, optimistic, and happy.

The important thing

Jamis
Jamis wrote this on 6 comments

My wife recently purchased this book on quilting by Denyse Schmidt. One passage in the introduction is particularly compelling:

[This book] isn’t intended to be a comprehensive guide to quilting, and I certainly wouldn’t say that my way is the only, or the “correct” way to do things. Once you’ve developed a healthy obsession with quilting, you’ll want to explore many other approaches. The local library, quilt guilds and stores, bookstores, and the Internet are all great places to look for information and inspiration.

The important thing is to begin.

Sound advice, whether you’re quilting or coding!

Discovering a new interest: Whittling

Jamis
Jamis wrote this on 30 comments

Back in August I started getting an itch to try something new. Something really new, something completely unrelated to computers (which have been my passion for almost 20 years now). Somehow (I don’t recall the details) I stumbled across whittling and woodcarving, and I’ve discovered that I really enjoy it.

I started by picking up a book or two on whittling from the library, and learned the basics of carving “whimseys” (interesting projects without a practical application, like chains or a ball-in-cage). I’ve since carved a few of them, and several decorative spoons, but I’m still exploring the domain. It’s almost like learning to read, or to program computers, where an entire world appears that you never knew existed. There’s so much to discover!

spoonAfter quite a bit of research, I purchased my first big power tool, a bandsaw (a Grizzly G0555), and I’ve been very pleased with it. My first Welsh love spoon (here) was done without a bandsaw, and although I learned a lot from the process, I also learned that I’d rather focus on carving the piece, than outlining it.

Aside from the bandsaw and a simple electric drill, my tools are all hand tools. I use a Flexcut detail knife (which I absolutely love) for most of the work, and resort to some inexpensive chisels and gouges (that I picked up at Michael’s) for things like carving the bowl of a spoon, or feathers. (Eventually, I’d like to pick up a beginner’s set of real chisels and gouges, so that I can experiment with relief carving.) Also, I picked up a woodcarver’s saftey glove shortly after carving a big slice of my hand on accident.

So far, I’ve only carved basswood (a very cooperative hardwood, perfect for novice woodcarvers), but I’m starting to eye some of the harder woods, like cherry, walnut, and oak. I’ve also started learning about wood toxicity (scary!) so I’m being very picky in the woods I’ll carve!

Ultimately, there is something extremely satisfying in taking a plain block of wood and shaping it with your hands into something remarkable. The entire process is incredibly therapeutic and meditative. As I carve, or sand, I find myself pondering parallels between woodcarving and just about everything else. It’s a great time to slow down and reflect, something that I haven’t been very good at in general.

For the curious, I’ve got my current gallery available as a public Backpack page: Woodcarving by Jamis Buck. I’ve also got a YouTube video of me carving a small spoon, in fast-forward: Carving a decorative spoon. Just keep in mind that I’m still new to this art, and be gentle!

I Wonder

Jamis
Jamis wrote this on 57 comments

My son loves toy catalogs. He’ll turn the pages and just imagine. He drinks the koolaid, and loves every minute of it. I love to watch him.

I hope he never gets to the point where he thumbs through a catalog and scoffs. Where he reads the descriptions and cynically dares them to be true. I want him to always retain his sense of wonder, his desire to believe the best.

What has happened to our optimism? I’m sure all of us can recall many a childhood hour spent thumbing through dog-eared toy catalogs, dreaming. How many of us still do? Why are we now so quick to shout “hype” at every new development? Why are we so afraid to believe? “Meh, it’s just another X.” “So-and-so did that years ago.” “I’ll believe it when I see it.

I’ve found myself slipping down that poisonous slope recently. I’ve started to reevaluate, and I think I’d rather follow my son. Perhaps it’s not too late to recapture some of that childhood optimism.