Cater to Your Personal Pathologies

Managing your time, I’ve found, is mostly a psychological problem rather than a logistical one. Many books lay out a particular system – from the Covey quadrants to David Allen’s 43 folders to a sea of nifty acronyms. What I’ve found from trying them out, and watching others try to use them, is that a system only works if it matches your particular needs. More specifically, if it caters to what I call your pathologies.

We all have some idealized version of ourselves that we aspire to be. This paragon of virtue may never procrastinate, or always rise above temptation .. whatever takes your fancy. Then there is the actual, flawed, imperfect person we actually are. Many people try to use a system that ought to work, rather than one that does work (for them). Hence a sea of unused DayTimer notebooks, mountains of abandoned organizational gear, and endless hopping from one To Do app to another. If cosmetics are “hope in a jar”, then organizational tools are “hope in an app” (or for the traditionalists, “hope in a binder”).

So what do I mean by pathologies? I don’t know what yours are, but I’ll share some of mine.

I Hate Clutter

Some people feel comfortable surrounded by things. They naturally keep papers in piles and leave lots of things lying out on desks. Not me – I like a spare and streamlined work environment. How does this relate to being productive? A friend of mine built an elaborate set of rules for sorting his email. Messages were passed automatically to a lovingly organized cascade of email folders. It worked well for him and was really cool, and I thought I’d give it a try, too. Result: disaster.

All my mail would come in, be sorted into the appropriate category, and I would look at it and be soothed by its orderliness. The problem is that I achieved this calm and pleasing result without actually doing anything. I had to throw away the whole thing and go back to having everything pour into my inbox and annoy me. Then I would be motivated to clean it up, by actually looking at the mail, making decisions, and taking action.

I Like To See My Whole World in One View

When I’m figuring out what to do, I like to see everything that matters all at once. I get stressed out when there are things I need to be thinking about, but they aren’t in front of me so I’m not sure I’m remembering all of them.

I like to plan out my week every Monday morning, and for many years, I have used two facing pages in my notebook to show: the big projects I’m responsible for, any deadlines for the week or in the near future, active to do items, key appointments, top priorities for the week, and top priorities for each day. It is a challenge to capture all that in two pages, but I’ve found it to be a really good exercise – it forces me to think about what’s important and distill it. Each time I have a new kind of role, I have to change those two pages. What I needed to capture when I managed a big team was radically different than when I’m a team of one in a startup and mostly work by myself on a set of projects. I keep those two pages open on my desk most of the time, so I’m always reminded of the most important things that I’m supposed to do that day and that week.

I could keep going for a while (I like to write and draw on paper, I can’t use bound journals because pages can’t be inserted or rearranged, ..), but I’ll spare you, because the important thing for you is to figure out what your pathologies are.

Sleuthing Them Out

A good way to start is to ask yourself:

  • What system has worked well for me? What did I like about it? Why did I like using it?
  • What didn’t work? Did it fail (you kept forgetting to do something important), or was it too much overhead, or did you just stop bothering with it? Why?

Remember, this is not about some idealized vision of yourself, or what works for somebody else – this is all about you. When you answer these questions, especially the second one, try to avoid value judgments – it’s not constructive to beat yourself up with things like “I’m lazy” or “I suck at organization”. Stick to thinking about what you have tried, what worked, and (for the things that have not) why they failed you.

The answers might be psychological (“I like writing things on paper because it is more visceral and I feel more committed to getting it done”) or mundane (“I didn’t carry around the binder because it was heavy and didn’t fit in my bag”). Don’t scorn the details – your whole system can founder if you just don’t like using it. If the color of the notebook bugs you, or you have a fetish for fountain pens, pay attention. If you are using an app, the details of the user experience matter a lot. “This app made me set up all these categories and I just got lost – I need something simple.” Or “I hate looking at the interface – it’s ugly”.

Your “system” might be very informal – maybe you like post-it notes on your monitor. Or piles on your desk organized a certain way. As long as it works for you, that’s what matters. Try to figure out how to eliminate any friction that prevented you from using (or wanting to use) some solution. Try to enhance any quality that you really like.

At the end of the day, the measure that your approach works is that you know what is important and you get it done. Then you have created a magical accelerant for your life.

Congestive Meeting Collapse – Scheduling Gridlock

I used to spend most of my day in meetings.  At one point, when I was managing a large team, I routinely had weeks where there were a total of 2 hours between 9 and 5 that I wasn’t in a meeting .. for the entire week.  Anything I needed to work on that didn’t involve other people had to happen early or late.  Such as answering the crushing quantities of email that stacked up while I was in meetings and actually paying attention.

Now that I’m in a startup, where I’m typically in a traditional “meeting” for a couple of hours a week total, it is amazing how much gets done.  When I touch base with people from my previous employer, the scheduling overhead can become darkly humorous.  Routinely somebody will ask to get together, and then schedule it for a month later.  That slot then gets stepped on by some other meeting, often more than once (and typically at the last minute). It’s common for it to take two to three months to set up a conversation with more senior folks (!).  Really?

I think there is an interesting analogy to the performance of networks.  When the amount of traffic reaches a certain fraction of a network’s capacity and the scheduling protocols are not optimal, the network achieves what is called congestive collapse.  It means that the network is in a stable state of low throughput.  Is your company permanently in “congestive meeting collapse”?

The Damage it Does

When everyone is so hyper-scheduled

  • There is no slack in the system.  If something important comes up, you have to step on an existing meeting to get everyone together.  When one meeting is moved, that causes a cascade of rescheduling among all the attendees, which moves other meetings they were in, and on outwards like ripples in the water.
  • Everyone is in meetings all the time, so they are frustrated, bored, and don’t have time to work on individual projects except outside normal hours.  Anything “optional” (like thinking deeply about the state of your world, the future, and what you need to do about it) gets squeezed out by something “practical” but often much less important.
  • A huge amount of time is wasted scheduling and rescheduling.
  • “Medium importance” decisions take forever.  Big ones get attention; the medium ones that require a number of key people to get together and resolve something, but aren’t a crisis, get rescheduled and rescheduled and take much longer than they should.  This gums everything up and makes the organization inefficient.

Why Does This Happen?

