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.

Rise of Data Science

Radically accelerated by the advent of cloud computing and devices, a role has begun to develop that will flourish in the coming years, and I am convinced that it will have a major impact on our lives.

New technologies often usher in new disciplines; they typically begin as a chaotic area of focus, with all sorts of people falling into them from different backgrounds.  Over time, they take on structure, books are written, educational and training programs develop, and they turn into a mature discipline.  That’s what happened when the Web was created – building a web site requires a mix of skills that draw from what had been quite separate worlds of activity: art and visual design, image processing, and programming (among others).

The same arc happened a few decades earlier when programming was invented – it drew from fields like mathematics, engineering, and linguistics.  It attracted people from those fields and many others (including more than a few high school students who were supposed to be doing something else!).

This new field hasn’t been officially named yet, but one of the terms that people are using for it is “data science”.  I’ve been diving into it pretty deeply for our startup, and some remarkably interesting work has been happening over the past several years.

What Does a Data Scientist Do, Anyway?

As you would expect from an emerging discipline, people don’t agree yet on exactly what it is all about.  But the fundamental idea is that enormous bodies of data are being gathered through software, and somebody has to make sense of them.  The analysis can influence decisions that people make (“hey, this version of our web service gets 15% more people to sign up for an account than the other one”) and decisions that software makes (while browsing items on Amazon, the web site will tell you that people who bought this product also were interested in …).

A data scientist is somebody who figures out what data to gather, how to analyze it, and what to do with the results of that analysis.  The discipline combines ideas from areas like statistics, machine learning, mathematics, databases, and psychology.

What’s it good for?  Well, here are just a few ways it is being used today:

  • The magical ability of Google search to find what you need from a couple of words and no other hints.  Compare that experience to what you typically get from software – you usually have to tell applications in painfully explicit detail exactly what you want, in very tightly scripted sequences of commands, and it can be extremely frustrating if the programmers haven’t anticipated what you want.  With Google, you type just about anything into the search box, and with incredibly high probability, it will give you a useful set of answers.
  • The ability to recommend things that are likely to interest you.  Amazon is very, very good at helping you find a book you want on any subject under the sun, through a combination of search and recommendations.  Netflix has gotten to the point where 75% of the shows that people watch on their streaming service come from a recommendation
  • Web sites present users with multiple versions of their product simultaneously, watch how users react, and pick the best one.  Large web companies are running dozens or hundreds of these A/B tests simultaneously and are updating their product daily based on the result.  I used to ship large packaged software products to enterprises, and we would conduct a manual poll of our users years after we shipped to try to figure out whether they used the product and what they did with it – the results were very spotty, very late, and highly inaccurate.  It’s like trying to drive by covering the windows of your car with black paint and having somebody write you an occasional letter about where you are and the condition of the road.

Those are just a few examples – almost every Web-based company depends on data science as its lifeblood to make its product come alive for users and to run its business internally.

The Future

What’s being done today with data science, while impressive, just scratches the surface.  The current economic models have only begun to evolve.  And many parts of our lives remain deeply inefficient and filled with friction:

  • Transit is very wasteful – guessing about traffic patterns, individual drivers maneuvering 3000 pound chunks of metal with dubious competence.
  • Integration of medical carediagnosis, and monitoring our bodies, remains technologically primitive.
  • Energy use is highly inefficient, partly because we have little idea how to optimize or the implications of our decisions.
  • Education hasn’t improved much in the last few hundred years, when President Garfield said that the ideal college was a famous teacher (Mark Hopkins) at one end of a log and a student at the other.  It’s arguably the most important competency of a successful nation in the modern age, and our system (in the United States at least) is hardly flourishing.

Along with much of the economy, these areas are ripe to be transformed, and I am convinced that data scientists will be at the heart of that transformation (for good and for ill!).  If you’d like to learn more:

It’s a discipline that I think anyone involved in technology should understand at some basic level.  Pretty much whatever you do these days, there are probably large quantities of data being generated around it that can be mined for insight.  You want to leverage this power, to make your own decisions and to create a great experience for people using your software.  It’s going to continue to transform the world over the coming years .. and maybe you can become a real-life Hari Seldon.

The Rip Van Winkle Question

Several years ago, I become responsible for a reasonably large business.  As you’d expect, the team regularly reviewed progress using a series of reports full of numbers.  Page after page of them, with thousands of numbers, analyzing performance by region, by pricing level, by licensing model, by customer type – you name it.

To an expert, these reports were filled with wonderful nuggets of insight.  Wow, what happened to sales in Germany last quarter – why did they tank even though the competitor’s results were strong?  Clearly, the Japanese sub is the only one leveraging the price increase – their average revenue per unit is spiking while everyone else is just plodding along.  And so on.

To somebody who was not expert (i.e. me), it was just a wall of numbers that didn’t convey much of anything.  To get a sense, check out a report like this one.  If you are an experienced investor, or used to reading accounting statements, you can glance over it and almost instantly you know a lot of interesting things about Google as a business.  If you aren’t, your eyes probably glazed over and you are hoping there won’t be a pop quiz at the bottom of this blog post.

In my case, I didn’t even know what half of the numbers on the business reports were about.  What the heck was the “PSP attainment vs. seasonality adjusted target”?  Did it matter that we seemed to be below what we had originally expected?  But I had to get smart quickly – these reports were the lifeblood of the business.  It’s like a medical chart to a doctor; they can spot patterns that reveal what is happening to their patients.  I had just become the doctor for this business, and I needed to know if the patient was suffering from any serious illnesses, so I could do something about them pronto.

So How to Start?

The best technique I’ve found is what I call the “Rip Van Winkle” question.  If you aren’t familiar with the short story, Rip was a man who fell asleep for twenty years, and found that the world had changed dramatically when he woke up.

What I did was to take every important angle on the business and find somebody who was really smart about it.  Then I sat down with them and asked the key question: “if you fell asleep for a year or two, when you woke up, what are the first things you would look at on this report to understand how the business is doing?”  Over and over again, I got amazing insights by asking this.  “Well, the first thing I’d do is look at new sales in the enterprise segment to make sure we are getting growth instead of just milking the installed base.  Then I’d divide that by the number of units for a quick check that our price was holding up and we’re not jacking up sales with deep discounting.  Then ….”

I did this walk-through with around 30 people, for a total of some sixty hours of discussions.  Finance people told me how they analyze the finance numbers.  Customer service showed me how they track and assess problems and customer satisfaction.  Sales managers talked about the pipeline and performance and hiring.  Often, different people would take me through the same report, and come at it from radically different directions.  I took copious notes, but I always asked for the top 2-4 things they would look at first.  I would highlight and number the places that held the answer.

Vital Signs

It turns out that for just about any report, even if it has hundreds or thousands of numbers on it, there are a handful that really tell the crucial story.  The rest of them might be useful to support the story or diagnose a problem, but you mustn’t get distracted.  In medicine they call them your vital signs – tell me your pulse and whether your eyes dilate and a couple of other things that can be measured by an EMT in seconds, and I will know if you are basically ok or deeply traumatized.  I may not know if you had a stroke or a concussion, but I’ll have a good basic sense of how you are doing.

This technique hinges, of course, on finding insightful people with an intuitive mastery of the numbers.  I could never predict who it would be from the org chart – they might be high up or buried deep.  But the people who worked in that area almost always knew whom I should talk to.  Ask around!  Once I found the right people, they were usually happy to share some wisdom with an interested and enthusiastic listener.  Buying them lunch never hurt, either.

By the end of those sixty hours, I was pretty darn good at diagnosing the business from the numbers, because I had learned from such a wide range of experts.  The process also turned out to be a useful diagnostic tool in its own right.  If I couldn’t find anyone in an area with great insights to share, chances were pretty good this was a side of the business that wasn’t being managed very well.

