Hello my name is
Dan Webb

I build things

Mainly engineering teams and software.

This site is a growing collection of notes that you might find useful if you are also doing that kind of thing.

Why Is Everything P0?

Jan 10th 2025

While digging around in my notes app I found this old essay from my time at Meta Reality Labs that was originally posted internally. We were right in the middle of a team wide planning cycle and, as always, things were getting tense. At the time, we were using the very popular P0, 1, 2, 3, 4 system for prioritisation and, in a way that's probably very familiar to you all, everything was P0...

Everything is P0

There are always way more things that we should/want to/need to do that we have time for on any project that is worth doing. In fact, if you are struggling to think of things to improve/fix on your project it’s a very good indication that it's dead. Picking the most impactful thing to spend your time on at any point in time is the most important decision we all make every day.

Do we work on this thing or that thing or split our time or put 50% of our time into both? The hard fact here is that this is a zero sum game - if you spend time/money/resources on one thing you are not spending on something else. Making decisions on what to focus on is really hard and there’s often lots of things that add noise to this process; comment from leadership on random Workplace thread, partner team loudly requesting help, you like working on a certain problem, the list goes on.

The tool we often use to make this decision is some notion of priority. Given we’re in an OKR driven org the definition of priority is pretty clear:

Priority is the amount of positive impact we expect a given item to have on reaching our objectives.

We’re going through org-wide planning right now and we’re all finding ourselves looking at a hell of a lot of P0s. To take a planning document that’s open in my browser at random (not picking on this in particular but I think this is representative) There are 342 P0s, 96 P1s, a single P2 and finally, 17 P?s. Here’s a handy pie chart of that to annoy [data scientist on the team who hates pie charts].

A pie chart showing the proportion of priorities assigned to tasks

Here's a handy key:

  • P0 - We think its valuable and would like to do it at some point in time period X
  • P1 - We aren’t completely sure of its value yet and probably won’t do it in time period X
  • P2+ - Dream on, dreamer.

This system does have some utility. It points out what a given team thinks is valuable and intends to do in the given time period but it’s got some big limitations.

It doesn’t help us make decisions as to which P0 to work on now

What to work on right now is, as I mentioned previously, the most important decision we’re all making day to day. If there’s more than one P0 (or ~75% of all things are P0!) then you’ve got no extra information to determine what to work on next and worse still, if everything is the same critical priority then you may feel compelled to work on many of them at once. Doing 10% of ten P0s is definitely less impactful than doing 100% of one P0. P0 can be a focus killer.

It lets us pretend that we’re not playing a zero sum game

If you are spending time on one thing then you are not spending time on another thing. If you are trying to do two things at once they will both end up 50% done (or less - context switching has a cost). However, we can add as many P0 as we like. How many P0s is too many P0s? We can’t know. The only question we can try to answer is what is the most impactful thing to do next.

Another situation which comes up is the tie breaker. For example, a dependency comes in from another team which would mean that we would spend less time on other team objectives so there’s some discussion as to whether it should get added to the roadmap. Eventually, these kind of tie breaker situations end up with leadership and we ask them “Is this dependency really a P0?” and the answer is normally effectively “Yes, it is P0 and put it on to the big pile of P0s”. We’re not putting them in a position to answer the question effectively. There’s no way for them to make a trade off when we don’t clearly present them with that data.

We need to give ourselves the right tools to figure out what the best thing to do next is.

So how might we fix that?

Ps out, lists in

For anything task related in our teams we should discard the Ps and use ordered lists. This should include objectives, task boards, roadmaps and everything else where we might spend resources on one thing rather than another.

Why?

It constantly reminds us that we are playing a zero sum game

You add a work item to a list. The other stuff moves down and maybe some stuff drops off the end. You can’t stop it, that’s how lists work. No, you can’t put two items on the same line of the list, you scamps :) This allows us to make very conscious trade-offs between work instead of deferring or even ignoring that thought process. A new dependency comes in - does it go above or below this other critical item? It forces us to ask the questions to make a real choice every time and helps us explain to others who might be championing a certain work item (eg. a team with a dependency or QA with a bug report) how we have prioritised it and gives them an opportunity to discuss that decision with us. In cases where a tie breaker is required it helps us offer a more crisp decision to leadership: do we work on this first or that first? We can add this item to our roadmap but it increases the chance that some of these other projects might slip this half, are you okay with that?

It tells us what to do next