Clearly the problem is that there are too many meetings, but why is that?  There are some obvious kinds of inefficiency, such as:

  • The Serial 1:1 – Some meetings are a lazy way for a manager to talk to folks on their team.  Everyone else sits glumly listening, doing email and/or propping up their eyelids with toothpicks, as the manager talks in turn to each person.  Now and then something relevant to the whole team comes up, but mostly it is a series of 1:1’s with bystanders.  Regular team “status” meetings are often like this – ugh, don’t do it!
  • The Inefficient Mess – There is no clear agenda, things wander along without being well managed, and action items aren’t captured efficiently.  Something that could have been handled in 15 crisp minutes takes 90 minutes, and often bleeds over to another meeting because people weren’t clear about what they were and weren’t accountable for doing afterwards.  This is lampooned by John Cleese in a fun training video called “Meetings, Bloody Meetings”.

But annoying as they are, bad meetings like these are just one-off problems that can be fixed with some coaching.  The much more insidious villain, I’ve found, is too many stakeholders.

As organizations grow, and as more groups are needed to be successful, every important decision develops a long list of people who legitimately have a stake in how it is made.  For example, consider a major shift in the strategy of a particular product.  It affects the people who design the product, build the product, communicate with customers, sell the product, and support customers.  It might also involve legal issues, HR issues, and resetting the expectations of senior management.  In a matrixed world, even one stakeholder can drag in multiple people – sales organizations often have somebody who owns the worldwide quotas for a particular product, for a particular market segment (“enterprise customers”), and/or for a particular regional market (“Germany”).

Thus, two things tend to happen.  One is that many stakeholders get involved in the decision.  They participate in meetings to discuss it, commit to it, implement it, learn about it, and review progress on it.  They all try to get invited to the most important meetings, so they are “in the loop”.  As you scale up, this leads to madness.  The other result is that it is so hard to get things landed that only the most senior people in the organization have enough authority to drive key decisions.  So more and more things land in their lap, disempowering everyone else and slowing things down to a crawl because nobody can get the meeting scheduled with them(!).

Sometimes you can dodge the problem by keeping teams small – the so-called “two pizza team” approach.  But if you are successful, eventually things tend to get big.  And at scale, I think the only solution is to cleanly and aggressively delegate authority and to be absolutely hard-core about defining a minimal set of people who get to influence a decision before it is made.

Both of these are hard and involve risk.  Sometimes, the decision-maker will screw up.  Bad decisions will get made that could have been avoided by involving other teams or more senior people.

But the price of avoiding those mistakes is to live constantly waist deep in mud.  Everything you do, every decision you make, is a slow-motion struggle to make progress.  The cost may be less apparent, but in a world moving at lightning speed, can you afford to carry that kind of a burden?  As Teddy Roosevelt said, “in any moment of decision, the best thing you can do is the right thing, the next best thing is the wrong thing, and the worst thing you can do is nothing.”

We Pace Within The Bars of Our Own Imagination

Have you ever heard somebody say, “I wish I could <do something or other>”, with a wistful look in their eye?  And you want to grab and shake them and say, “you CAN.  Do it NOW!”  And it is just so obvious to you that what they wish for is right there in front of them, ready to be seized if only they would have the gumption to reach for it.  Well, guess what: a lot of the time, you are that person.

We are the biggest buzzkill and the harshest critic standing between us and our dreams.  We shrink back from the echoes of old failures, from carping and doubting voices that ring inside our heads.  “I’m not the type who starts a company.”  “I’m not a natural leader.”  “I’m not creative.”  “I’m not a good writer, or an artist, or an athlete.”  We fence ourselves in behind these imaginary barriers, looking wistfully at the banquet of delights that we think is permanently locked away from our reach.

So What do You Want?  Really Want?

A fun way to start breaking through is to do a little fantasizing.  Try finishing these sentences:

  • “Of course it isn’t practical, but I’ve always wanted to …”
  • “I don’t do it any more, but when I was a kid I always loved to …”
  • “The times in my life when I was most exhilarated and at my best, I was …”
  • “In my dream job, I …”
  • “In the life that I daydream about, ….”

Get something down that you can look at.  Maybe write a journal entry on paper or on a computer, mindmap on a white board (with an encouraging friend, if that works for you), or draw on a big piece of paper, or collage a poster full of pictures.  Find some cool images on the Internet.  Whatever gets your juices flowing.

We’re not trying to be practical here, we’re trying to dream a little.  Always wanted to be an astronaut and explore other galaxies? You are five feet tall and walk with a cane, but fantasize about being an NFL running back or an Olympic athlete?  It’s all good.

After you’ve had a shot at this, and you sit back and take a look, you might suspect that some of your fantasies are a lot more fun in your imagination than they really would be in practice.  That’s probably true.  There is a reason that the phrase “it reads better than it lives” comes up a lot in adventure tales.  But you’ll never know until you try something, whether you will really like it.  And you may stumble across some related activity that is even better.  I backpacked quite a bit when I was in school, living out some fantasies that I had when I was a kid.  I discovered that backpacking is fun, but what I absolutely loved was rock climbing.  And I did quite a lot of it, in some amazingly beautiful places, and had adventures that I still often think about.

It takes a bit of work to figure out what will make you happier and more fulfilled.  You don’t have to – there are intelligent and highly paid people working hard to take care of that for you.  Their siren song is everywhere – how great your life will be if you have a fancier car, a bigger house, more fashionable clothes, and glamorous vacations.  There is overwhelming evidence that these things won’t make you happier, but perhaps you are the exception.  Run, hamster, run .. maybe you will get there, if only you can make that wheel spin a little faster!

Life Isn’t All or Nothing

One of the traps that I see people fall into all the time is being much too black or white about their dreams.  “I want to be an Olympic downhill skier, but I’m 40 so obviously that’s not going to happen.  So instead, I’ll have beer and chips on the couch.”  Uh huh.  Or, somebody is working full time and is a parent so they decide that their dream to be an artist is hopeless.  But you don’t have to be a full-time artist in order to make art.  If you are fascinated by outer space, you can study astrophysics, go to lectures, paint scenes set on other worlds, go to space camp, build your own telescope, and visit observatories.

If you love something, then weaving aspects of it into your life can be richly fulfilling, even if you can’t do it all the time or do it to the level that you fantasize about.  After all, even an Olympian only gets to compete in the games for a couple of days every four years.

