“Oh, that should be easy – maybe a few minutes…”

Hearing those words makes me feel like I’m tied mutely to a railway track, unable to scream for help as a train thunders towards me. We humans are walking sacks of blood, bile and bias, and estimating how long things will take brings out the worst in us.

A product manager recently asked me if one can get better at knowing whether things are easy or hard, and how long they will take. The good news is that with practice, you can help people estimate much better with your help than they would on their own.

Understand the problem you’re trying to solve.

If you don’t understand the problem well enough, you’re certainly blind to its potential complexities. Product managers are often in a *better* position than anyone else!

Understand what’s involved in the proposed solution(s).

This can be the trickiest part for non-engineers, because the details of the solution may sometimes be pretty arcane. Here’s what you can do:

  • You can go a long way by asking good questions about how things work, and what’s involved in the solution. Listen carefully to the answers. If they don’t make sense, ask for a higher-level explanation, or from a different person. Explain it back – that will make sure you’ve got it right and help you internalise it. Take good notes. Over time, you’ll start to see how the pieces interconnect, and what problems are similar to one another, and this will get easier and easier.
  • Don’t ask for an estimate for the whole solution. Break the solution down into pieces, estimate the size of each piece, and add them back together. In my experience, people can’t reliably estimate how long things will take beyond a few hours – so if the estimates are much bigger than this, break the pieces down into smaller and smaller chunks.
  • Be the rubber duck!
  • Offer to pair-program with a developer during the unit testing. You’ll get a really deep understanding of how the system works, and where the difficulties lie. Better still, if you write your tests before writing your code, your test suite provides a kind of score card for how close you are to a solution, and you’ll reduce time spent in QA.

Be aware and on the alert for pitfalls and cognitive biases that lead to poor estimations.

Human beings tend to be lazy about thinking through all the pieces for a complete solution (just focusing on the major parts, or the interesting parts, and ignoring the detail or the final 20% to make things perfect that takes all the time). They also tend to focus on the best case (if everything goes right) and ignore all the things that might go wrong. You never know what will go wrong, but if you have a sense of some possible pitfalls, you can factor them into your estimate. Possible approaches:

  • Start by asking out loud ‘what are the hidden traps, complications, edge cases, difficulties or things that could go wrong. When we did similar things in the past, how long did it end up taking? Were there surprise pitfalls that made it harder than we anticipated?’ Or run a premortem. You’ll get much better estimates after this discussion.
  • Use Planning Poker as an estimation approach. Each person makes an estimate in isolation – this forces them to think things through, and avoids estimates being dominated by what was said first or most loudly. The discussion afterwards creates an informed consensus view, and provides immediate feedback for people whose estimates are wildly off.
  • As a last resort: make an optimistic estimate and double it.

Learn from feedback.

  • Force yourself (or the project team) to make an estimate in advance, then during the project retrospective, compare the actual time taken to the estimated time. That would be the best way for everyone to learn from feedback! ‘We thought it was going to be X, but it turned out to be 2X’.
  • If things take much longer than anticipated, ask how we could have predicted this in advance. That might help you avoid similar estimation mistakes in future.
  • Notice if certain kinds of tasks tend to take longer than anticipated.
  • Notice if certain people tend to be inaccurate, and give them feedback on this.

Startup thinking – the people who have most influenced my thinking on startups.

Steve Blank and Eric Ries

Steve Blank teaches entrepreneurship at the Haas Business School in Berkeley, but has a pretty serious pedigree as a tech entrepreneur himself. I’m ashamed to admit that I still haven’t read The 4 Steps to the Epiphany, but I’ve read most of what he’s posted online.

Eric Ries is a protege of Steve Blank’s, applies and develops many of the same ‘lean’ ideas, and focuses specifically on web startups.

See the links for both Steve Blank and Eric Ries here.


Paul Graham

He’s a tour de force and a hero of mine. One of the early proponents of ‘release early, iterate often’.




Joel Spolsky

These are my favorite as they relate to HR:


Get your users to tell you what they really want

We’re building a site that we want people to love using, so we want as much feedback on it as we can get. From the get-go, we’ve had a big red UserVoice ‘Feedback’ button on the lefthand site of every page. But only a tiny proportion of our users ever suggested, voted or commented on an idea.

