I was just filling out a survey for my college CS department (btw: way to go Williams CS for actually caring how people value their experience ahem 10 years down the line) and was asked, in the context of my job today, In what ways do you utilize what you learned as a Computer Science major?

I lead teams that build software, so I need to understand how software is built and how the people that comprise these teams think. Most of them are trained as computer scientists, so that helps. But more importantly, the tools of CS thinking (decomposing problems, abstractions, data structures, programming languages, automata theory, etc.) are very helpful in figuring out how to decompose and implement solutions to recurring problems, and that form of thinking is applicable in the context of business processes, team dynamics, and many other non-technical realms.

A discussion at BarCamp Boston 7, on 7 Apr 2012. The discussion was broad and interesting; these are only my personal notes to guide the discussion. Whether you were there or not, comments are welcome below.

  • What is a product manager?
    • “Build the right product.”
    • Understand what the right product would be.
    • Learn from the market constantly.
    • Focus the team.
    • Concretely:
      • Be the “glue” between Marketing & Development.
      • Talk to users/customers, build the feedback loop.
      • Maintain spec & schedule.
  • Why be a product manager?
    • I got over-loaded on super-technical coding.
    • I like figuring out the problem to solve more than solving a well-specified problem.
    • I wanted to use my communication skills.
    • I wanted to learn to be the awesome PM that I never had.
  • How to make the transition?
    • Most PMs transition from somewhere.
    • Marketing, Engineering, MBAs, …
    • Startup vs. big company?
    • My story: where I looked, how I got in, what I miss about engineering.
  • What brings you here?
    • Who’s a PM now? Which of you came from an eng background
    • Who’s an engineer?
    • Who’s a PM?
    • How can we help?

I love to build things. Maybe the legos worked too well on me: there’s just something about taking little pieces, connecting them together, and watching something interesting take shape. Maybe it’s the inherent surprise of the process–the way the reality compares to the imagination. It’s different, richer and more convincing; and you’re different, because you can now compare what you imagined and what you built, and see what worked and what didn’t.

People sometimes talk about imagination as if it sets a standard too high for reality. Imagination doesn’t feel flawless to me, though. It feels like a pencil sketch of a 3-D object: mostly a bunch of rough guesses. Some things over-precise in unuseful ways. And all of it is flattened by necessity of the medium. Imagination is limited: I can’t remember all of the details of a big project well enough to move around it all in my mind. So part of the reward of building is that I can test and refine that imagined sketch, and another part is the freedom to turn my imagination to something new, whether it’s the next step or a whole new project.

The ability to turn the imagination to something new satisfies two fundamental human desires: learning and mastering your environment. You learn by figuring out problems, and you master your environment by solving problems that affect you. Those sorts of problems are so rewarding to solve that I’m sometimes too aggressive about discovering them. Just ask my wife about some of the “while I’m at it” projects I’ve done around the house. The trick, if you want to be efficient about mastering your environment over the long term, is to know when that feeling of mastery you gain from an activity–say, trying a new time management system–is an accurate signal of problems being solved, and when it’s an illusion of a solution. The illusions are mental gimmicks: it feels like you’re doing important work, breaking down barriers. But before long you’re facing the same problem again, no better equipped. On the bright side, at least you know there’s a nontrivial goal motivating you. And then you can invoke the whole process recursively: imagine all the previous attempts at a solution, attempt to discern the pattern, and master that. The more you do it, the weaker the illusions become: instead of believing a gimmick, the temptation to believe signals something more tangible, more personal. And the easier the process gets.

For the past few days, I’ve noticed that my toilet’s been making a quiet whistle-y leak sound. After running it with the lid off the tank for a few days, it’s clear that there’s a slow leak. Even if you don’t hear it, you can see the water build up to the emergency drain.

I’ve never fixed a toilet before, but I have made a few adjustments here and there. How complicated can it be? I probably just need a new thingamajig, which after some Googling appears to be called a ballcock.

Since I would normally visit a Home Depot store for a new thing of this sort, I try their website. They have one big Toilet Repair and Maintenance section that appears to have 50 levers, two flush valves, and zero ballcocks.

I think about trying Lowes.com, which may or may not exist, but then decide to check Amazon.com.

In the first page of search results for “toilet repair” I see a picture of the exact thingamajig that’s in my toilet. Seven bucks, not bad. And then I read the first “review”, which explains how to remove it, disassemble it, and clean out the gunk that is likely to cause your problem.

I remove it, clean out some gunk, put it back, same problem.

Then I re-read the directions, actually follow them completely, and discover I completely missed the point the first time around. I put it back and switch the water back on.