Working with lists is simple. Take the work item on the top, “ask can I meaningfully contribute to this” if so, work on that, if not look at the next item on the list and repeat. There’s a lot of reasons why we might not be able to contribute to the top item. It might be blocked in some way, maybe there are enough people working on it already and you don’t think that you’d be able to help ship it faster, maybe you don’t have the skillset to contribute to it. That’s fine but the result is that we are broadly working to make sure that we put 100% effort into whatever item is at the top of the list at any point in time and if we’ve ordered correctly that means that we are always put maximum effort into the thing we think has the most impact. We’re no longer feeling compelled to put 10% effort into the 10 P0s on our roadmap at the same time.

When do we reorder, add or remove items? All the time.

We constantly learn new info that changes how we think about the impact of projects and (hopefully) we constantly think of good new ideas. The list should be living and constantly changing as we learn more.

So yeah, Ps out, ordered lists in. Who's with me?

How To Be A Great Startup Engineer

Dec 16th 2024

One thing that isn't spoken about enough is that being an engineer at a startup is it's own unique discipline - it's almost completely unrelated to the kind of role you'd have in a company like Google or Meta. Before you accept a role at a seed or series A startup, it's worth knowing what you are in for and what it takes to really excell at it. Having been round this particular merry-go-round more times than is healthy, I thought I'd write a few notes which you might find useful:

Options > Salary

When it comes to rewards, make no mistake - you are here for the stock options (and the learning). Startups are extremely constrained by their cash burn so you'll struggle to get an amazing salary BUT what startups have a lot of is stock in the company. It's not uncommon for seed stage companies to be giving you well north of 1% of the company's equity in stock options. It's a big risk but if you believe in this company then you can walk away with a life changing amount of money. Negotiate hard on the options - it's good for you and the founders - you're all motivated to make this thing work.

Know the product and customers

It's blindingly obvious but the lifeblood of a startup is it's product and customers. It's so tempting, as an engineer, to get wrapped up in some sidequest (choosing the best framework, putting together a state of the art data pipeline etc etc). Get to know the product in detail, get to know your customers - spend time doing support, dig into the data, look at competitors, become a customer! - find a way to become obsessed with the product and if you really can't then consider finding another company.

You're the expert now - Act like it

One thing I've seen a lot is engineers joining startups having a huge crisis of confidence. You need to realise that this whole company is a group of people who are winging it for most of the things that they are doing - chances are they hired you because you know more than them about a lot of things so don't wait for reassurance and sign offs - just roll your sleeves up and and start shipping stuff.

Be scrappy, really really scrappy

A successful startup is constantly doing things that don't scale. Don't get caught up building some amazing architecture that encompasses all kinds of invented future possibilities. Fixate on what the company needs you to do to get to the next step and just work on that. Don't introduce any tools or processes unless they are solving a present problem. Don't solve problems you don't have. Put out the fire, then move onto the next thing.

Be a jack of all trades - but prioritise

You might be surprised to find that you might spend a large proportion of your time at a startup doing things that are not in your job description. If you are a front end engineer, you'll be writing back end code, but you might also end up being the adhoc network engineer or jumping in on customer support or organising the holiday party or collecting the milk or ... well, anything. Always protect your own time and energy so that you are working on the highest impact thing you can but sometimes that high impact acitivity will not be writiing code - go with it. Don't be a afraid to wing it, just get involved. On top of that, you'll learn a ton.

You are all in it together

When you join a startup, think of it as becoming one of the founders - you all own part of this company after all. The really exciting thing about this is that you can be a part of shaping everything about this company from the product to the culture and everything in between. Own the whole thing - if something is broken, don't wait for someone else to fix it or get all blamey - gather a crew and figure it out. The thing that always amazed me is, even in a huge company like Meta, the imprint of the early employees is still there - fundamental ways of working and thinking haven't just come from Zuck and the leadership.

I got a huge amount out of being part of startups, it's taught me enormous amounts, it's introduced me to amazing people and it's given me the opportunity to achieve some things I'm truely proud of. However, it's not for everyone. It's definitely going to hurt - stress, overwork, fear and uncertainty are all a thing. Hopefully, now you have an idea of what it takes to do it well and can dive in and make the most of it if you decide to take the plunge.

Your First Days In a New Leadership Role

Nov 28th 2024