I’m not surprised. When you click the UserVoice ‘Feedback’ button, it brings up a list of the top few existing ideas to vote on, plus a vague invitation to ‘go to our feedback forum’.

If the problem you’re having is on that list, then you’re in great shape. But if you have a particular suggestion to make, there is nowhere to do so. In this respect, the ‘submit an idea’ heading is misleading since this box doesn’t really let you do that.

My guess is that not many people really notice the link at the bottom of the box to the feedback forum. This is a shame, because the forum itself is well-designed. It has a nice big box to add a new suggestion. It does a good job of minimizing duplicates by pointing out ideas that have already been submitted as you type. And the idea of giving users 10 votes to spend is enticing, and a rich source of information.

But despite that, we’re scrapping the UserVoice Feedback button and disbanding the forum. Here’s why:

– For the reasons described above, only a vanishingly small proportion of people who have something to say end up submitting/voting/commenting on an idea through UserVoice.

– We’re trying to be thrifty, and our userbase is small. So we don’t want to pay for the much more expensive plans – this cheaper plan doesn’t allow us to transfer our users’ login status from Memrise to UserVoice. As a result, many ideas get submitted anonymously, which makes it harder for us to engage in a conversation with a user [1]. Of course, people can create an account on UserVoice, but that’s a huge pain.

– By emphasising the top ideas, there’s a rich-get-richer effect. People vote most often on the ideas presented at the top of the list, and don’t notice potentially more interesting ideas just below. UserVoice should hide how many votes each idea has already accrued until you’ve already voted – otherwise an idea’s future popularity will be largely determined by its existing popularity.

So what did we do instead?

– We wanted to bring the barrier to entry down to zero. So we just dropped in a plain textbox, asking plainly what we can do to improve things. [2]

– The red Feedback button was ubiquitous, but I bet that made it effectively invisible. Our feedback box gets presented opportunely and prominently at the end of every learning session, at a moment when people will be most likely to have something they want to tell us.

– We get an email every time someone drops in a suggestion, with the user’s email address, so we can respond quickly to them individually. We very much want to follow up with people that have made the effort to give us feedback.

I’d say we’re getting at least 5 times as many suggestions as we were.

On the downside, we don’t have a nice communal forum any more that allows people to vote or comment on one another’s ideas – we might do something about that in the future.

Here’s what I wish UserVoice would do:

– Make it much easier for people to suggest new ideas. Even if it were to bring down the overall quality, I think an increased volume of raw responses would be of greater value.

– Charge straightforwardly based on the number of new suggestions. This would set up the right incentives for UserVoice to make it really easy for users to make new suggestions. N.B. I don’t have a problem with paying – I just don’t want to be forced to start out with a $100/mo plan when we have a tiny userbase in order to get features that I consider essential to the user experience.

– Corollary: Don’t withhold important features like single sign-on and white labeling the design for the exorbitant options.

[1] We compared UserVoice and GetSatisfaction pretty closely, and they both hike the prices if you want to be able to transfer login status across. In fact, GetSatisfaction didn’t (at least at the time) allow anonymous suggestions, which felt like a huge barrier to entry to new submissions – this was what convinced me to try UserVoice in the first place.

[2] Hmm – perhaps this should be a command, e.g. ‘Tell us what we can do to improve things’?

The pain of forgetting

There’s an old adage that psychologists study their own deficiencies: I study the psychology of memory.

At times in the past, I was able to discourse fluidly on obscuranta ranging from the internals of software for text processing, Wildean views of suffering, or conspiracy theories behind the construction of the Egyptian pyramids… few wanted to listen, but at least I found my own thoughts interesting.

Painfully, painfully, I feel this rich arcana slowly seeping away. In my personal Hades, I would be doomed to fill a sieve with grains of sand by day, even as they pooled into a puddle of forgetting around my feet by night.

My frustration hardened into a hypergraphic compulsion to externalize everything I learned. I wrote notes on every article, lecture and conversation. I painstakingly heaped my newfound nuggets of knowledge into a gigantic paper haystack.