Just Take a Step

Now you come to the crucial all-important step that so many people leave out.  They have dreams, but they don’t turn vision into action.  A grand goal like “become an artist” or “write a book” is great, but you can’t sit down on Monday afternoon at 2pm and become an artist.  You have to turn those ideas into concrete actions you can do right now.

To become an artist, maybe you need to research art classes at a local school or get an instruction book on some techniques you want to learn.  If you want to start a company, attend a local get-together of entrepreneurs or read a book about it.  I like to think about this as “just take a step”.  Write down everything you can think of that you know exactly how to do and can get done in less than an hour.  A big goal may seem impossibly daunting if you think of it as a whole, but surely you can spare an hour?  And then, after you’ve spent one hour, pick the next thing and spend another one.

Magic of Starting

There is a wonderful quote, which is commonly attributed to Goethe.  Sadly, that’s not exactly true.  But it’s great anyway, even if it has a mixed ancestry, and I have repeatedly found it to be true: “Whatever you do, or dream you can do, begin it.  Boldness has genius, power, and magic in it.  Begin it now.”

Kissing Frogs Part 3: Frog Dos and Don’ts

The first two posts in this series were from the point of view of the interviewer.  But suppose you are on the other side of the table?

Do’s

Do your research.  It’s really disappointing for an interviewer when a candidate doesn’t have the first notion of what the company or the team does, and it’s great when they have intelligent questions.  “I tried out your product, and it seems like one of your big challenges is integration with systems that customers are already using.  Is that right?  How are you handling that?”  So much better than somebody who doesn’t have a clue.  These days you can learn staggering amounts about almost anything on the Internet.  So check out the company, the project, and the people.

Do practice.  Interviewing is unnatural for most people.  You won’t have concise soundbites ready to roll out about the work you did in previous jobs.  You may be rusty or misremember the details.  It’s very, very useful to have some mock interviews before you go into the real thing, especially if you can do it with experienced interviewers who will be honest enough to give you candid feedback.

Do interview them.  You are preparing to commit huge amounts of your time to this team and this project.  It’s probably the biggest investment decision you are going to make – your time is your biggest asset.  So learn as much as you can while you are there.  Are these people you actually like?  Is the work inspiring?  Will you learn something and stay engaged for the long haul?

Do prepare.  Be ready for hard questions.  “Why didn’t you finish school?”  “Why do you jump from job to job?”  “Why have you been unemployed for the last two years?”  “Why did the product you worked on get panned by every review?”  Look over your resume through the eyes of a stranger (or ask another person), and think up the most difficult questions you can.  Answer them honestly, be open about mistakes (if appropriate), and tell people what you learned.  Don’t be bitter, don’t whine about your past co-workers .. be constructive.

Do be concrete.   I think the best questions are not open-ended and general.  But lots of interviewers use them, anyway.  Don’t meet vague questions with vague answers – ground your answer in detail.  Tell stories.  Not “I think I’m very results-oriented.”  Ugh.  Instead, “in my last job, I drove the marketing campaign for Jumble.  It was a tough push, but we delivered on time into five different channels, driving a positive awareness of 44% – the best result of any campaign our company had done.”

Do be passionate.  It’s deeply dull to listen to somebody drone on in a monotone listing facts and figures about their career.  Boorrrrinnngg.  It’s very interesting when somebody’s eyes light up as they share personal stories about things they’ve done that inspired them.  Find things to talk about that you are excited about, that you loved doing in previous jobs or educational experiences.  You’re a human being, not a resume – let people get to know you.  Share yourself and what you love.

Don’ts

Don’t assume!  If you aren’t sure you understand the question that you are supposed to answer, don’t launch off and answer it anyway.  You can ask, or you can explain.  Start by asking: “when you asked me to design an operating system, did you mean something like Linux, or something else like an embedded system?”  Some interviewers want you to dive in and don’t want to be interrogated, however.  You can usually tell immediately based on their reaction to your first question.  In that case, I’d stop asking and make some assumptions, but I’d be explicit about them.  “Ok, I’m going to assume unless you stop me that you want an operating system like Linux.  That means a general purpose server OS that …”  Then you are diving in and moving forward but are clear about the assumptions you have made.  In any case, don’t ask too many questions – the purpose of the interview is not to collaborate with your interviewer on defining an extremely precise question, it’s to show that you are good at answering them.  So make sure you spend most of your time on the answer.

Don’t be prickly.  Interviews are inherently awkward, and some people like to put you under pressure to see how you perform.  I don’t like that approach as an interviewer, and don’t use it, but many swear by it.  That means they are going to push you.  They’ll ask tough questions or brain teasers and watch you sweat.  They’ll push back on your answers, with varying amounts of respect, to see how you handle it.  Don’t freak out .. just stay calm, and focus on the answer, not how you feel about the situation.  That doesn’t mean that you should allow yourself to be abused or mistreated, but keep your cool even if the other person is pretty hard on you.  If you think of it as a test, and letting yourself get emotional is failing the test, that might help.  Don’t let them throw you.

Don’t be desperate.  This is easier said than done, especially if you ARE kind of desperate to get the job.  But realize that the odds may well be against you in any particular interview.  They may have a favored candidate lined up and are just checking to make sure they aren’t missing a bet.  You may be a bad fit for what they think they need in the role.  The more you build up the job in your mind and get wound up about how you absolutely have to get it, the worse you are likely to perform.  So be hungry, give it your best shot, but don’t think it all rides on that one interview, because life is mostly not like that.

Don’t lie.  This should go without saying, but a lot of people seem to think it’s ok to fudge on a resume.  Who is going to find out, right?  Wrong.  In the age of Facebook and blogging and LinkedIn, it’s crazy to be confident that you can get away with it.  If the employer finds out that you have been deceptive, that’s probably game over.  And the world is a small place, so there is every chance that they might tell the next company you talk to.  So in addition to it being immoral, it’s also dumb.  Just don’t go there.

I hope that these ideas help you prepare for your next interview .. good luck!

Kissing Frogs Part 2: Conducting the Interview

You’ve done all your prep, and now the candidate is sitting there looking at you.  You have an hour, at the end of which you are supposed to have a smart and insightful analysis on whether to hire them or not.  How do you spend your time?

