Prioritization, multiple work streams, unplanned work
leeorengel.com
leeorengel.com
Part of this is, as a developer, I really want to be able to have a few days of relatively relaxed work at the end of a project. Maybe just check some logs, make sure things are running okay, pay off some technical debt, talk with coworkers about work or not work. This almost never seems to happen, while delivering one thing the team frantically looks to the next. People need periods of work and rest.
In essence, estimate and operate with sustainability in mind.
Averages of averages lack this very practical, immediate interpretation.
I’ve been working with a therapist for a few years. And that’s one of the things we’ve discussed that’s important for mental health.
We need to digest, reminisce, retrospect, whatever you want to call it to get closure. If you don’t get closure then you have open loops that are mentally taxing.
It should be embedded into the process so it happens all the time. This should give a feeling of sustainability. To put it in other words, you should not feel at the end of the project you need this kind of time because you were doing it all along.
There should be no feeling of exhaustion and relief at the end of the project. That's a sign of non-sustainable process, people burn out on it, employers loose more money at the end and people feel like shit - not great, better for everyone to avoid.
The problem is that if you put aside, say 20% of time for unplanned work, this is effectively broadcasting to all the teams around you "Oh, we have planned 20% downtime", and they will feel extra vindicated in asking you to do stuff for them as part of this "unplanned work". This is in addition to the bevy of middle manager vanity meetings, all-hands, quarterly meetings, and a bevy of other useless meetings that managers seem to be able to put on their developers' calendars seemingly on a whim.
The only correct advice, and one that is not put into this because it is unpalatable to someone posting "thoughts on leadership" is to push back hard on "unplanned work" in addition to leaving some slack time in planning. Otherwise you will end up with the typical developer who feels constantly threatened by management and has one foot out the door.
If you try to plan the next three months ahead of time, you'll either be doing a lot of unplanned work or doggedly sticking to a plan that's out of date and ineffective.
If you try to plan for the next two weeks, you actually have a small chance of accounting for what's going to happen in this period. In some industries, you have to make that two days.
I think Reinertsen uses the example of searching for a submarine. The area it can be in after one sighting grows with the square of time (it's a circle whose radius is determined by speed.) If you haven't found it within a few hours of sighting, you might as well give up because by that time the search area expands faster than you can conduct a search. Planning is similar.
Pushing back against actually important unplanned work would be harmful — and usually nobody does that, which shows that it’s not actually about planning.
The point is, at least in my experience, many orgs have lots of other teams running around with ideas for things the dev team might do for them. Many of those are just not very important in the grand scheme of things. A lot less important, for example, than keeping the codebase healthy. But it’s usually not politically convenient to say that explicitly.
It’s much easier to “shut them up” by citing schedule pressure. Of course, this tactic backfires hard whenever there’s even a hint of downtime.
Well, the problem often boils down to getting people to agree on importance. No, that feature built for a specific customer is not that important. No, the team cannot spend 7 days on a "design sprint" that a director just cooked up. No, maybe we can get those servers running for your team next sprint, they can share their existing servers until then.
I fully expect the "workers" I supervise to be able to identify things which need work completely on their own. Many heads think much better than one. Besides, they are on the frontlines so they have a much better view of the situation than I. (As much as I try to also do technical work myself.)
For example, I've been on teams with minimal ops burden where the manager agreed to keep 1 head off-sprint to handle emergencies. On typical weeks, that gave the team 15% capacity towards tech debt/better OE... which reduced frequency of emergent events... and when there was a true emergent situation (eg log4j), it was immediately started by that reserved head with no impact on product commitments (that stability then also saved the manager and lead dev's time).
That very same team had constant product priority churn, but personally I took no issue with that given the pleasant state of code.
If you want things to be done quicker, you counter-intuitively have to spend less time doing things. Keeping a person in reserve is one easy way of accomplishing that.
(Why is it a trade-off? Because when in order to ensure you spend a lot of time doing things, you need to have a long queue of things to be done so you never run out of things to do. That long queue means everything takes longer to get done because it spends more time queuing.)
We’ve also tried it and as parent describes it can be a bit problematic as you often have domain specific experts within the team, who are the best to solve particular issues, especially as fires often should be put out quickly.
What you need to do in such case is to check if you can accept a slightly longer fire, refrain yourself from interrupting the expert and see the situation as a learning experience. Often debugging something is the best way to learn.
Lessons learned. Beers to buy.
I am naturally a quite chaotic person, I have trouble helping other people create order when I'm already having trouble keeping an eye on all the streams that exist in the team. Any tips would be appreciated.
I wish people would stop bringing up the Pareto principle. "Some things are consistently bigger than other things." Can we talk about why things are bigger than other things instead of saying it's because of some law of nature?
I see what you're saying, but it sounds like you haven't really internalized the principle.. because you're viewing it as a tautology rather than the useful heuristic it is. You can and should still have the probing discussions. But having 80/20 as a rule of thumb will actually help you know where to probe. So you might want to give it another look.
> I am naturally a quite chaotic person, I have trouble helping other people create order when I'm already having trouble keeping an eye on all the streams that exist in the team. Any tips would be appreciated.
There's so much to say about this topic.. it's hard to give many pointed tips. But my advice would be to 1) read far and wide about product management (blog posts like this one, books, research, etc), and especially focus on first principles. 2) Experiment with your team! and 3) *Do not* think that doing one of those weekend certification courses or seminars or whatever is going to help much. Points 1 and 2 will give you far far more insight.
Re: pareto principle, I've never actually looked at what the principle means. "80% of the consequences come from 20% of the causes" is quite useful, as I understand it it means "don't assume that causes of consequences are randomly distributed".
I think I see it often misunderstood the way I misunderstood (/misunderstand?) it: "As with most things, there is the 80/20 rule (Pareto again), exceptions are sometimes warranted in important situations." this sentence just says "you should stick to the rule about 80% of the time"
Re: advice, thanks for taking the time! I hadn't considered research, but luckily I already agree with 3) :P
For tracking my own work, David Allen's "Getting Things Done" (GTD) was a huge influence for me (though it can be a bit cult-like and many people get too distracted optimizing their GTD system instead of actually getting things done).
As for managing a team's work, two important tenets of scrum that I think many teams have a hard time sticking with are limiting work in progress and retrospectives. Limiting work in the sprint backlog and each team member's own plate during the sprint is critical for actually getting work across the finish line. Retrospectives can be hard, especially when people are feeling pressure to keep moving forward, but retrospectives are how a team can optimize and gel, which is most important during those times.
apenwarr's (long) "An epic treatise on scheduling, bug tracking, and triage" is a great resource: https://apenwarr.ca/log/20171213
It's the opposite of a law of nature: it generally doesn't apply to nature which is bounded by physical constraints.
It happens in artificial fields like economy, software engineering, etc. I'm not sure if there's a general principle, but I heard an intuitive explanation for why it happens in software engineering: it's a recursive field. Software is built from smaller software built from even smaller software and so on. This allows almost unbounded complexity (as opposed to e.g. houses, which are not built from tiny houses ad infinitum.)
With unbounded complexity comes fat tails, and therefore the Pareto principle.
Edit: well, thinking about it, it does apply to some things in nature, like the sizes of bodies of water.
No, it doesn't work well.
Who has seen something completely different in real life?
What you’re talking about is the human equivalent of tech debt. Occasionally you need to take out a loan, but you had better have a good reason why and a plan to pay it back.
If there’s crunch to get something live and then people scale back, that’s one thing. But if the product/company/whatever is only successful if people work in an unsustainable way then it’s not actually successful. Better to understand that before everyone is burned out and miserable.
Everyone enjoys the big parallel work, but it's really hard to set up projects to do that, and also deprioritize other items so we can focus.
We have a giant surface area though, so one stream per person is as few streams as we can manage most of the time