But then I had a new problem – I couldn’t find any of it. Like a millionaire without the numbers to his Swiss bank account, I was rich and poor at the same time.

Things came to a head when I desperately tried to assimilate a pillar of textbooks for my neuroscience qualifying exams. Every brain area goes by a dozen names, can be organized by location or by lesion, by experiment or experimenter, by projections or inputs, by effect or atrophy, or equally along a dozen other dimensions.

But in my paper prison, each piece of information was confined to a single cell – a place for everything and everything in its place. In order to allow the informational inmates to run free, I needed a way to allow any nugget of knowledge to abide simultaneously in a multitude of homes.

And so I sought to build software to help me. After many musings in the shower, I constructed an elaborate infrastructure that incorporated: dynamically-generated hyperlinks to highlight associations; transclusion to include the same text in multiple places; tags to break down the trammels of tree-based hierarchies; and aliases to allow for multiple names.

Things are better now. I feel mnemonically empowered, or at least less mnemasculated. By granting conjugal visits from my conscious to my unconscious mind, this index-on-steroids means I can find things more easily.

But maintaining this index requires effort whenever I add a new piece. And my memory mansion grows so fast that even if I slept in a different room every night, I’d never return to the same one twice. I simply don’t remember what’s in there to look for it.

So in truth, even this sophisticated system is just a crude ropes-and-pulleys facsimile of my mind. A fixed hyperlink lacks all of the deep isomorphism, insight and spontaneity of an analogy. The ideas trapped there are dead and inert – they don’t bump and bite and spark off one another like active, bustling, living thoughts. And the effort of exhuming them by typing laboriously into a laptop lacks all the rapid, happy spontaneity of immediate recollection.

I dream of distant-future neural prosthetics, a google gland hooked up to my hippocampus. But I am too impatient to wait.

This is the quest that led me to co-found Memrise. I have gone as far as I can efficiently *externalizing* my thoughts. Memrise’s mission is to improve *internalization* – learning faster, forgetting slower.

I know that there is no silver bullet that will fix my memory. But I’m compelled to continue looking for tools and techniques that can boost it and shore it up.

Memory, the persistent effect of experience, provides the tools with which we think. We are the sum of our memories. When we forget, we erode.

On patents as a business tool

After doing some early research into patents, I concluded that:
  • they’d cost me $10k or so per patent
  • this would be a huge amount of time and effort for me
  • it would take at least a couple of years for the patents to be granted
  • I wouldn’t have the money to enforce them
  • small companies would probably ignore them anyway
So I was confident in asserting that patents were a waste of time (for my needs).
In the 6 months since, a few things have conspired to change my mind:
  • we’re close to raising investment, and investors care about patents because they provide evidence of value
  • likewise, they make you more acquirable
  • I’ve started to realize that patents’ primary value is as a deterrent against large companies who might otherwise lumber into competition
It’s this final point – that patents provide a watered-down ‘mutually assured destruction’ kind of deterrent against incumbents and larger companies that seems most important now. If you can protect yourself with patents, you make it much more likely that larger companies will partner with, license from or acquire you, rather than compete with you.

Google, here’s some context

So often, when I’m searching on Google, I want to give it some context. For instance, I’m looking for pages about Django (the Python-based web framework). They’ll probably mention ‘python’, ‘web’, ‘database’ and ‘programming’. I could feed in this query:

  Django python web database programming

But I’d actually get a very restricted set of results back – just those that include *all* of those terms (give or take some Googley cleverness).

So I could instead do this:

  Django python OR web OR database OR programming

This would certainly be progress. As long as the page mentioned one of those terms, I’d be golden. But there are two issues with this:

  1. I want to be able to stipulate that it doesn’t need to mention those exact terms, but rather stuff related to them.
  2. I don’t think the page would get bonus points for mentioning more than one of those terms, as it should

It’s frustrating that I can’t type something like:

  Django context:(python web database programming)

Google Sets (or something sophisticated akin) should be able to fill in the rest.

Switching from linux to mac

So, I caved. I crumbled like a biscuit in a blender. I am now the smug owner of a MacBook Air, and it really is wonderful. I went 10 days without rebooting before needing a firmware upgrade, and both sleep and wireless work flawlessly.

