markmap | ||||||||
---|---|---|---|---|---|---|---|---|
|
- this is often only marginally within their control
- sometimes completely out of their control
- instead of measuring individual developer productivity...
- for the next two weeks track when your time falls into these buckets
- where can you shift time spent in these areas to higher leverage areas?
- e.g. dealing with
- urgent bugs to fix
- unplanned system outages
- incidents in productions
- anything that could have been prevented with better planning or monitoring
- 😡 ”it feels like I'm just putting out fires all day. Instead of coding, I'm playing whack-a-mole with system issues”
- ✅
- sprints with a lot of bugs due to having a new system in production and the people working on the latest major changes that left the company
time spent context-switching and incurring "startup costs" to move between tasks, get set up, and collect the necessary things to do the work
- e.g.
- 😫 ”just when I get into the zone, I have to switch tasks. It takes me another half-hour just to pick up where I left off”
- 😫 ”every time I have to context-switch, it's like starting my day all over again. So draining”
- 😫 ”no, I don’t ‘have a second’. Because a second turns into half an hour”
- sometimes we ourselves auto-generate those interruptions
- internal interruptions
- pomodoro technique as a tool to help you stay focused 🍅
- ✅
- context-switching between focused time on actually delivering changes and meetings
- ✅
- ✅
- or making do with less effective tools during that time
- or when you give up altogether
- e.g.
- 😭 ”I spent three hours today just filling out forms to get access to a tool that should be standard for my job”
time spent on performative compliance efforts that don't effectively reduce risk to customers or the business
time spent estimating, speccing, discussing, and pitching ideas and work before the “last responsible moment”
- writing specifications and proposals and not getting valuable or collaborative improvements to the ideas
- ✅
- e.g.
- 😡 ”we had a two-hour meeting about a feature that won't be built for another six months. What a waste of time”
- 😮💨 ”we spent weeks planning, and now the requirements have changed. All that effort feels wasted”
- 🥵 ”we didn't plan at all and just started coding. Now we're paying the price”
- ✅
- just-in-case backlog refinements when we have the top of our backlog full of items for the next two sprints (at least!)
time spent unnaturally or ineffectively splitting work into units for sprint planning, burn-downs, sprint metrics, etc.
- adding unhelpful abstractions of the work on top of the actual work
time spent waiting for deliverables from other teams that are behind schedule, causing delays in your work
- in theory, you can do other work, but often, it is not high leverage
- e.g.
- 🙄 ”I feel like half my job is chasing other teams for updates. Why can't we just have a clear plan and stick to it?”
- 😫 ”We're always waiting on another team. It's like our project's success is out of our hands”
- ✅
- a big tech migration of a core sw component that is used by several other components downstream, whose teams have to made changes before we could release our change
time spent in meetings and discussions to align with other teams when a more streamlined communication process (or less structured, more embedded) could have been effective
- this is also true in code, where we could depend on lib that are used by dead code that we don’t remove because we “don’t have time” or “we don’t know if it’s actually used by some other system”
note: these are more systemic issues, that has no easy solutions and requires combined efforts, the right alignment and authority, a good overall system view and a lot of energy
- ineffective communication
- ✅
- ineffective meetings
- ✅
- synchronous meetings that should be asynchronous
- ✅
- 😫 “we just had an hour-long meeting that could have been an email. My whole day is thrown off now”
- asynchronous meetings that should be synchronous
- ✅
- 😡 ”we tried to handle this complex issue through email threads and ended up misunderstanding each other. Should have had a quick call”
- due to
- low psychological safety
- judgment
- fear of retribution
- 😔 ”we keep having these meetings, but no one speaks up because they're afraid of backlash. It's pointless”
- low confidence that things can actually change
- needing to repeat those activities repeatedly
- we expect to re-contextualize information for different audiences, but if it is the SAME information, that is counterproductive
time spent seeking consensus across a large group of people when decisions could be made more locally
- 😓 “I feel like we're in a decision-making loop. We discuss, decide, and then second-guess ourselves”
time spent dealing with hasty local decisions that could have been better made with a couple more people involved
- making key decisions without appropriate support and information
- ✅
- time lost dealing with local optima solutions that are suboptimal as at bigger scale
- ✅
- 😳 “so we're having another meeting to decide what we already decided last week? Great”
- 😥 “a decision was made without involving anyone who actually works on the project. Now we have to redo it”
- 😒 “if we paired, this would be done in an hour”
- 😩 “I can’t get a second to work alone on this”
time spent using transactional processes and work approaches for things that should be collaborative
time spent using collaborative and high-touch methods for situations that can be safely transactional
- ...or a culture that frowns upon asking for help
- ✅
- 🙁 “I could solve this in five minutes with a little help, but everyone is 'too busy' to answer a simple question”
time spent locating the right individual or department to assist with a specific issue leads to a runaround
- ✅
- 😒 “I finally found the right person to help me, but it took three days of getting the runaround”
- 😑 “I spent two hours today deciphering outdated documentation. I still don't have my answer”
time spent navigating or working with difficult-to-understand or poorly maintained code, documentation, etc.
- ✅
- ...without fixing issues as you encounter them
- ✅
- 🤮 “the code is such a mess that it feels like archeology, not programming”
- but also create additional confusion down the road for other team members
- 😑 “we have so many hacks in the code now, it's like walking through a minefield. One wrong step and everything blows up”
- 😒 “I spent half my day documenting a workaround that's just going to confuse the next person who sees it”
- doing manual work because a third-party service we’re using to publish our listings is not working as we expect
time spent correcting mistakes or misunderstandings that arise from an incomplete or rushed onboarding process
- 😒 “new hires spend their first week just figuring out our convoluted setup process”
time spent getting new team members up to speed on things (that could be effectively streamlined) without having enough time to share broader context and build relationships
time spent repeatedly covering basic project details for new hires because of a lack of standardized onboarding materials or procedures
- 😟 “it feels like every new team member is reinventing the wheel because our onboarding is so disorganized”
time spent getting finicky tools to work, using outdated tools, or getting tools to play nice together
- this includes manually reinstalling tools and repeatedly setting up your environment manually
- 🙄 “if I had a nickel for every time I had to manually reset my dev environment... I'd have a lot of nickels!”
time spent using the wrong tool for a job, working more slowly, and producing more errors or workarounds
- 😟 “we automated the task, but the tool we used is so complicated that now no one knows how to fix it if something goes wrong”
- something is not working, and you are trying to figure out why
- and you don't have the tools/observability to be effective
- in some cases, you leave issues open
- in other cases, it takes much longer to get to the bottom of things
- ✅
time spent resolving conflicting versions of libraries or packages when they could be standardized across projects
- ✅
- this also includes fixing errors caused by doing these tasks manually
- 😫 “why am I still doing this manually? We have the technology to automate this! It feels like we’re stuck in 2004”
time spent manually updating dependencies when automation tools could have been used to keep them up to date
- ✅
- you can't do something else, but you're waiting
- 🙁 “I tried to multitask while waiting, but the context-switching just made it worse”
time spent waiting for compute-intensive tasks to complete, like builds or data transformations, which could have been optimized
- 😔 “I could have finished this hours ago, but I'm still waiting on the build to complete”
time spent working on something without validating earlier assumptions as it degrades the leverage of what you are doing right now
- 😤 “I wish we had just validated this before building it out. Now we have to backtrack”
time spent locking down something prematurely, often to 'show something' to managers, when it would have been better to start more minimally and evolve it over time
- 😕 “we should have just shipped this and started monitoring feedback”
- yes, you can do something else while waiting
- ...but you incur context-switching costs
- and the valuable task requiring feedback is on hold
- 😫 “I guess I’ll just keep going based on the assumption that this is true. But the evidence is super shaky”
time spent working with incomplete context or information where your work might be better informed and more effective
- ...or your time might have been better spent focusing on learning
- 🤬 “a product manager made up this user story, I can tell. I’m not sure they really understood the data or feedback”
time spent chasing perfect information or complete certainty when roughly right decisions will suffice
- ✅
- waiting for the “perfectly defined” user story on Jira before starting to work on it
time spent trying to decode how people translate customer needs when it would be better to connect directly
- ✅
- time spent working off of hastily pulled together research or things not researched with the right methods
time spent on code that sits around without being released to customers, not eliciting feedback or producing value
- ✅
- 😑 “My code is just gathering dust because it hasn't been released yet”
- 😒 “Who knows if this will even pass the checks anymore”
- 😨 “We’re on the fifth phase of this projects, and haven’t actually delivered anything. Funny, right? The burndown looks good though”
time spent building things that customers don't use, are over-built or over-engineered, or focus only on short-term revenue
- thereby passing the costs to future developers
- 😕 “I built this feature that nobody uses. It's like building a bridge to nowhere”
- 🙄 “Sure we closed the customer, but that is some weak-assed revenue”
time spent doing made-up projects due to delays in feedback and direction and pressure to remain busy during lulls and gaps
- 😒 “Well, my performance review said I was light in this area, so we invented this project I could work on to prove myself”
- often leading to working overtime even when in degraded mode
- 😣 “We're rushing to meet a deadline that someone pulled out of thin air—and dropping a lot of balls in the process”
- 😔 “I’m working at like 50%. I’m not making great decisions”
- ✅
- e.g.
- afternoon meetings for tasks that require deep thinking
- morning meetings during the best concentration window
- 😓 “Why are we having a brainstorming meeting at 4 PM on a Friday?”
- 😠 “They scheduled a routine update meeting during my most productive hours. There goes my flow”
- you are less effective when you try to get productive later in the day
☹️ “Every time I say I am going to take a real lunch, I end up on a stupid Zoom call”
- something that is way out of the person's skill set
- 😰 “I hate to admit it, but I am way over my head”
- something that is way below their skill set
- 😪 “I’m bored, and half checked out”
time spent re-learning information that was lost when people who didn't have an opportunity to pass along that knowledge left the company
- ✅
- 🫤 “Our key expert left, and now we're spending weeks just to re-learn what he knew”
- 😤 ”No one on the team has actually met a customers. That’s crazy”
- 😞 “my manager is so out of the loop, I have to spend hours each week just catching them up”
time spent getting people back up to speed or getting people current on progress because they were too busy to remain involved in what was happening
- 😒 “I briefed my manager last week, and today they asked the same questions. Do they even listen?”
time NOT spent on high-leverage work, exchanging valuable context, cross-training other people, and keeping up with technology trends
- these represent opportunity costs that the other items on the list keep you from attending to
- especially when not fixing something makes it harder to fix in the future
- 😞 “I wish I could just spend one day making these paper cuts go away”
- 😔 “I wish I had time to work on more impactful projects, but I'm stuck doing reactive tasks”
time spent doing less effective work due to the second and third-order effects of all the items mentioned above
- including
- loss of morale and confidence
- psychic harm
- "checking out"
- disconnecting from work
- 😭 “All these small inefficiencies are really starting to affect team morale. It's a downward spiral”
- 😒 “The money is good, and I’m going to lock in my options. I can’t change this place”