Bang Bang

Wikipedia describes a bang bang controller as one that is fully off or on. I don't remember exactly when I first read about this, but it was in the context of control systems and optimization, in some programming text, I think. At some point shortly after that, I made an analogy between bang bang controls and the crude, but natural tendency many people have to go from one extreme to the other, repeatedly. I strive to do better than this in my own life, whenever I can, but I'm honestly pretty shit at it.

Especially when it comes to opening up. Even with my oldest and dearest friends, I'll go from sharing ridiculous amounts of detail to hardly telling them how I'm doing, or saying hi, for weeks. It's not that I don't want to be friends anymore or anything of the sort, generally. Rather, it's that I oscillate between anxiety about starting to, or having, overburdened a friend, and intense loneliness and need for connection.

Of course, I'm a big boy, and I can take care of myself. I'm putting legitimate effort into understanding this part of myself, and figuring out what it even means to adapt to it1. I'm not asking anyone to solve it for me, but I do figure it's about time I have a ready explanation for people it might matter to. That's what this is. If I've sent it to you, it's because I think this might be impacting you.

Lastly, if I'm not reaching out to you anymore, there's a pretty good chance this is why, and an even better chance I won't tell you that unless you ask. Always feel free to start up a conversation, please. Don't think if I'm not talking to you, that I'm not interested in it. If I don't want to talk, don't worry, I'll let you know.


  1. For example, it could mean developing a few really close connections that are specifically okay with hearing so much about what's going on, or it could mean being more resilient to the feelings, or some other internal adaptation. Who knows. Maybe it's some combination, even. 

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.  ↩

Infrastructure is for People

Pre-ramble

‘Infrastructure is for people’ is the premise that I work from, and this post is my attempt to explain why. By continuing to read, you are participating in the process of my figuring out how to communicate this. Continue at your own peril.

I think this is one of those ideas we so much don’t believe in that it’s difficult to talk about. We don’t have language for it. That’s partially why it’s so important to talk about.

An Example (Sorta)

I’ve continually had trouble keeping track of what the balance in my bank account is. I’ve tried all sorts of approaches, and I’m still searching for a great solution[1]. It’s been years of trying, now, and still I’m regularly at a loss as to how I overspent this time.

That’s because humans are only good at certain things. We lose sight of this because the myth of our time is that we’re rational beings. Mentally keeping track of the state of transactions, past a certain number[2], is not the sort of thing humans are good at.

The Point


  1. Infrastructure can make it hard to live well.

  2. We can rebuild infrastructure.

  3. If we can improve the world, we ought to.

There appears to be a dearth of deeply socially conscious, technically minded people (I suspect I might be wrong on this point, and hope I am). The people who are most socially conscious seem to be less technically minded, and vice versa. Perhaps this is just a result of the way some predisposing traits tend to be distributed. In any case, it leads to some nasty outcomes.

The Impact

It’s a bit like something Einstein said, that’s unfortunately a bit of a cliché:


“Science without religion is lame, religion without science is blind.”[3][4]

Without the socially conscious element, we all end up leading miserable lives because we’re not caring for each other. On the other hand, without the technical approach, we often can’t actually find the underlying problem, much less fix it.

This is why I care about infrastructure. Not because solving technical problems is fun (though it is), but because I feel a duty to contribute to the betterment of the world I’m part of. This is why I think you should care about infrastructure, whether you are of a more technical or socially minded persuasion to start with.





  1. Simple is the best thing I’ve found yet. Check them out if you need a good bank.  ↩

  2. That’s a pretty small number, by the way. Check out the wikipedia article.  ↩

  3. Here’s a free version of the essay this apparently originates from.  ↩

  4. While I’m at it, here’s another, longer quote in the same vein, from Zen and the Art of Motorcycle Maintenance:


    “We have artists with no scientific knowledge and scientists with no artistic knowledge and both with no spiritual sense of gravity at all, and the result is not just bad, it is ghastly.”  ↩


studying and opportunity cost

I hadn't realized it, but I've been doing a stupid thing for years now. You see, I consume a lot of information. Between the various sources, it's probably dominated a goodly chunk of my life.