Here are the bells and whistles that make my brain and fingers happy.

Spaces (OS X Leopard’s virtual desktops doodad) isn’t as good as KDE’s, but it turns out to be fine once you turn off the auto-swoosh by typing these two commands into a Terminal:

defaults write com.apple.dock workspaces-auto-swoosh -bool NO

killall Dock

Before, switching to an application (such as Firefox) that didn’t have a window open already on your current desktop would cause you to be whisked randomly to the first desktop which did have a Firefox/Terminal window open. Now, you can switch to Firefox, hit Cmd-N and a window pops up, ready to go with minimal context disruption.

MondoMouse makes it easy to move and resize windows. By default, moving a window involves awkward trips up to the title bar. The tiny resizing handle is even more awkward, and more awkwardly situated, and is often overpowered by an overeager Dock. Now, I just have to hold down Cmd and move the mouse to move the active window. Holding down Cmd and Alt resizes. Again, this doesn’t work quite as nicely as KDE – for instance, the windows don’t snap satisfyingly into place when they get close to other windows or the edge of the screen. MondoMouse is available for a trial period, after which it costs $15.

Various other niceties deserve a mention. I currently prefer the Carbon Emacs over Aquamacs, though there’s not much to separate the two. Quicksilver, Expose and hot corners are great. For Dashboard widgets, I’d recommend iStat Pro, Word of the Day and maybe Album Art. Adding cdto to Finder is handy. Skim is the way forward for reading PDFs in full screen. Alarm Clock for timers. Cyberduck for accessing other computers over SSH (along with MacFuse and SSHFS).

Some things are just broken on the mac, and will probably never be fixed. Steve Yegge has described his heroic failure to civilize the mac’s shiny silvery savagery with proper focus-follows-mouse behavior. In general, OS X’s switching behavior is wrong in a few respects. The application (rather than the window) is the wrong level at which to switch, and so Cmd-Tab is always jarringly confusing to use. There are still kinks with the way that windows activate and bring themselves to the fore, especially when multiple desktops are involved, and I seem to lose a modal dialog to this problem about once every few days. MacPorts and Fink are workable but still disappointing – having two package systems devalues both, downloading binaries is preferable to compiling every time, and the packages are generally patchier than Debian’s apt-get. Finally, X11 is very clearly a second-class citizen, but works tolerably well. Oh, and unbelievably, the regular expressions engine in Python 2.5 appears to be maddeningly sprained!

There were a few pleasant surprises. Two-finger two-dimensional scrolling is unutterably wonderful. The MacBook Air’s colossal touchpad is very pleasant to use, even for nipple-lovers. OS X applications are pretty consistent about keyboard shortcuts. You can re-learn most muscle memories without too much effort so long as you don’t have to switch back and forth between the old and the new too much in the first few weeks. Emacs is still Emacs.

Paul Graham, Joel Spolsky and Steve Yegge and the Law of Increasing Returns

I’ve read almost everything these three guys (PG, JS, SY) have written. I think it’s because I get an unshakable feeling of rightness and convergence when I read their stuff that I’ve been trying to pin down. Some fairly obvious commonalities between them include:

But most of all, I think the key tenet that binds them together is an awareness of the Law of Increasing Returns. They each buy into the idea that:

  • a really smart person
  • a powerful programming language
  • a beautifully-architected office
  • an uninterrupted 3-day period

is worth 10

  • Joes
  • Blubs
  • cubicles
  • half-hour slots between errands.

PG’s essay on taste is perhaps the most ardent tribute to the Law of Increasing Returns. He catalogues the hallmarks of good design, and though he doesn’t say it, the key point of all this is that they add non-linearly. I’m still thinking about this.

He doesn’t say much about how one can hone one’s taste. I think there’s a Vonnegut quote to the effect that the only way to learn to tell good painting from bad is to look at thousands and thousands of good ones, and it will become obvious to you.

Interestingly, while I was trawling for links for this essay, I noticed that the three of them read each other:

I feel a little less clever now that it’s clear that a lot of other people are reading all of them too: