Like what you see? You can pay me to solve problems for you.

Like what I'm doing? Give to me on gittip!


Becoming prolific.

The key to being prolific is focus. Well, obviously. Of course if you focus you can do a whole lot more of that one thing. For me, at least, it wasn't quite that simple. I had to really become aware of just how limited my progress would be if I didn't focus more, and also be a little more tolerant of that. See, I used to try to do a number of different things pretty much every day, in at least a bit of depth. It was cool. I learned a ton every day (when I was able to maintain the habit), but I also wasn't able to keep it up consistently. Which lead to fear.

The fear is the killer. You can't be afraid of just getting started at all, or else you clearly won't be able to make much progress. So, realizing that while I could be quite well rounded if I kept up my course of action, but never really contribute anything great, I decided to look through my habits and figure out what to shitcan. I went from around ten to five habits I was committing to doing every day. This was scary in a different way, because I thought, well, if I don't have habits for these five things I'm dropping anymore, will I actually still do them? So far, it seems the answer is yes. I do more of the five habits I kept, but I actually still do just about as much of the five habits I didn't drop, or rather just a little bit less. The difference is that I'm doing so much more of the five habits I kept.

Clearly, since they are the five I kept, they're the more important ones. They're the ones I'm doing more of now, with more consistency. This is clearly the most win win a tradeoff like this can get. I don't feel like I've lost out on the five I dropped, but I do feel like I've gained significantly on the five I kept, and for that, I'm super glad I did this.

While I'm on the topic I'd like to point out what I think most important about being prolific. A lot of people (generally ones who haven't done so much creation) have the idea that great work is the result of genius or great talent. I think it's actually a lot more mundane than that. Everyone produces work that varies from a lower to a higher level of quality. If you do a lot of work, then you can choose to share your good work, and not burden the world with paying attention to what sucks. What's more, the whole range of quality you produce will actually shift upwards over time, as you realize (perhaps not consciously) what habits or techniques lead to higher quality work, you'll do better work overall. And you'll still be able to only share the good work. Or share it all, in some settings that doesn't matter. Like for coding, I just put everything on github, totally indiscriminately. For writing, I'm a fair bit more selective.

The key, once you've achieved prolificness, to maximizing the utility of it, is to pay attention to the possible payoffs of different kinds of work. For writing, there's potential negative payoff writing bad shit of whatever sort. You can offend people, or lose followers that you might not have lost if you'd more carefully made the point (that distinction is key: it's only losing them for the wrong reason that's bad, not losing them in general). For publishing code, though, there's no downside, basically, so I publish basically everything I write. No, really. I even published a script I wrote to warm up my laptop by running infinite loops on each core.

P.S.: A related piece that I really loved last I read it was Hamming's "You and Your Research." I'm not going to link to it, because copies die and new ones come around, but if you google it you'll be able to find it for sure.


Habits as a way of lowering the barrier to entry.

I used to think that habits were good because they meant I was getting something relatively substantial done every day. I'm experimenting with a different idea instead, now. That habits could be a way to become familiar with a sort of activity, and make it less daunting to do in the first place.

For example, the prospect of writing to share my ideas with others is pretty overwhelming to me. I have lots of ideas, and I often want to communicate them. In terms of ranting on twitter or facebook, I feel perfectly comfortable. As well, I feel quite comfortable doing so face to face with my friends, or even sometimes with whoever I happen to be around. Writing, however, has remained relatively terrifying.

So, not knowing what to do, I've decided to do work that doesn't quite live up to my expectations, either in quantity or quality, or somewhat often, both. I haven't done this for too long yet (about two weeks?). As much as I would like to be the sort that quantifies significant portions of my activity, I'm not that person, at least not yet. So, I won't be able to say, at any point, in any super objective way whether this has helped me or not. Instead, I'll take the phenomenological approach, and describe a bit how the experience of this has been, and why I enjoy it so far.

This practice provides an easy way to regain or maintain momentum. This is critical for me, as I'm a very inconsistent person, and I've not really ever been able to stick to any habit I've tried to develop in the sense of doing it every day (or really, even every week or month). I make progress, yes, but I do so in spurts (see here and here). So, for a while I've thought that making it easy to get restarted is important for me. I haven't been so successful at that up to now, but it does feel like I'm doing better. The evidence on my lift profile seems to support that, though I'm not too far into it yet, and I haven't had any significant shocks to my lifestyle or emotions in this time.

I've also found that it's interesting to restrict how much time I allow myself to spend on certain habits in a day. For example, there have been days where I've spent four or more hours on duolingo. That's cool, in a way, but I don't think I was learning very effectively after the first hour, it certainly wasn't good for my wrists, and most importantly, it kept me from accomplishing any of my other, more important goals for the day. I also have a tendency to study too long (I've never tracked how long it takes, but I have an urge to always finish the chapter I've started in a single sitting). There have been days where this has caused most of my work-time in a day to be spent on study. Arguably this could sometimes be the right way to spend most of a day, but the overwhelming effect of it has been that by the time I'm done, it is too late, or I am out of energy, for producing (writing or coding). I've decided to set myself flexible, but low, limits to how much I can do of these habits in my first go at them each day. I can always come back and do more, of course, but not until I've finished the more important habits.

I realize I haven't explained why I don't just do the most important habits first. That's certainly a wise and admirable habit to be in, but unfortunately I've never found it to work for me. I'm quite easily paralyzed by tasks that seem overwhelming to me, and so it is useful to have some small, productive things to do that get me in the right mood to do what matters more. This is not the most disciplined approach, but I believe it to be appropriate for me. In any case, it's all that's worked so far.

One last note: I'm publishing this not because I think it's some important piece of writing worthy of others' attention (though hopefully it is useful to someone), but precisely because of what it's about. Posting on my blog is one of those things that's terrifying to me, and so, while I do hope someone benefits from this, I am mostly posting it for my own purposes.


an open letter to the programming community, and other friends.

The audience for this is quite broad, so some of this will be old news to some of you, but the background is necessary. Shortly before Christmas, I found myself in San Francisco (I'm from Seattle), without a job, friends in the area, a steady place to live, or much money. I ended up doing a contracts for a little bit, but it didn't quite work out. Quickly enough I realized that to get into the sort of situation I want to be in over the long run, Seattle makes the most sense.

In the long run, I want set my own terms for how I work, and have significant say in what I work on. This may look like some sort of consulting, but if so it'll require that I'm able to turn down most work, as much of it won't be appropriate for these goals. It may look like some other sort of business. I don't know yet, but I do know it's my long term goal, what I'd like to be starting on, in some way or another, before I'm 30 (I'm about half way to 27 right now, for context).

I guess the apology fits nicely after all that. I asked a lot of a number of different people in the community, and created the opportunities for people to reasonably expect various things from me. I have, almost without fail, fallen through on those expectations. I feel the need to say that I'm sorry, but I just can't follow through on anything right now. Lack of money, and the instability it can bring, are taking a big enough toll on me that I can't manage a ton more than my job search right now. So, please, everyone who's given me advice, offered to pair with me, attempted introductions for me, etc., don't take it personally. I hope to get back to most of you, in some form or another, once I'm back on my feet.

I honestly didn't expect so many people to be willing to help in so many little ways. A number of times since December I have been so overwhelmed by the little and big bits of support I've gotten from this community. I'm pretty freaking sure that, over the past three months, I have cried a few times because of how grateful I was. I haven't really shared that with anyone, unfortunately, because, as I mentioned, I'm just barely getting by. Still, I want you all to know – whichever of you read this, at least – I absolutely appreciate it. You may not consider whatever thing you did to have been much, but it showed me that I'm finally part of a community that, in big and small ways, gives a shit about me. I've been hanging out on the web with programming communities since like 2003-ish (holy shit, a decade?!), and this is the first time I've ever really felt any sense of belonging. So, thanks. That helps a lot.

Love y'all. Really.


this is just on my blog so people can reply

1. How do you go about getting decent work? If you don’t think this is an active process, what do you think is bringing you good work? I think this might partially be the wrong question, because it seems from reading ‘Design is a Job’ that at least part of the responsibility is on the consultant to educate the client on how the process works best.

2. There’s an implied bootstrapping problem in the previous statement: if you’re not an experienced consultant, how do you know how to help the client be better? If the client is significantly better than you, it seems unlikely you’ll be able to get that work.

3. Rates are problematic for me for a few reasons. First, the typical problem I think most everyone goes through at first: you’ve got no context, so you don’t know where to start. I’m a little past that, as I’m starting to get a little bit of context from the discussions I’ve had with my initial clients. More importantly, though, and what’s got me stressed the most right now: it seems that if you take work at a low rate, you can’t afford the time investments/mental space to do the self improvement and self care to be worth the higher rates. This leads smoothly into another point…

4. I’m trying to get my start in an especially problematic set of circumstances:
A. I have no savings (the explanation is out of scope, but the fact is important information), so I can’t easily turn down work.
B. I don’t have any significant amount of writing or open source I’ve done (though I’m trying to remedy that.
C. I’m starting out basically on my own, in a new city (on the flip side, that city *is* San Francisco). The circumstances aren’t a question by themselves, and I realize that, but they lead to one. It’s becoming very clear to me the importance of being able to turn down work, and maintaining enough spare time/the mental space to give back in terms of OSS/writing/etc. I can’t manage that very well right now, and while I think I might be able to bootstrap, just barely, it seems like it might be more wise to change my circumstances. Of course, I can go get a short term contract, etc., and build some savings. I could also, theoretically, find someone else to work with who’s a bit more experienced, and hence has better work coming in already, and can mentor me some. What’s your opinion? Is it foolish to keep going without savings, or someone to mentor me, or something of that sort?


Great developers design.

I’ve been thinking about how great developers do design. Not necessarily all aspects of it, but at the very least the meta-process that is design. Mike Monteiro, in his book Design is a Job, says that “a designer solves problems within a set of constraints.” From what I’ve figured out from talking to various designers recently, this seems to be a good definition of design to me. I think it’s necessary to take the same approach to write the best code you can to solve a certian problem. Or, even better, to figure out that you shouldn’t even write any code to solve it.

First, some definitions are in order. We’ll call design solving an ambiguous problem given a set of constraints. Programming, just for the scope of this writing, will be limited to solely the act of implementing an algorithm. I know that’s much more restrictive than what programmers actually do (which, I think, is to my point), but having a clear distinction will be useful for communicating about this. Also, one other caveat: I’m going to speak in terms of my impressions of programming culture sometimes. I know that’s not very objective, but I think in this case it’s useful, so I’m going to do it anyway.

I deeply believe the idea of programmer as implementer is bad for the world.

Most programmers have stories about bosses or clients (they’re effectively the same thing, really) who asked for implementations that seemed, to the programmer, stupid, if not utterly absurd. I don’t want to dwell on that, but rather use it as a point of departure. Let’s consider why we find ourselves in this situation. Why are clients (dropping distinction between bosses and clients for now) asking for things we consider stupid?

There are at least two potential causes for this. First, the clients might actually be asking for something stupid. This isn’t a very useful assumption to make, and it’s way too self serving. At the very least, it’s unprofessional to jump to that conclusion without significant consideration of alternatives first. It seems more likely to me is that there is a difference between the client and the programmer’s understanding of the goals and constraints of the project.

Some programmers, I know, are balking at this. I don’t know of anything polite to say to this, so I’m just going to say it rudely, because I think it deserves saying. Here goes:

You suck at empathy, and it makes you act like a bit of an asshole.

Kind of ironic to say something like that in a dickish way, isn’t it? I think (for some of us) it’s long overdue. The rest of you, I’m sure, will forgive (or at least indulge) me. See, there’s the bootstrapping problem with lacking empathy: if you’re far enough in the hole, then you won’t care enough about the impact on others to question your behavior when it’s mentioned in more nuanced ways. Hence calling (some of) you assholes.

Phew. That was an undesirable detour… Back to miscommunication about goals and constraints! Programmers are in a bit of an awkward situation here, because we are by far most intimately familiar with the constraints. So much that we become a bit myopic, I think. We (I do mean myself, too) develop a sort of tunnel vision that, when we’re not careful, makes us act like assholes (again, me too). The client says “The quux needs to gaarple like this.”, and we respond (or think) “That’s {impossible,stupid,crazy}.”[1] Remember that empathy thing? Yeah.

Instead, that conversation should go something like

Client: “The quux needs to gaarple like this.”

Programmer: “I don’t see why. Could you explain the need for that?”

Client: “Well, it has to gaarple just like that so that the user knows what just happened.”[2]

Programmer: “Oh, so we need to make sure the user has visibility into this aspect of the system!”

Client: “Yeah, that’s absolutely critical.”

Programmer: “Okay, well what about…” (here you describe an alternative that doesn’t have the downsides you perceive, and explain why they are downsides.)

Of course, most of us aren’t quite naive enough to not have some inkling of this already. Which is a really, really good thing. On the other hand, I think the value of this process increases non-linearly with respect to how many times you ask why, which is why I’m calling attention to this. Without deeply understanding the goals of the project you’re working on, you can’t come up with an ideal solution.

There’s one final step to this ethical argument. It’s a bit of a logical leap, but I get a pass on that because I’m calling it out, right? Right.[3] Here goes: you are responsible for the results of your work. Put more explicitly: every single bit of suck you put out into the world is on your hands. You remember those awful BSODs, and countless other awful experiences you had at the hands of other people’s negligence? Yeah. Don’t propagate that.

Be the change you want to see in the world. I know it’s cliché, but do it. Seriously, do it. Every broken window you put into the world tells everyone else it’s okay to produce shit. And it’s not okay to produce shit[4]. It’s all of our responsibility to tell everyone that it’s not okay to produce suck.

So, can you be a good programmer (by the absurdly restrictive definition I proposed) without doing design? Yes. Of course you can. On the other hand, most of us don’t want to constrain ourselves to that definition. I think that obliges us to reach outside your comfort zone, and deeply understand the goals and constraints of the problem we’re working on, and work for ideal solutions to them. I think this is our responsibility as humans contributing to the way the world will work in the future, not just as programmers.

Maybe that makes me a bit crazy. If so, I don’t care. It’s my central to my morality, and I’m going to live by it.

  1. I suspect we’re more likely to say, rather than think this, or have a more extreme opinion, whether it is expressed rather than just thought, as employees, or novices. With experience and freedom a bit more understanding of nuance seems to develop.  ↩

  2. The reason doesn’t matter much for this explanation (and often enough, even for your work).  ↩

  3. LOL.  ↩

  4. Except in certain well defined contexts, many of which involve porcelain.  ↩