So, you’ve just got a new job as an engineering leader. Starting any new role can be massively nerve wracking but throw in the fact that you are going to be a bunch of these people’s manager and the stakes get really high. How do you turn up on the first day being the biggest noob in the company but somehow gain some credibility with your team, your peer leaders and everyone else in the company? YMMV but here’s a few things that have worked for me:

Pre-game

Make time to go for a few lunches/coffees with your new coworkers before you start. In priority order: your incoming directs, your product and design peers, your manager. Don’t talk shop, get to know each other. Keep it to no more than 3-4 of you rather than one of those long table new starter lunches where you can’t chat to everyone properly.

Really get to know the product

No matter what it is, become a customer of the product as much as you possibly can before day one. Post starting, dig into how the whole company works - doing some customer support is a good place to start, talk to someone from every team (not just the team leads), bust out your SQL skills and build some dashboards, **deeply understand the company’s key results **and how they are measured. You need to know why customers choose your product, what success looks like for the company and every step it takes internally to deliver that product successfully. That’s waaay higher priority than anything technical.

Tell your team what you plan to do for the first weeks and stick to it

Being a leader is weird because there’s very little precedent for what you actually do day to day. Even though the team might be cautious of their new manager they’ll probably add you to all possible meetings and expect you to take the reins on everything. Mitigate this by being really explicit about where you will be and what you will be doing. Most importantly, stick to it - we’ve all seen that old doozy when a new manager turns up and says “I’m just going to listen” then starts a re-org three days later - don’t be that person.

Actually shut up and listen

Talk to everyone 1:1, sit around the office in lots of different places and earwig, lurk in all the slack threads. Yes, go to meetings but be careful with that - especially if you are senior, your presence is a signal. Also, it’s easy to get dragged in to opinionating too early. Try to be the one asking most of the questions but you will be asked what you think about everything - you are in a unique position of having fresh eyes so your feedback is useful but hold those opinions loosely….and don’t, whatever you do, go on and on about your previous job/company. Everybody hates that.

Help out, accrue brownie points

After you’ve done a load of listening you’ll have heard of lots of frustrations, wants, needs etc. Pick something to help with and get it done. Don’t do anything that is at all controversial or requires some decision making/judgement on your part. Find something that someone wishes was a thing, and do it the way they want it doing. Fix a long standing annoying bug, make that tedious spreadsheet, chase that laptop upgrade for a team member, fix that annoyance that came up in a retro. At Twitter UK, I chased the table tennis table people wanted for the lunch room, at Deliveroo, I got everyone’s employment contracts updated so they had a more competitive number of PTO days - which also later helped recruiting. You get to learn a bit about how the company works while accruing some low key goodwill.

Don’t mess, even if it looks on fire

I hear of so many tales of leaders joining a company, telling the team they are “just listening”** **but then discover something that they believe is a fire and could be easily fixed and diving right in. Don’t do it. Every company and team is different - if it was easy they’d have probably fixed it already. Just listen, help out, but keep your greasy mits off the steering wheel for now.

Alright, hope that helps. I’ll likely follow up with a “what to do in the first few months” post soon.

Guess who’s back?

Nov 27th 2024

I’ve had danwebb.net since 2000 and in the mid 2000s my old blog even got fairly popular amongst web developer types. In fact, it was a factor in me getting hired by Twitter back in 2010. Since then, like many early noughties personal blogs, it’s fallen silent as we all went to Twitter to shout into the void instead. This was all fun and games until the void started shouting back.

Fast forward to 2024 and I’ve been thinking the time is right to get it going again. I’m lucky enough to have a pretty varied professional life at the moment where I spend equal amounts of time as a startup founder, a polyglot programmer (jack of all trades, master of none, if I’m honest) and a technical leader. I’ve learnt from some amazing people, I’ve made some mistakes and learned from them and I’ve seen a whole load of crazy tech industry shit. This all adds up to a certain amount of wisdom/entertaining anecdotes.

Alongside building Existent and its team, I spend quite a bit of time advising startups who want to build outstanding engineering teams sometimes as an angel investor, sometimes for friends and sometimes as an independent advisor. It’s becoming clear to me that I repeat myself quite frequently so I’ve decided to commit some of this stuff to Markdown in the hope that someone might find it useful, at the very least, it’ll be useful to me.

So, the plan is, I’m going to write some bite size posts here on this blog and cross post them to Linkedin. There’s gonna be a lot of tech leadership, a little bit of technical stuff and a smidgen of startup waffle. If you like it, either follow me on linkedin or grab the feed and put it in your retro hipster feed reader of choice.