Have Them DO Something – Don’t Ask General Questions

One of the most common mistakes is to ask open-ended softball questions.  “What are your strengths and weaknesses?”  The candidate then babbles on about how disciplined and passionate they are, and how their big weakness in life is that they just work so hard, and take things so seriously – they struggle under the burden of an extreme work ethic that was just the despair of their former managers.  And now several precious minutes of your interview are gone, and you haven’t learned a darned thing.

I think it’s infinitely better to ask them to create something.  Write code on the board for a multi-threaded lock implementation.  Write the Javascript code to update the notification count when a new message arrives.  Design a UI for managing notifications.  Design a set of metrics to monitor the state of the business.  Create a plan to track and land a milestone.  Whatever is appropriate for the job you need them to do.

If the design involves a skill they need to have, you will quickly see whether they really have it.  Many people can do a lovely job describing a design they know but are lousy at creating one.  Confronting a blank white board and having to invent something on the spot cuts through a lot of blather.  If it’s a skill they are still learning, you will also discover a lot in watching them try to tackle a real problem.

What To Look For

When I pose a design problem, whether the result is an algorithm or a visual design or a report or anything else, beyond the quality of the work, I’m assessing a number of other things:

  • Do they like solving this kind of problem?  Of course there is some added stress because it is an interview, but you can usually tell if they are enjoying the opportunity to dig into the problem or not.  I try hard to make an interview feel as much as I can like the real job – sometimes I will pose a problem that I’m actually trying to figure out at the time.  If they hate doing it in the interview, they probably aren’t going to love doing it all day long.
  • Do we make each other smart?  If we’re going to be working together in the future, hopefully we have a good working rapport.  Did the design conversation zip along efficiently and cover ground well, or were there constant misunderstandings and false starts?
  • Do they handle pushback well?  I always question some of their decisions (politely, of course).  How they handle that will tell you a lot.  The worst reaction is if they get mad, or they dogmatically insist that theirs is the best approach without explaining why.  Almost as bad is if they cave immediately and ask what you think they should do instead.  A great reaction is to explain the rationale for the original design, and to list a couple of alternative approaches and why they seemed less effective.  I hope they welcome new data, if I share something useful that would influence the design in a better direction.  In general, I want to know if they are passionate about finding the best answer, or about moving forward with their answer.
  • How do they handle underspecified problems?  I like to ask design questions without providing enough information, to see what happens.  The two most common failure modes are to flail around and to make wild sweeping assumptions.  If I ask you to design an airport, do you just freeze up, do you assume that it is LAX (rather than, say, an oilfield airport in Alaska), or do you ask?  In general, I’ve found that people who fall into either of those traps often have trouble if they get hired.  The freezers aren’t good at taking on hard new problems without having their hand held, and the assumers bull off in wrong directions and get themselves (and their teams) into a mess.

Other Questions I Like

 Once you have figured out whether they can do the work that is most important for your role, there are other questions that I’ve found effective:

  • Teach me about X.  Pick something that looks interesting in their resume – a skill they say they have, a project they worked on.  Have them teach it to you.  If it involves a design they did, ask them why they made certain decisions, and what they would have done differently in retrospect.  At the end of the discussion, do you feel well informed about the topic?  Any job I hire somebody to do will almost certainly involve explanations of complex topics, so it’s an important skill in its own right.  And, it will help you figure out how well they actually understood what they were working on.  If a very attentive listener can’t get a decent grasp of it quickly, they probably didn’t.
  • How would YOU interview somebody for this job?  This is a fun question, and I’ve found it is really useful.  It helps me understand what they think is important about the role and how thoughtful they are about testing for those characteristics.  It also reveals whether they have insight into other people and how to work with/manage them.
  • Share a great success and a disappointing failure in managing other people.  What did you do, how did it come out, and what did you learn?  If the person is interviewing for a management role, I want to know how they think about other people.  Are they insightful?  Do they passionately identify with the success of the people whom they managed?  If you are an experienced manager, you are pretty much guaranteed to have succeeded with somebody and failed with somebody, so you should have some interesting stories to talk about.  I also often pose a scenario – “Margaret is a superstar but runs roughshod over others, and you are going to give her a tough review calling her on it.  How do you prepare, what do you say, how do you handle it when she attacks you …”

Making the Call

At the end of the interview, you have to make a decision – “hire” or “no hire”.  Often, it’s obvious.  But if there is any doubt in my mind, I find it really useful to write down the reasons and talk them through with somebody else who has made a lot of hiring decisions.  By the time I finish explaining the analysis, I almost always realize that I’ve made up my mind, and can ground the answer in solid reasons.

The people you hire will largely determine how successful your team is, so choose wisely.  Good luck!

Kissing Frogs: Preparing for an Interview

One of the most important things you ever do is to interview people for a job on your team, and it’s hard to do it right – people don’t come neatly labeled.  But somehow, you need to figure out if this person is that great ingredient you can mix into the stew of your team and make it better.  I’m going to spend the next three posts on interviewing, and we’ll start with getting ready.

What Kind of Prince Do We Need?

We work at FriskyCo, a small technology startup, and we need to hire a great database engineer to design, build, and run our back end storage systems.  Let’s start out by making a very short list of hard requirements.  And really, these supposedly “hard” requirements are just “highly desirable” – somebody who has some other amazing strength might be a good bet even if they look very different from the person we thought we were looking for.

We’ll start with skills they need to have.  Ideally, our new hire would already be an expert in building, using, and maintaining highly scalable storage engines.  In fact, they’d have already done the job, with the same technology we want to use, for some other company.  Unfortunately, if we insist on that, there are a tiny number of people in the world who would qualify (the so-called “albino unicorn”).  We can hold out for that miracle, or we can accept more ramp and risk to get a broader candidate pool.

On the flip side, setting up a system like this is not for amateurs, so we aren’t willing to hire just any competent developer.  After a bunch of debate, we’ve decided we should look for these “hard” requirements:

  • Has built and deployed some kind of highly scalable system.
  • Is an expert at some industrial strength database system.
  • Is a skilled systems programmer.

But skills are not enough; it’s vitally important to assess team fit – whether the candidate will flourish in our team’s culture.  FriskyCo is a startup, which means we move fast and change our minds as we evolve the product.  They have to be able to handle uncertainty and not freeze or freak out.  They have to be inspired and passionate about the mission we’ve undertaken – we’re too small to have people who aren’t bought into the adventure.  We have a standard set of things we always look for as well around their nature – they are smart, not too arrogant, can handle pushback, and are driven to get things done.

Now we have a bottom line on what we need in a candidate (or at least what we think we need).  Note that we don’t have any requirements around education or “years of experience” – those can be useful indicators that somebody has what you actually need, but I think it’s a big mistake to focus on them rather than on your true requirements.

Architecting the Interviews

This is a crucial hire for us and we’re going to have a set of people talk to the candidate.  We’ve done a number of interviews together, so I have a pretty good sense of what each person does well.

  • John, the head of engineering, is a good all-around interviewer and does a great system design assessment.
  • Mary, the front end dev, has a good set of questions around designing a well factored database schema and a solid API.
  • Rajiv is good at straight coding questions.
  • I’ll test to see if they can handle our environment, if they have passion for the product, and if they have design insight.

By thinking about what each person should focus on, we are much more likely to get decent coverage.  Otherwise, everybody may ask coding questions and we won’t know if we have a good fit for the team.  Or, even worse, most people spend their time on team questions, and we don’t know if the candidate can actually build anything.  Also, the team is crazy busy, so giving each interviewer a concrete set of things to probe is much appreciated.  It isn’t a straight-jacket – if an interesting digression comes up during the discussion, everyone knows they can and should pursue it.  But each interviewer should really try to nail those one or two things that we’re counting on them to test, and have a firm opinion at the end as to whether the person is a hire from that perspective.

One tricky situation is that you are hiring for a skill that the team doesn’t have yet.  Suppose in our FriskyCo example, we don’t have anyone who knows databases well.  What to do?  Sometimes you can wriggle around this (maybe one of the folks can assess a schema, even if nobody knows how to design one).  But that’s pretty risky – it’s often possible for a glib person with weak knowledge to snow somebody who has even less.  So I always try to draft somebody from outside the team to participate in the interviews.  Maybe somebody from elsewhere in the company, if you are part of a larger organization.  A contractor you’ve worked with.  A friend who will pitch in as a favor.  There just isn’t any true substitute for somebody who is an expert at the thing you need to evaluate.

Interview Etiquette

Every candidate is interviewing us as much as we are interviewing them.  How they are treated will strongly affect whether they accept an offer, if we extend one.  So:

  • Don’t be clueless.  It’s really irritating when the interviewer isn’t sure what position you are interviewing for.  They haven’t looked at your resume.  They putz around, trying to figure out what to talk about.
  • Don’t be a jerk.  Enough said.
  • Don’t dither.  One of the most annoying things you can do is not to make a decision.  Interviewing at some places is like dropping a rock into a bottomless pit .. you wait, and you wait, and nothing seems to happen.  Get all the information you are going to get, and then make the damn decision.

Next, we’ll look at what to actually do during the interview.

Photo credit: Nickodemo

Artisans vs. Armies

There are moments in the history of software, when a product created by a tiny team has invented or transformed entire markets.  I was struck by evidence for a similar model in evolutionary biology: the theory of punctuated equilibrium, where there are long periods of relatively little change followed by short and dramatic periods of upheaval.

This kind of rapid change, brought on by an insightful act of creation, has happened repeatedly.  Afterwards, the market leaders usually settle into a period of stability and incremental refinement, backed by large teams.  For example:

UNIX: Ken Thompson and Dennis Ritchie were working at Bell Labs, and became disenchanted with a large-scale project to design a novel operating system, called Multics.  In reaction to its complexity, they created a much simpler alternative and impishly called it “Unics” (later renamed to Unix).  Thompson described Multics as “overdesigned and overbuilt and over everything” (a common complain about systems built by armies!).  Unix went on to become one of the two dominant server operating systems; it is now enhanced and maintained by an army of its own – thousands of developers around the world.

Visicalc: while a student at Harvard Business School, Dan Bricklin got tired of doing spreadsheets on paper.  He thought that he could use a personal computer to help, so he wrote Visicalc for the Apple II and transformed the role of the personal computer in business.  The spreadsheet has long since moved to the other model – Microsoft Excel has dominated the market for many years.

Electronic Arts: The company was originally created by Trip Hawkins in 1982 with a vision: find the brilliant programmers who could create amazing games for small computers, and celebrate those artists and their creations just as we do with great musicians.  One of my friends from junior high school wrote an early EA game (called Axis Assassin).  It was a very impressive homage to his favorite arcade game, Tempest, and he was the sole programmer who built it.  I still have the packaging with his picture and bio in it (at the ripe age of 18).  But that notion of the individual artist was abandoned by EA many years ago.  Now they make games like Madden NFL, which is built by 30 developers and has more than 10 million lines of source code.  The big PC and console games involve massive multi-year investments.  The artisans have moved to mobile, a disruptive domain where very popular games with millions of users are still being created by tiny teams of people.

American culture, I think, has always been caught between a celebration of the small (the lone inventor in a workshop building a better mousetrap, the small farmer setting forth in a Conestoga wagon on the Oregon trail, the “small is beautiful” philosophy of the 70s) and a celebration of the large (the great skyscrapers – “cathedrals of the machine age”, the massive industrial output that powered our economy and made us victorious in the world wars, the space program that landed astronauts on the moon).  Like the technology industry, our culture is tugged back and forth between these two extremes.

The Model

Across all of these examples, I find that there is a somewhat consistent pattern.  Typically, a new opportunity opens up due to some key technology transformation (like the advent of the PC or the Internet), which is not yet dominated by large established organizations.  Some ground-breaking programmers dream up a new kind of product and create it, often as an act of passion rather than of calculation. The new idea gathers popularity, and over time it either grows a large company around it or (occasionally) is taken over by some existing player that wakes up quickly enough and buys or builds their way into a dominant position.

Once a kind of software has become well-established, it usually stops being the realm of the artisan and becomes dominated by large, well-financed teams.  Division of labor was one of the foundational ideas of the machine age, allowing our society to generate massively more output than it ever could have from the labors of loosely organized artisans in their guilds.  The artisans in most industries were washed to the sea by mega-giants.

But division of labor has a great flaw in times of turbulence – it is extremely hard to rapidly re-architect large products or large teams.  At scale, nobody knows the full story of how either one functions.  In software, the products may be millions of lines of code.  The working relationships among hundreds of specialized experts on an engineering team is a tremendously complex system of its own – redesigning it can be even harder than redesigning the software.  Clayton Christenson and others have eloquently written about how hard it is for established players to reinvent themselves.

It’s Not Just Software

This alternation between artisan and army is not restricted to software.  I was fascinated to learn what happened in the 1800’s in manufacturing, elegantly described in the book The Tycoons (which I highly recommend).

During the Industrial Revolution, British industry was transformed by machine-based manufacturing.  Individual artisans were unable to compete and were largely supplanted.  That part I knew.  What I didn’t know, is that there were some key inventions in manufacturing that had the side-effect of making the roles within a factory require far less individual skill and judgment.  The British were slow to adopt them, and most British plant workers were artisans – in the 1890s, three-quarters of them were highly trained crafts-people with a lifetime of expertise.  By contrast, American plants had virtually none – somebody could be trained for almost any role in the plant relatively quickly.

For this and other reasons, American industry production sky-rocketed past the British.  In 1860, US output was one-third of Britain’s.  Fifty years later, it was 2.3 times larger (!).  Manufacturing has remained dominated by mass scale ever since, though there are interesting early signs of another major shift.  The rise of 3D printing technology makes it cost effective to do very small runs – we may see a new renaissance for the artisan manufacturer.

Another example is movie-making.  United Artists was founded in 1919 by four directors and actors, including Charlie Chaplin and Mary Pickford (two of the most popular actors of the day).  The vision, embodied in its name, was to create a place where the artists dominated, not what today we might call the “suits”.  The company struggled because the industry was moving to longer movies with high production values that required large teams and big investments (sound familiar?).

The company, and the broader industry, seesawed back and forth.  In the 1960s, United Artists created the Bond blockbuster franchise.  In the 1970s, they were involved in the shift towards small “auteur” movies that represented the singular vision of a one person (like Midnight Cowboy).  Then back to blockbusters in the 1980s.  Lately, “indie” pictures are all the rage.  The dynamics of the movie industry have interesting similarities to software, shifting back and forth across the spectrum between creation by artisan or by army.

We’re In a Time of Radical Change

As I’ve written elsewhere, because of the cloud and devices, technology is in a time of radical transformation – a lot of equilibriums are being punctured right now.  It’s a hard time to be an established leader – a threat can develop out of nowhere from a couple of passionate developers with a new idea, and it can grow to massive size in the relative blink of an eye.

But it’s a magical time for the artisans – they can challenge the dominions of the giants, tweaking the noses of the biggest companies in the industry.  And if they are right and they have a winning idea, they can have a tremendous impact.  You don’t need an army to change the shape of an industry – you can build a program and, with no capital investment at all, make it available to a billion people in an hour.  If you crack the code and build something that has real demand, there are ready accelerants poised to support you.  Investment capital is abundantly available to companies that have gotten traction, and people with every kind of specialized skill are ready to jump on the train once it has begun gathering speed.  I call it “scale fast or fail fast”.

I believe that during the next several years, many domains of human endeavor will be radically reshaped by small teams of scrappy challengers.  They will seize this period of transformation to forge and pursue new visions that will change the dynamics of whole industries.  It will be fascinating to see what they come up with.

The Magic Tomato

A new productivity idea has been making the rounds lately, called the “Pomodoro” technique.  I’ve been using it quite a bit at our startup, and it’s been a great help, so I thought I’d share it on the blog.  The name comes from the Italian word for “tomato”, because the inventor (Francesco Cirillo) had a kitchen timer in the shape of a tomato that he used when he was coming up with it.

Pomodoro is really helpful for doing focused work on important projects, especially when they require creative or deep thinking.  It’s so easy to get distracted by easier work or email or interesting discussions with co-workers.

I use Pomodoro for projects that

  • Don’t have clear short-term milestones.  For example, I spent a number of weeks diving into the latest techniques in machine learning and figuring out how to apply them to our product.  This project took hundreds of hours and I just had to chew away at it day after day, working through the algorithms and how we can use them most effectively in our application.
  • Are hard.  In most jobs, there are a myriad of useful and productive things to work on.  A few of them are really important … but the others are often a lot easier.  It takes very little intellectual effort to update the feature spreadsheet, or answer some emails, or do a QA pass over the website – all fine and useful things to do.  But they aren’t the projects that are going to yield huge amounts of value.  Often, a project is “hard” because you don’t know what to do.  You just have to bash away at it until you figure out how to get traction (possibly using some of the ideas from the “crack the nut” post).  Or, it might be hard because you are trying to create something new, and that can be scary.

So How Does It Work?

There is a detailed online guide, which is well worth looking through.  I do find that it can be overly prescriptive about how you are supposed to use the technique, and my approach is somewhat simpler.

Say you have a project that you want to focus on.  The basic idea is that you tackle it in blocks of time, choosing the block size that works for you.  The guides recommend numbers like 25 minutes; I have found that 50 minutes tends to work best for me.  You commit to working for that long without stopping – no answering the phone, no getting up, no checking email, no distractionsYou just work.  If anything comes up that you need to attend to, write it down and get right back to work – don’t do anything else about it.  At the end of the block of time, you stop and get a rest period, where you can deal with things that came up, check email, etc.  The rest period might be 10 or 15 minutes, or whatever works for you.  Check off the Pomodoro when you finish it, and it doesn’t count if you didn’t spend the entire time on your project without stopping.

At the start of the day, I might decide that my goal is to do (let’s say) four 50-minute Pomodoros.  Maybe I’ll spend two of them on machine learning, one designing our user profile system, and one on learning about business metrics for SaaS companies.  I find this approach works really well, because it makes it pretty easy to line up my time against the really important priorities.  The chunks of time are big enough that you can make decisions about them pretty easily.

At the end of the day, I’ll look at how I did.  If I didn’t get very many Pomodoros checked off that day, I know that I wasn’t able to focus on the projects that I wanted to.  I got interrupted, or other things came up.  That’s ok .. the point is not to beat yourself up, but it is important to be honest with yourself about whether you are really moving ahead on the things that matter, and if not, figure out what to do about it.  You’ll also be surprised at how few Pomodoros you can really get done.  In a multi-tasking environment with meetings and so forth, you might get zero significant blocks of utterly focused, undistracted time.  In a startup with virtually no meetings, I’m able to get several 50 minute Pomodoros done on a really amazing day, which is an incredibly good feeling.

Why It Works

One of the things I really like about this technique is that it makes an open-ended project quantifiable.  A multi-week or month project that doesn’t have a lot of interim milestones suddenly has a countable milestone every 50 minutes of work.  You can plan in terms of these chunks of time, you can check them off, and you get a feeling of progress even if there isn’t anything else you can really point to.  I think most people find it much easier to work on a project when there are tangible results along the way – I know that I definitely do!

It also makes it much easier to psyche myself up for a big hard task, because I know that I can stop in 50 minutes – it’s a real comfort to know that no matter how bad things get, I only have to push for that long and then I get to stop.  What almost always happens in practice, of course, is that once I get going, the project sucks me in and I pound happily along, annoyed when I’m “forced” to stop at the end of the work period.  But there is a lot of research that you are most productive if you do sustained bursts of work with breaks in between.  It’s also healthy to get up and stretch regularly.

Another good thing is that it gives you permission/”coerces” you into ignoring potential interruptions.  When you are doing something intense or creative or hard, it’s death to be constantly starting and stopping – you don’t get into that flow that is so magical.   When you are in the midst of a Pomodoro and you know that you won’t get to count it if you let yourself get pulled away, you actively resist interruptions.

Tools

You can do a fine job of using the Pomodoro technique with nothing but a piece of paper and a watch or a kitchen timer.  I do use two pieces of software that I find helpful:

  • My Little Pomodoro – a cute little app for the Mac that will time your Pomodoro interval and chime at the end.  There are several apps like this, or you can also use a kitchen timer, or just your watch/smartphone.
  • Omnifocus – a great productivity tool I’ll write about in another post; the key thing for Pomodoro is that any time I want to note something, I just hit a quick key combination, type in a phrase, and hit return.  The window disappears, and I know the note is squirreled away where I can (and will!) deal with it later.  A lower tech solution is a piece of paper that you scribble a note onto.  Anything works if it is a quick and dependable place to jot down an idea or task, so you can forget about it and get back to your Pomodoro work.

Since I work in an open office, I have a bit of a ritual for starting the Pomodoro.  I put on noise cancelling headphones, start up a special playlist of music (my favorites are choral pieces from the 16th and 17th century), start up the Pomodoro app timer, set the program I’m using to full screen so no other software will be visible … and WORK.

When To Use It

Paul Graham wrote a wonderful essay about the difference between a “maker’s” schedule, and a “manager’s” schedule.  When your time is divided up for you, where things are very structured, and you go from meeting to meeting or activity to activity, you don’t need Pomodoro.  But when you are taking on something open-ended and creative, or you have to think really hard about a problem you don’t know how to solve .. give it a try.  Perhaps you will find that it is as magical for you as it has been for me!

The Physics of Software

Physics – the natural laws defining the behavior of matter and energy – determines  what is possible in the universe.  I have found that engineering projects have a kind of physics as well.  But as technology undergoes fundamental transformations, that physics changes.

Enterprise Servers

Let’s look at large-scale commercial enterprise servers composed of millions of lines of code, which in my experience follow a pretty well defined model.  It’s dictated by the needs of the customer and by the constraints of the problem.

In a typical release that makes real but evolutionary steps forward, you take two years to do a version.  During those two years, you get three coding milestones, each of which is eight coding weeks.  Each developer on the project might do four coding days per work week, three if they are a lead.  Roughly 40% of the team is developers (the rest are testers, project managers, designers, etc).  That means that for every person-year spent by the engineering team, you are getting an average of 18 days of actual production coding on the product.

Ouch – no wonder those products take large teams to build and evolve so slowly.  What’s the deal?  The absolute killer .. the single thing that takes away the most productivity from the team, is the need to test and stabilize the product for the vast array of configurations that customers will use it in.  We called it The Matrix – the multi-dimensional matrix of every possible operating system (at different patch levels), every possible storage system, every possible database that customers might be using.  The combinatorics are brutal.

You have to test and retest and retest your product .. not just that it works, but that it is stable under load, that it performs as well as it needs to, that it fails in the same predictable ways, that it recovers from failure, that it can be managed, and backed up, and diagnosed when it goes wrong, and is secure, that you can smoothly migrate to it from older versions, that it integrates with all kinds of other systems that customers want to use it with, and on and on.

We called these “the basics”, and they soaked up far more time than actually writing the code that makes the product function.  Even if you are a very wealthy company, your test lab can’t possibly have every configuration that customers actually use (which is in fact unknowable, since everybody does weird things to customize their datacenter), so you put out a beta and work with early adopters to deploy and test the code in even more configurations.

The sad thing is that even if you could go faster, customers often don’t want you to – from their point of view, you are going too fast.  Once you finish your shiny new version, you have to get them to deploy the darned thing.  They frequently don’t want to, since the old one is working and they are risk-averse and have other and better things to do.  So you work on them, and gradually persuade some of them (often it takes years, and plenty of them will just skip a version).  Then they do a test deployment.  Then they come up with a migration plan.  Then they gradually spin up the new system and move over to it.  Multiple years after a new release, it is quite likely that the great majority of your customer base is running the older ones.  So you have to support every version until the support window runs out – for Microsoft that is ten years, or longer in some cases where the customers were very insistent.  If you are shipping every two years, that might mean supporting five different versions.

And worst of all, once you finally have the customer running live on your system, you basically have no idea what they are doing with it.   Are they using those features that you sweated blood to build?  Is the product working well and delivering the results they need?  You have virtually no data and hence there is a lot of guesswork in figuring out what to do next.  You prioritize things that users complain about or that the engineering team is excited about, never really sure if your priorities match the real needs of the customer.

Cloud Services Change the Physics

Contrast that with running a service.  When you host the service yourself, you have one configuration to support.  You have one team operating it that all works for one company and that works closely together.  You have perfect knowledge of, and control over, the environment where the system is going to be run.  When you deploy a new version, everyone is instantly running on it.

The result is a dramatic change in the size of the team that you need and the efficiency with which you can deliver to customers.  And keeping team sizes down pays off in many ways that are hard to quantify but nevertheless crucial – less communication overhead, a stronger sense of unity, and the ability to make changes in plan more quickly.

Even more important, when customers use your service, you know everything.  You know what features they use, what kind of performance you are delivering, whether searches are yielding results that users are interested in, whether one version or the other of your software gets better results.  You can spot and fix problems in real time without desperately trying to diagnose a critical live system in a customer’s facility based on the few clues that they are able and willing to share with you.

What Does It Mean?

In the history of computer technology, there have been several times when the physics changed profoundly.  Moving from batch to interactive systems was one.  The advent of the PC, where computing became ubiquitous and under your own control.  The standardization of key building blocks like operating systems and databases, so applications could focus on the unique logic of the problems they were targeting.

Every time the physics changed in the past, it enabled a massive acceleration of innovation and disruption.  New markets opened up, software was able to do things it had never been able to do before, and established companies faced tremendous pressure.  The traditional way of doing things doesn’t always go away – mainframes running COBOL process enormous numbers of transactions every day.  People still buy PC software, and servers will be deployed into data centers for decades.  But companies and communities that miss out on one of these fundamental transformations usually have a difficult time.  They often end up living in a perpetual twilight world of stasis and conservatism.  The frontiers of technical development, the best developers, and the biggest new opportunities leave them behind.

I believe that this transition, from servers to services, is one of those abiding changes in the physics of software.  The benefits of services are so compelling in terms of efficiency, of deeply understanding your customers and what they need, and of adjusting and adapting software in real time, that I think they will be the place where the white-heat of innovation happens.  If you are on the wrong side of that divide and your competitor is not, it will be very difficult to compete toe to toe.

Do You Learn More at a Startup?

I’ve had The Debate many times with people at very different stages of their career – whether to go to a startup, or to work at an established company.  One of the classic arguments for the startup is that you learn more than you would inside the belly of the beast at a large company.

Why it’s True

One of the distinctive things about life at a startup is that everything happens at a hyper-accelerated rate.  Which means that for a given amount of time, you will generally experience much more of the lifecycle of a product, a business, and a company.

I experienced this really vividly when I did my second startup, a dot.com.  I left Microsoft for the opposite coast to co-found the company.  In two years, we grew it from a few people to over 100, built a massively scalable server infrastructure from scratch and shipped it in six months, became the 50th most active site on the Web, went on a road show and took the company public, lived the exhilaration of flying high, got caught up in the crash and watched our stock go into the tank, had it come back to a more reasonable level, and merged the company with another.  Then my previous partner convinced me to come back to Microsoft to do an internal startup .. and I ran into people who were still working on exactly the same product cycle they had been doing when I left (!).  I felt like a traveller who has gone out into the world, had exotic adventures, and feels utterly changed by them, only to come back and encounter the polite incomprehension of the folks who stayed at home muddling along just as usual.

Another thing is that you typically get involved in a much broader range of activity.  At a big company, division of labor exists (must exist!) at an extreme.  There are hundreds of finance people at Microsoft who are extremely expert at what they do, so your involvement in that discipline even at senior levels of business ownership is very limited.  You consume their work, but that’s very, very different from actually doing it.  Similarly for legal, HR, recruiting, sales, lab management, datacenter design, office facilities, networking infrastructure, ad infinitum.

At a startup, there aren’t any specialists in most areas, so you have to jump in and do them yourself.  You get exposed to many aspects of the business that you wouldn’t otherwise know anything about.  If you like a holistic understanding of what’s happening, you love that.  If you want to focus deep in an area, it can drive you nuts.

But .. It’s Not That Simple

That’s the “pro” argument, but there’s another side of the coin that I think is often glossed over by the advocates.

Because things are moving fast and there aren’t a lot of “experts” around, you usually won’t get trained with any kind of deliberation.  Big companies are very uneven about how thoughtfully they develop their people, so it’s by no means assured that you will get a better experience, but hopefully you will.  I think one of the best way to learn, especially early in your career, is to “apprentice” with a more experienced and expert person.  Ideally, they are a great coach who will push you with challenging work, will evaluate it deeply and give detailed feedback, and they will be there to help when (and only when!) appropriate.  I think you are more likely to get that experience at an established company ..  but lousy managers abound everywhere, so you’ll have to be lucky or smart to find a good one.

It’s rare to get the opportunity to learn big and complex things systematically.  There are areas of expertise that are deep, hard, and take time to absorb.  Things like operating system and database kernels, distributed system design, compiler optimization, and machine learning, are systematic bodies of knowledge that call for the accumulation of knowledge and wisdom over many years to become a true expert.  In startups, you are scrambling like hell and need to get something up that works, so it’s hard to create something that is carefully and thoughtfully designed for the long term.  There are wonderful counter-examples of well-architected systems built by startups, and many pieces of crap built by big teams at established companies, so this is not some universal law.  But, in my experience, you are more likely to get a chance to master those kinds of areas at a big company that has the resources to invest in thoughtful architecture and quantities of deeply trained people available to work on it.

Running a business at scale is different than running a small one.  You won’t learn how to operate at scale at most startups.  Managing teams of hundreds of developers, keeping hundreds or thousands of sales people productive, coordinating hundreds of subsidiaries around the world – these are very difficult things to do well, and you won’t learn about them at a small company.

How it Nets Out

So will you learn more at a startup?  It depends on what you want to learn.  If you want to experience the whole business from customer experience to support to revenue, choose a startup every time.  If you want to move fast and see a lot of things quickly, ditto.

But, if you want to go really deep and immerse yourself in something complex, or you want to train yourself in your craft (whatever it is – systems programming, project management, finance), or you want to learn how to operate at high scale, you might find that you will do better at a larger and more established company.

What’s my approach?  Do both.  I have had by far the most fun at the three startups I’ve done, but I’ve learned powerful lessons at large companies that serve me well in everything I take on, with teams large and small.  And if you are at a startup, and it’s successful, then it’s nice to know that you have experience operating at larger scale – you won’t have to learn every lesson on the fly, when it’s life or death for the company that you do it right.