Quiet. Problem solved, costs nothing, makes me feel like a hero. Amazon, you are now my default store for everything.

I’ve now been freelancing long enough that I can talk about some of the things I’ve learned from it. And without a doubt, the biggest thing I’ve learned is the link between effort and reward.

In a normal job, this link is pretty nebulous. You can work for two hours, catch up on some blogs or TV, and run some errands, but if you manage to say one or two clever things in front of your boss that day you will probably remain employed.

If you’re in the top 10% smartest workers, an average of two or three hours of work a day is probably enough to exceed the productivity of almost all your coworkers, and not only keep you employed but keep your bosses somewhat impressed. You can earn a comfortable living this way, and have a more relaxed lifestyle than just about anyone who’s not retired. But you will not be challenged.

Billable Hours

Freelancers usually bill by the hour. An hour of hacking on the project is billable. An hour of reading blogs about technologies you might consider using in the project a few months from now is not billable. An hour spent at the grocery store at mid-day is not billable. Even twenty minutes spent “resting” in the “restroom” is not billable.

You might not believe me unless you measure, but I think an average workday for most computer programmers involves about 3 billable hours of work. Furthermore, there is great variance in the amount of billable time you’ll get each day over a week or two. Some days you’ll rack up 6 or 7 billable hours, maybe even 9 if there’s a release coming up and you’re loading up on coffee. But you’ll easily revert back to a low average with a day of zero billable hours.

I found this out when I started noticing that on a low-energy, mediocre day of freelancing, when I felt I had basically been at work all day, I’d often end up with as little as half an hour of billable time.

Half an hour. I don’t think I’ve ever been exceptionally stupid or exceptionally lazy, but I do tend to procrastinate, and by golly, I’m good at procrastinating. I am so effective at delaying work that I didn’t even realize how effective I was, until I thought about how much money I made on one of these days and realized that it wouldn’t even cover my rent for the day. Let alone ramen noodles.

The billable hour is, to me, a matter of professional ethics. I don’t assume that a workday consists of eight billable hours, and just parcel up whatever I did that day into those buckets. I consider time billable when I’m actively creating value directly for the client. I’m sorry that sounds nauseatingly corporate, but it’s the best I could come up with.

So getting more billable hours, i.e. making more money, is not a matter of being clever or knowing some trick. It’s a matter of stamina.

Programmer Endurance Training

Once you start to see your monthly paycheck as an endurance challenge, a few things change. You start to value consistency more, and brilliant ideas less.

That was kind of hard to write. Putting it that way seems to hide the intellectual challenge of making software, as if it’s just a matter of putting in the time and following a plan, like painting a house. What if I just become a thoughtless code factory, like some sort of pathetic outsourced ASP.NET programmer who just wishes he could charge by the line of code?

That hasn’t happened yet. Instead, I’m awakening to the patterns of lies I used to tell myself about the quality of my output. I know I can’t reach perfect consistency: sometimes I’ll have awesome days when I get a zillion things done in six hours, and other days I’ll only be able to crawl along for four hours of work before some welcome distraction proves irresistible.

On the other hand, I’m now acutely aware of when something I’m doing doesn’t qualify as work. I have a good idea of how many billable hours I can work daily without burning myself out. And this way of thinking and planning is useful not only for doing the work that pays my bills, but for any work I care about.

And so, after a few months of freelancing, I know that I have learned to work much, much harder than I ever did back when I had a salaried job. And I can work that hard for a client, or for myself, or a bit of each.

Really, I can hardly believe how lazy I was.

Update 9/10/09: The treadmill was fixed under warranty. One important point was that my walking belt had worn down – it was replaced as well, which significantly reduced friction and allows the motor to operate with far less strain. Now I lubricate the walking belt more frequently in order to keep the belt in good shape, and so far things seem to be working fine.

About a week ago the treadmill I use in my treadmill desk — a Nordic Track A2350 — wouldn’t start. The display turned on and read “1.0 mph” but there was no movement. Then I turned it up to a higher speed. Still nothing. Then some sparks came out of the motor, the treadmill went dead, and the circuit breaker on my surge protector shut it off.

My treadmill is toast. Good thing I have an excellent warranty.

But if I may generalize from my experience so far — this one that just died is my fourth replacement motor, IIRC — the average home treadmill isn’t set up for desk use. The motors aren’t geared to be efficient at 1 to 2 mph, or for many consecutive hours of use. Really, the treadmills are built for the most common use case: moderate activity for a couple of weeks followed by years in the garage.

I’ve already attempted to improve airflow and cool the motor using fans. Is there a practical way to effectively modify the gearing so 2mph isn’t such a heavy load? Are there other ways to keep an electric motor happy and cool?

1. Writing Workshops

I took a couple of poetry writing workshop classes in college. They’re an astoundingly effective way to improve the quality of your work. The basic premise is that you get a bunch of people around a table and discuss their work. The moderator selects which works will be reviewed, and everyone reads them (usually before the actual meeting, especially if they are not very short). When your work is reviewed, you’re not involved in the discussion — you’re explicitly forbidden from saying anything until the very end. The end result is that you can’t play the defense; you just have to listen until the end, where maybe you make some clarifying points. Sometimes the criticism is bogus, but, especially if your moderator is good, it can be life-changing. It shows how smart a group can be when egos are held back. Like most great learning experiences, some people freak out and start crying, but if you endure and listen then both your skill and passion can grow.

Richard Gabriel’s book, Writers’ Workshops & the Work of Making Things is an interesting explanation and analysis of workshops in a variety of creative settings. Gabriel is a hacker-turned-poet who thinks workshops are an underutilized source of magic for software makers; I totally agree.

2. BarCamp and Open Space Technology “Unconferences”

If you’ve been to a BarCamp, like the three we’ve put together in Boston, this one shouldn’t surprise you. BarCamp is just an application of the simple group behavior tricks described by Harrison Owen in Open Space Technology: A User’s Guide. It comes down to something very simple: if you give people a way to communicate that emphasizes the ideas and not the personal status of presenters, they work together in ways that develop the ideas.

3. Google AppEngine

You probably could have guessed this one from my prior glowing blog posts about it, but as I’ve continued to use AppEngine I’ve begun to understand and admire the way it’s built more and more. AE has scalability by default: you can make your app scale poorly, but you’d have to work at it. Once you bend your brain away from relational databases a bit, AE has a surprising degree of elegance. Gloriously, there is no “Object Relational Mapper”. Queries are explicit but they’re also readable, in nice little Python code. Schema evolution isn’t an awkward ordeal: you can add a property, give it a default value, and whoomp there it is. And perhaps most importantly, the deployment process is (1) standard and (2) totally automatic. Automating deployment is now considered an industry best practice, and unlike many things described this way, is actually worth doing even when it takes a lot of work. Developing and publicizing a standard, easy, automatic deployment process for webapps might not seem like AppEngine’s main goal, but it may well show the light to a lot of hackers and companies.

4. Our Ability to Rationalize the Random

I’m convinced that one of human nature’s most entrenched bugs is the compulsion to seek specific causes for complex situations. It is something we need in order to learn from our mistakes, but it’s often such an overriding compulsion that we vastly underestimate the significance of Factors Too Unpredictable Or Uncontrollable To Compute, i.e. luck.

In a mostly efficient market, like the stock market, the primary determinants of a commodity’s value are understandable things like supply and demand. As recent events show, cultural and psychological factors are also powerful, but when a recession hits it still makes sense to look for causality because it’s quite likely we can learn something about governance or how to evaluate risk. So the cause-seeking impulse is quite valuable.

But in an inefficient market, like dating, that impulse becomes a vulnerability. The “chemistry” that we feel or lack with another person has its basis in a lot of things we can’t reasonably control, like the genetic- and current mood-compatibility of the pair. Considering the huge range of possibilities on either side and the tiny space of compatible matches in the middle, the most likely outcome of any date is failure. But despite this objective fact, it’s damn near impossible not to feel personally rejected if a date doesn’t go well. We go over our appearance and scrutinize every word we said, even though it might well be more productive to just try a lot more dates without thinking so hard about it. To reinforce this behavior, we go watch movies where people, if they’re good and willing to take some chances, eventually get what they want/deserve after, maybe, one or two attempts. Trying again is, of course, necessary if you’ve failed once and want to succeed, but you probably have to try again a statistically significant number of times.

Powered by Google Cemetery

This handy map was brought to you by Google Cemetery.

If rura.org, voo2do.com, or some of my other sites weren’t working for you this morning, it may have been a blip in the domain name service I use. It’s run by my registrar, Gandi.net. Despite this blip, they’re a very good registrar. Though not the cheapest.

Today I had to mail my first estimated tax payment ever. Since I waited until the last minute, I wanted to go to the post office and make sure it would be postmarked today. So I get in the car and drive to Davis Square, where I am lucky enough to find an open parking spot in my favorite place – right on the cross street behind Redbones. To my delight, a metered spot is open.

Hmm. No quarters in my pocket.

Hmm, no quarters in my car’s little coin drawer.

Well, maybe I can get away with it for 10 minutes. I’ve only gotta stop and the post office and maybe grab a burrito…

Well, maybe there’s some weird exception for Somerville residents. I should check the meter…




Next Page »