What I’ve learned by doing this exercise many times is that project reporting is almost always far too detailed – it’s like the old story about writing a shorter letter if you had more time.  It’s very hard to distill a lot of complexity into a tight report that shows only the key things – that means you have to figure out what those key things are (and have confidence that you didn’t miss anything vital!) – so most people cop out and throw in the kitchen sink.  As you are ramping up, think about how to cut way down on the amount of information being reported.  More is definitely not better, when it comes to metrics.  Einstein’s famous dictum applies perfectly here – “make things as simple as possible, but not simpler”.

The next time you have to get smart about a report full of numbers, give the Rip Van Winkle technique a try, and see if it works as well for you as it has for me.

Manage Your Firedrill Capacity

Ah, the firedrill – that urgent project that your team has to scramble to get done by the deadline.  Everywhere I have been, they are an inescapable fact of life.  “We just got a key customer meeting and we’ve got to have that demo ready!”  “There is a VP review of the project next week and we have to nail it!”  “I need this analysis done tonight for the board meeting – they said we have to cover this compete angle!”  “Our customer’s site is down and we have to get them back up ASAP – drop everything!”

Some of this is inevitable – things come up, so you have to rise to the occasion and get it done.  But some teams seem to exist in perpetual firedrill – life is just an endless succession of crises and it feels like a treadmill; you never get the chance to move forward on the really important projects that could be game changers, because you are running as fast as you can to handle the constant stream of do-it-now projects that bombard you.

How much you can control this problem depends on the role.  If your job is to fight fires (literal or metaphorical), then maybe the firedrill is what you do.  But if your work is more project-oriented, my guess is that a lot of them could have been anticipated and avoided.  That’s been my experience.  Test it for yourself – keep track of the firedrills you are pulled into for a couple of weeks, and look over the list.  How many of them really came out of the blue and could not have been avoided?

The Magic Wand: Designing Good Systems

Systems and processes can make life miserable and are one of the things that people complain most about.  They can get rigid, bureaucratic, and generally suck the spirit and energy out of life.  BUT … they are the critical tool that can eliminate firedrills, if they are done right.  What I’ve found is that you must design them thoughtfully, hone them until they cause the minimum of friction, and throw them out when they are no longer adding value. You probably will benefit from a system when something is predictable, repeated, and complex.

  • Predictable: hey, it’s a new year and we have to get our plan landed – wow, who could have seen that coming?  Excuse me, but it’s been on the Gregorian calendar for around 430 years, so this really shouldn’t catch you by surprise.
  • Repeated: if you do something once, then designing a system may or may not pay off.  If you do it over and over again, you don’t want to lose the hard-won lessons of the past.  Figure out how to do it well and bake it into a system so that you don’t have to think about it.  We’d never be able to function as human beings if our bodies didn’t do this constantly – we couldn’t walk, talk, eat, read, or write.  We spend much of our early childhood evolving our neural systems to master the key activities needed for life – think about how helpless an infant is.  Reinventing the wheel every time you do something keeps your team in perpetual infancy.
  • Complex: if it’s trivial, you may (may!) not need to remember how to do it.  But as things get complex, you are wasting enormous amounts of time and operating very inefficiently if you don’t capture that knowledge into a system.

Firedrills are a great indicator that you need to do something – jotting down a line or two about each one will take you less than a minute a day and looking the list over will help you diagnose places where you have a missing system or a failing one.

Don’t Waste Your Firedrill Capacity

Every team has some capacity to absorb firedrills.  That capacity increases as people are more committed to the mission.  It increases with confidence in the team leadership – people figure that if the leaders say something is important, it probably is.  But if you burn through that capacity too often, or you waste it on things that are obviously just screw-ups in planning that could have been prevented, you’ll pay the price.  People will get grumpy, cynical, burned out .. and eventually will leave the team.

So manage that capacity.  Fill the tank by fostering trust and commitment.  Avoid burning it up on dumb things that you could have avoided with some thoughtful planning.  Come clean when you screwed up and the team has to pay for your mistake.  And then when you really do need them to commit heart and soul to pulling off something heroic, the team will be right there with you, ready to dig deep and gut it out.