I can’t tell you how often I see people say things like, “I’m not really qualified to do that,” or similar excuses. Oh hell, neither am I, but I wouldn’t let a little thing like that stop me! You learn as you go, you drag in the help you need, or whatever. Passion will conquer so care enough to have some. Be the driving force and the rest will take care of itself.
He fingers both fearlessness and passion as important to getting things done.
Me, I don’t much care for passion. I distrust passion. Except, as I pointed out in August, as regards cheese:
I still think passion is overrated, though. Except where cheese is concerned. I am passionate about cheese. For example, this Vermont Brie is really fantastic. If only someone would make a truly artisan domestic parm…! But I digress…
I like interest, friendship, love, playfulness, curiosity, satisfaction, absorption, and joy. Maybe that’s because passion implies a kind of singlemindedness that I’ve finally accepted that I just don’t have, and don’t want. Maybe it’s because I find that I cannot be passionate and fearless at the same time: passion makes me cautious. My best work, my best ideas, and my best productivity come when I am playing with something that is not excruciatingly important to me. It’s a spirit of fearless play, not passion, that drives what I do.
Not, note, that I am claiming to actually accomplish an awful lot. I’m just pointing out that, to the extent that I accomplish anything, it’s because I don’t take it too seriously. The second I start taking something seriously, I completely freeze up.
For example, this time last year, I’d just had a baby. I hadn’t worked for pay in about three years, and I had no plans for that to change anytime soon. Then Max had a contract end and decided he wanted to learn Ruby on Rails (this was back when he thought he really wanted to be an app developer, before he realized that his sweet spot is all the technical stuff that has to do with app development that isn’t actually about writing application code.) Anyway, so he was having a hard time motivating himself to do the AWDR tutorial. Fine, I said, I’ll do it too, maybe we can motivate each other.
Then I convinced him that we should try to start consulting together, and we started the blog. Hey, I thought, no one is reading this thing, I can write whatever I want. For example, here’s a quote from my very first blog post, in March:
Someday soon we’ll be able to say “yep, we know Ruby on Rails” and we’ll have our fantastic contributions to the open source world to prove it. “Right,” you’ll say, after reading this blog. “We’re looking for someone with five years experience with Ruby on Rails. You have three months.” And we’ll say “That’s the way it goes, suckas. You want to hire people who don’t actually exist. We, on the other hand, exist.” About Ruby. We’d originally decided that Max would pick up Ruby on Rails, and I would freshen up my Java skills with STRUTS, which was just coming out last time I did serious Java coding and which I am, by all rights, long past due for learning. This felt very serious and sensible. Also not fun.
And then, later that day, the key to it all:
How are we able to be so marvelously decisive? We just pretend that everything we’re doing is fake, and therefore of no consequence.
If we’d been really passionate about the whole thing, and utterly convinced that this was our calling in life, that our business absolutely had to succeed, that everything had to be done right, we would never have gotten anywhere. But we started out not caring. We did not know ruby on rails. We did not know any ruby on rails developers. We had no idea where we would find clients. I hadn’t done any programming whatsoever for nigh on three years, having devoted my time instead to recovering from the nervous breakdown I had when I was pregnant with Ari, learning to garden, grinding my own wheat for baking bread, writing a political blog, rediscovering my love of painting, visiting and eventually applying for and receiving visas for permanent New Zealand residency and, finally, being bedridden and anemic and puking during most of my second pregnancy. So hey, why not try something new? Who knows if we’ll like it? Who knows if we’ll be any good at it? Who knows if it’ll work out? Who cares?
Here’s me a month after we started the blog, in April:
I don’t know where this all is going, exactly. I’m not ready to work full-time right now. I’d rather Max not work full-time either. I want us to find a way to work together, and not all the time. I want everything — the perfect setup! I am not sure how we’ll get to our dream work from where we are right now. Will we find a job to share, or will we be laughed out of any company we tried to convince to hire us for one? Will we do some consulting, or will it turn out that we can’t stand all the self-promotion required to consult? Will blog.thirdbit.net end up going to that great bloggie graveyard in the sky? Will I work for pay again, or spend my days sitting in the park snickering at the bugaboo strollers? Is the final cylon really who we think it is, or was this year’s season finale a red herring?
In May, we got our first clients. In July, I saw a post on the Boston Ruby Group that someone needed a TA for a Ruby on Rails class at Harvard Extension. Hey, I thought, I’ve been a TA at extension before, maybe I could do that. I went to the interview and was like “yeah, I’ve been using RoR since, uh, March.” And John, bless his heart, was like “oh that’s cool, whatever.” He wanted a TA who already knew how very much work it was to grade all those programming projects, and how very little money Harvard thought all that work was worth.
In August I wrote a blog entry about method_missing which somehow got Reddited and then mentioned on Ruby Inside, which resulted in a huge spike in blog traffic.
And I ended up TA’ing this class. And it’s been absolutely a blast, and John hired Max to do some systems consulting work (migrating his company over to a new bug database).
And after John introduced me to Steve Yegge’s blog I started feeling I was just a completely crap developer who knew nothing about anything, and that gave me an idea for a book one night when I was up with Aya who was teething, and wrote up a proposal the next morning, and sent out the proposal, and got a book contract. So now I am writing a book, about which more soon.
And since I was TA’ing the RoR class I made sure to show up to the Boston Ruby Group meetings and eventually everyone got used to me being there and started to know who I was, and I started corresponding a bit with Greg Brown over email so when he came up to speak at the December Ruby Group meetingI was like, what the hell, and invited him to dinner, which was a lot of fun.
And Max and I each got more clients doing exactly the kind of thing we each like most to do right now. ( Obligatory self-promotion: Look here for more info if you might want to hire one or both of us!)
Anyway, it has worked out for us. Not exactly the way we imagined it might, but nothing ever does. And since we weren’t all that invested in what we’d imagined in the first place, it didn’t bother us that much to change it.
I don’t know what will happen next. But I do know that everything great that we’re getting to do, all the good stuff happens when we treat our lives like a game, and play, fearlessly.
Popularity: 47% [?]
Kieran Healy of Crooked Timber, talking about the giant Celtic clock at Newgrange, and the Winter Solstice:
A society—a civilization, if you like—is a hard thing to hold together. If you live in an agrarian society, as the overwhelming majority of people did until about two hundred years ago, and you are on the western edge of Europe, few times are harder than the dead of Winter. The days are at their shortest, the sun is far away, and the Malthusian edge, in Brad DeLong’s phrase, is right in front of you. It’s no wonder so many religious festivals take place around the solstice. Here were a people, more than five millennia ago, able not only to pull through the Winter successfully, but able also to build a huge timepiece to remind themselves that they were going to make it. It’s astonishing.
I am in a post-Christmas-party fog this morning, so I can’t do my usual “really, this is totally related to software development even though it seems to be a cute story about my kid or something else off-topic” thing. Crooked Timber is a group academic blog having nothing to do with software (though some of the academics on it do research on web stuff; here’s a recent note about some research being done on social networking sites, for example.)
Actually, I’ll at least try to relate this to work/software/consulting/business: Sometimes you hear people lament the December slump in productivity, and blame it on the ‘holiday season’. As though if there were no pesky holidays to get in the way, then we’d all be going full-bore on our goals. The other day I read a post about how I could be using this holiday lull in billable hours to get a bunch of really useful stuff done. “Oh man,” I thought, “We totally need to do that stuff.” All the extra stuff on our site, for example, (the non-blog stuff) has not been updated for months, because we’ve been too busy working to change it to reflect more accurately the work that we’re actually doing these days. (And we are rapidly approaching the time when we can no longer claim to be in ‘really-real beta rather than google-style fake beta’, as it says in the sidebar.) And we need a better invoicing process. And so on. But the truth is that, like most everyone else, I’m not that productive right now, even though I don’t have the excuse that I have too many holiday commitments, or that I’m traveling.
People who think that it’s the holidays that cause a December drop in productivity have it totally backwards. It’s the December drop in productivity that causes the holidays.
We don’t live in the stone age anymore. We do not spend the long dark winter starving and freezing, huddled together in our huts. But we are still part of that rhythm. Our artificial lights and central heating and snowplows and de-icers do not entirely erase the feeling we have that now is the time to huddle together around a fire, not go to meetings and launch new projects.
Which is to say that the site will not come out of beta until 2008. Happy Holidays, everyone!
Popularity: 25% [?]
Our next-youngest client, Ari (4), executed this project without our assistance. It worked out magnificently. Take two glossy magazine pages, a bunch of tape, and wrap pages around feet. Apply tape. Voilà: Magazine slippers / goblin shoes / “skates”.
This is one reason not to ration tape.
Popularity: 11% [?]
First, a parent hack. Got kids? You should be reading Parent Hacks. Not got kids? Read on anyway, I relate the whole thing to user requirements at the end.
The hack: As soon as your kid is old enough not to eat it, buy a multipack of store-brand magic tape. Provide your child with the tape, scissors, the contents of your recycle bin (purged of dangerous items), and a box of broken toys and other small household items. Now leave your kid alone with the stuff.
The most important part of the hack: do not ration the tape.
Ari loves tape. We used to ration it. We value conservation, and using up gobs and gobs of tape seemed useless, expensive, and just plain wasteful. We didn’t understand the things he did with it. They were incomprehensible and often ugly. He used too much of it. It all seemed pointless. Three things made us change our minds:
First, we realized that tape is so cheap it’s essentially free, even when used in quantity like Ari uses it. Ari can easily spend an hour on a taping project, without needing, wanting, or even acknowledging parental attention. A babysitter costs us at least $12/hour. So not rationing tape actually saves us money.
Second, we realized that the tape served the goal of conservation by enabling the transformation of, basically, garbage, into toys and games and arts and crafts. Yes, eventually the stuff did end up on the curb anyway, but it enjoyed a (sometimes very long) second life as a more-or-less elaborate Ari contraption.
Third, we realized that tape is a non-toxic, easy to clean up, and remarkably versatile project supply that allows both two- and three-dimensional constructions. Glue is also versatile, but much, much messier.
Finally, we realized that while the things Ari made with the tape seemed senseless to us, they were valuable, important, and even beautiful to him. This is often the case with our childrens’ projects. We’ve come to realize how often we say no to kids, just reflexively, for no other reason than that what they want doesn’t make any sense to us, the grownups. (“No, don’t use up all that tape. What do you need all that tape for? Why do you have to tape the giraffe to a stick and hang rubber bands off him? What’s so important about putting those toy people in a cardboard-reinforced tape shell and carrying them around in an old purse? What the hell for???”)
When we find ourselves saying no, we stop and ask if there’s really a good reason for the ‘no’. We try to say yes, when we can. And so, we say yes to as much tape as he wants, whenever he wants.
What this has to do with clients:
Clients, like kids, often want, do, and care about things we don’t understand. It’s our job to try to understand them, and it’s difficult, exhausting work. It’s much, much easier to dismiss them. “No, what do you want to be able to download spreadsheets for? Who cares about what color that dumb little button is? That’s a ridiculous process anyway, why should I make the software conform to it?”
We want to build software that we care about, and that we understand. But that’s not our job. Our job is to help our clients do what is important for them.
“How can you compare clients to kids?” you may ask. “What kind of whupped parent are you that you treat your kids like they’re your clients?” or conversely “Isn’t it a little insulting to treat your clients like they’re children?” I’m not arguing for not setting limits for your children. I’m arguing for respecting them as people whose values we do not always understand, just as we respect our clients as people whose values we do not always understand. (Software development is just like anthropology, only better paid, I’ve always said.) We have broad and deep expertise in many areas that our kids don’t, and in order to help them do what is important for them, we’ll have to draw on that. But the same goes for clients. We don’t let our kids go without brushing their teeth, even though it’s not important to them, because we understand that toothbrushing is part of the infrastructure of living. We don’t let our clients’ projects go without version control, even though they don’t care about version control, because version control is part of the infrastructure of software development. We should not be slavishly trying to meet our clients’ every needs any more than we should do that with our kids, and even when our kids are at their most infuriating and most incomprehensible, we should remember that to them, the things they care about are every bit as important as the things we care about are to us.
We’re not the boss of our kids, and we’re not the slaves of our clients. We’re just the consultants.
Popularity: 13% [?]
So we got some really nice links this week, and with the links, a bunch of click-throughs. And some wonderful comments, all of which we deeply appreciate. And now of course, I’m choking . I have about 20 posts in various states of readiness, from “just an idea” to “nearly done but I suddenly think it sucks and wasn’t a good idea for a post in the first place”, but nothing ready to go.
Oh wait, here’s something to keep you from dumping us off your feedreader (or dumping us faster, who knows?!). A snippet of a column by Cary Tennis, Salon’s advice columnist , responding to someone who can’t decide whether to give up a career opportunity for his girlfriend, whom he loves passionately:
You say one cannot calculate the value of a job or a relationship, but I do not think that is true. I think one must calculate it. Courts are called upon to do so. Moreover, intuitively we do it anyway. For instance, suppose that you and she settle down and have a good relationship and good jobs. Say that one day a supernatural being comes to the door and says that you must give up either the job or the relationship. Which would you choose? Which would you consider expendable? Which would you consider replaceable?
While in science many problems are difficult because they are complex, in life many problems are difficult because they are simple, but we are human and we want everything. While in the conduct of science we would never suspend physical laws to get the result we seek, in life we try that all the time: Can one person be in two places at the same time? Well, people say no, but maybe in this case … I don’t know … if I accumulate enough free miles maybe I could fly from Toronto to Oakland enough times that I could appear to be in two places at once …
I don’t think so.
If you’re reading this blog and wondering why Max and I have this crazy idea that we’ll somehow each work part-time, or consult together, or work out of the house, or do something weird and web-worker-daily-ish, and we don’t want to travel much for work and we don’t want long commutes and we don’t want to be these people, toiling away in the “Silicon Valley salt mines” — that’s why: We’ve got one life to live here, people, and we can’t be in two places at once.
Popularity: 14% [?]
The other day I responded to an ad looking for Rails Ninjas. A very nice guy called me up to talk about his startup. He asked me to talk about our rails skills. Would I describe myself or Max as a rails superstar? I said “look, we’ve been using rails since March. We are not rails superstars.”
Why did I respond to an ad asking for Rails superstars when I make no claims to be one? Because there are many ads looking for Rails superstars and there are not enough to go around. There certainly aren’t undiscovered rails superstars around. We’re not talking supermodels here. You don’t take an ordinary Romanian peasant and turn her into a rails superstar overnight with a nice haircut and a manicure . Rails superstars have blogs and open source projects and debates about the importance of symbols on the rails-core mailing list. They have histories.
Me and Max, we don’t yet have a history with Rails. We are not superstars.
And yet, we are not script kiddies. Rails is full of amazing magic. How do instance variables set in the controller end up as instance variables in the view? Who knows? And who cares? Script kiddies don’t care. It’s automagically terrific, and that’s all they need to know.
If you look at the source code, though, you fall down a rabbit hole. You discover that Ruby itself has a method called instance_variable_set (be sure to check out the documentation on that!), that you can call on _any_ ruby class. How utterly transgressive! You can just shove whatever you feel like in anyone’s class at any damn time you please. You can make brand-new methods on the fly, when you need them, by using method_missing to make a new method whenever you call one that doesn’t yet exist. Amazing feats! And not implemented in secret or in C or something that isn’t any fun to look at and that there’s little hope of your ever being able (or particularly wanting) to do similar things yourself. All the magic is just hanging right out there for everyone to see. And it’s all just part of Ruby, a cute little language that’s fun to code.
And you think, yes, I can do this! Someday I too may tackle the continuation koans.
But not just yet.
Popularity: 11% [?]
Amy picked up Michael Nygard’s Release It! for me, which is turning out to be a pretty good read. However, it’s also bringing back so many sour memories of operations blowouts from previous work with telecom and financial clients. In one example, a CxO is seen storming around the office asking whose head he can have on a platter for costing him his Caribbean vacation home. (His pay was based on performance, and his airline’s 3-hour overnight software outage, with cascading effects through the industry, could have diminished his year-end bonus.)
I dig how Nygard diagnosed this company’s outage — due to unhandled JDBC IOException errors — by decompiling the binaries, since everyone was terrified of being blamed and nobody dared even ask the development group to pony up the source code.
“The first clue [that this project was not going to be simple] was that nobody else could tell us what all the feeds were.” [p36]
Popularity: 8% [?]
So we’ve moved the site over to WordPress from Typo. We experimented with two rails-based blogging engines, Typo and Mephisto (which seems more popular in the rails world right now), but WordPress is a mature and widely adopted platform and in the end it made more sense to us to go with it. We’d rather not be solving software problems others have solved a million times over. (Which is why we also won’t be producing a to-do-list app any time soon. Online to-do lists! A billion to choose from, and yet somehow, none of them make my work get done. Though actually, I just bought a copy of the PDF book Flexible Rails, since I’ve decided to pick up AS3/Flex in my spare time, and the tutorial project in the book is, of course, an online to-do list.)
I’ve been delaying posting this notice because I keep looking for a blog post I read a month ago which convinced me I ought to think about WordPress, as it was an explanation for a rails blog running on WP, and a damn good explanation at that. But I can’t for the life of me find it again. I found several other people who moved to WP after experimenting with the rails blogging engines, but not the post I remember. The explanation was, basically: right tool for right job. WP is good tool for blogging. No need to reinvent. Etc. Except the post was more eloquent than my restatement. Oh well. Lost in the ether.
Also, Max had to run a cron job doing some voodoo the details of which I forget to keep the Typo instance in good shape. WordPress is faster, and, we hope, more stable. (No, I am not making a comment about the stability and speed of Ruby on Rails in general, just a statement about one instance of one app on one host. YMMV.)
Anyway, Max has a script for migrating the database from Typo to WP, and he’ll post it any second now.
Popularity: 9% [?]
The other day we put a prototype build of a web app up for our clients. Fire away at it, we said. Tell us what is wrong with it! We even had a section in the release notes called “How to be a QA person” (It’s a small project, we don’t have QA, hence our clients are, basically, QA).
Of course, we were pretty proud of our app. Of course, they came back with lists and lists of embarrassing bugs, complaints, features they didn’t understand, etc. The lists were not bracketed by nice polite “we love the app, we’ve just got a couple of teensy little issues with it.” Although the emails they came back in were entitled “Bugs 1, 2, 3, etc.” not everything in the lists were actually bugs. Developers are very defensive about “bugs”. The typical user considers anything that doesn’t work the way he wants/expects it to to be a bug. The typical developer considers bugs to be only things where they, personally, wrote code whose logic was not correct.
So Max comes in to me and says “wow, what do we do about the clients and all their bug reports?!” Our immediate emotional reaction to their emails was that they were irrationally pissed at us and didn’t understand anything about how software development works and were a pain in the ass and were probably going to fire us for giving them such buggy code.
But then we were able to sit back, take a deep breath, and reason together:
First, our clients did exactly what we asked them to do, and they did it well. They gave us fantastic feedback on the app that would help us focus on the most valuable changes we could make for them. When clients don’t give feedback, you’re screwed, because you don’t know how to make them happy. Our first emotional response is normal, and we’ll probably never get rid of it. In fact, we probably shouldn’t get rid of it, because the emotional response is there to kick our asses.
However. (And this is my completely based-on-popular-science-books-by-eminent-yet-readable-professors-theory). When dealing with other humans, we humans expect a fat pipe. We evolved for person-to-person, face-to-face contact. Our faces, bodies, and voices are unbelievably expressive. Compared to the fat pipe of person-to-person contact, words in email are a trickle of information. So when we get an email that elicits any kind of emotional response at all, our brains start flailing around wildly, looking for all the meta-information we expect to come along with it: the expression on the face, the tone of voice, the direction they were looking, and so on. And when we can’t find it, we make stuff up. In no time, we’ve filled up the fat pipe and satisfied our “what do we do now?” programming with _entirely false, absolutely imaginary information_. Those of us who are naturally pessimistic generate false, depressing information. This makes our initial, proper and correct ass-kicking emotional response escalate into a neurotic, counterproductive, self-perpetuating emotional response. Not good for business.
One moral of this story is that developers should not take user complaints personally. This is obvious but easily forgotten. The other moral of this story is the one I’m really interested in: when our brains don’t have the information they expect to have, they just make it up. And it’s really easy not to notice when it happens, because the made up information looks just like all the actual-based-on-fact information our brains have collected. Hence the unreliability of witnesses.
The lesson, then, is that, for stuff that matters, _don’t assume your brain has the facts right_. Take the time to sort out what you can possibly have evidence for from what you just made up because you _didn’t_ have any evidence.
Popularity: 7% [?]
Recently I saw a job posting that had a list of perks including “free Starbucks coffee, bennies.” Wow, I thought, do they really want to advertise that their developers need tranquilizers (possibly from all the free coffee)? Then I realized that “bennies” meant benefits, as in health, leave, insurance, retirement. Note to recruiters: benefits are important enough to be listed before free Starbucks coffee and should not be referred to with a diminutive.
Also, anyone who writes “All applicants must have the ability and desire to thrive in a fast moving team environment.” deserves whoever they end up hiring.
I’m not linking to the offenders. What if I want to work for them someday? Then I’d be embarrassed and the New York Times would use me as an example of the perils of online work life in the days of blogging.
Popularity: 6% [?]