So, I was emptying out my inbox in OmniFocus (my GTD app), because it had gotten so full it was unusable. After I'd moved the actionable, important things back into my newly clean inbox, I looked over the previous inbox quickly to check for obvious patterns. I found it was almost entirely books to read and talks to watch, mostly tech related. At a certain point of my development as a programmer, that was arguably a useful thing. It's helped me develop a breadth of knowledge many of my peers don't have.

Opportunity cost (Please, stop and go read the wiki article if you don't know about it. This post will still be waiting.) is a bitch, though. You know what I wasn't doing, towards the end of this, so that I could keep taking things off of this list? At least two things:

  1. I wasn't coding.
  2. I wasn't having fun.

That's stupid. I can't explain enough how stupid that is. Still, it's understandable how I got there. In fact, I would still not discourage beginners from taking an approach somewhat similar to the one I took when beginning. The approach just needed more refinement.

Go for breadth, sure. Eventually, you find some areas you really care about, and you'll start to dig in. Cool. You're not generalizing quite as much. That's good for you. Once you're generally competent and relatively aware of what you're interested in, you should focus. Firstly your consumption, since that's what you've started with so far. More important, however, is to do something much harder.

Create. If you code, then code. If you write, then write. If you care about the state of the world, fine, go learn about it! Then, share your ideas. Organize. Take action.

Be careful not to act on old, congealed values, at the expense of the things you presently value. That's what I was doing when I kept filling up these queues of content, and slaving away at consuming from them. It didn't help me, and it won't help you.

When your priorities get out of line with your values (and they will, however briefly), you'll end up working yourself to death, dissatisfied all the while.

jolly urban hermits (or, why i'm buying another kindle)

Today, I left my kindle on the bus because I was in just such a great state, I couldn't be bothered to mind my belongings so I didn't leave them wherever. So, I did leave one somewhere. Specifically on the bus seat across from the really cute punk girl who was playing with her nose piercing incessantly, which made it look like she was picking her nose (though I'm pretty sure she wasn't because she seemed more hygienic than that).

Tomorrow, I'll call and see if I can recover it. That would obviously be good. However, contrary to a recent tweet, I decided to buy another.

I did a quick mental walkthrough of the tradeoffs I'd be making if I chose not to get another one. In brief, I'd be choosing resiliency to a possible but not likely worst case (some urgent and important expenditure) at the cost of certainly doing less of a thing I highly value (learning). Whereas, if I do get another, I'm choosing to prioritize what my values over fear.

Also, I still have my savings from this check. The question that it came down to is whether I could delay any purchases that come up for eleven days. I decided that learning is more important than any of the purchases I've not dealt with yet.

I should clarify that this is not money for food, or fun (those are separate categories in my current budget). This is money for things like kindles, kitty litter, water filters, paper towels, haircuts, what have you. There are very few things so urgent I wouldn't be able to delay. Worst case, I could just use my savings for what I intended it for, dealing with emergencies.

That's risky. This is a new, fragile budget. If I consistently push the limits, I'll never save a dime. That's not what I value. Clearly, at the least I need to delay anything I can rather than dip into savings. On the other hand, it is less obvious that I should be anxious about spending the last dime of my other categories. They're allotted for the purpose of being spent, to prevent any need of spending savings. If I use them effectively, my home should be stocked such that I can live as a jolly urban hermit and not spend any money on anything.

Which is ultimately why the kindle matters: because it supports me being that jolly urban hermit. You have to invest in the structures that support doing the simpler, more fulfilling things.

introduction

Hi. I'm Ezekiel Smithburg, also known on much of the web as tehgeekmeister. No, I don't particularly dig that name anymore, but that's alright. I'm happy to stick with it, as it seems a little too fancy to switch away from it just because it's not-great.

I'm going to be writing about various things here. Nothing fancy. Just my ideas, my responses to things. Whatever makes it through my writing on my 750words and is worthy of the world.

Expect talk of values, wisdom, hacking, data, and everything in between. Also, expect at least a post a week. I've started the 750words challenge this month, which means I've committed to writing 750 words at least once a day. I find many days that I feel like writing even more, which is why I've decided to take this on additionally. I need to scratch this itch to write a lot, since it's presenting itself for the first time in my life. That's especially important considering that it's one of the skills I've most wanted to develop my whole life.

Alright. I don't have anything sufficiently interesting to add at the moment, and I need to get to sleep. Like I said: expect something once a week. For this week, before Sunday night is over.