identify which activities produce more impact with smaller time investments. Not all work is created equal. Not all efforts, however well-intentioned, translate into impact.
engineering effectiveness. Focus on what generates the highest return on investment for your time spent. 2. Systematically increase the leverage of your time. Find ways to get an activity done more quickly, to increase the impact of an activity, or to shift to activities with higher leverage. 3. Focus your effort on leverage points. Time is your most limited asset. Identify the habits that produce disproportionately high impact for the time you invest.
time’ where engineers spend the equivalent of one day a week on a side project to make the company better.” • Tinker on side projects; • Code Reviews; • Write to teach; • Attend talks, conferences, and meetups
the more you can learn. • Invest in tooling. Faster turnaround times for development all provide time-saving benefits that compound the more you use them. • Optimize your debugging workflow. Don’t underestimate how much time gets spent validating that your code works. Invest enough time to shorten those workflows. • Take a holistic view of your iteration loop. Don’t ignore any organizational and team-related bottlenecks that may be within your circle of influence. • Communication is critical for making progress on people related bottlenecks
It’s hard to improve what you don’t measure • Carefully choose your top-level metric. Different metrics incentivize different behaviors. • Actionable metrics “Do not flying blind!”
iteratively to reduce wasted effort. Each iteration provides opportunities to validate new ideas. Iterate quickly to learn quickly • Reduce the risk of large implementations by using small validations. Invest a little extra effort to figure out if the rest of your plan is worth doing. • Beware the One-Person Team
project plan. ◦ Decompose the project into granular tasks ◦ Estimate based on how long tasks will take, not on how long you or someone else wants them to take. ◦ Use timeboxing to constrain tasks that can grow in scope ◦ Allow others to challenge estimates ◦ Think of estimates as probability distributions, not best-case scenarios
the unknown in the schedule. ◦ Initial: Researching tools, logic, test cases and abstractions ◦ During: Interruption, Bug Fixing ◦ End: Technical Debt, Optimization • Define measurable milestones. Specific goals and tasks, deliver step by step. • Do the riskiest tasks first. Reduce integration risk also. • Know the limits of overtime ◦ Many teams burn out because they start sprinting before they’re even close to the finish line.
code 2. Invest in good software abstractions to simplify difficult problems a. Just as overinvesting in an abstraction can be costly, so too can building a poor abstraction. b. Designing good abstractions take work. Study other people’s abstractions to learn how to build good ones yourself 3. Scale code quality with automated testing a. Writing the first test is often the hardest. An effective way to initiate the habit of testing, particularly when working with a large codebase with few automated tests, is to focus on high-leverage tests 4. Manage your technical debt a. Sometimes, we build things in a way that makes sense in the short-term but that can be costly in the long-term
“What’s the simplest solution that can get the job done while also reducing our future operational burden?” 2. Fail fast to pinpoint the source of errors a. Make debugging easier by not masking your errors and by not deferring failures until later 3. Automate mechanics over decision-making a. “Will I save more time overall by manually doing a particular task or by paying the upfront cost of automating the process?” 4. Hone Your Ability to Respond and Recover Quickly a. Mitigation rule
you be successful 2. Build shared ownership of code 3. Debrief and document collective wisdom a. In our haste to get things done, we often move from task to task and project to project without pausing to reflect on how effectively we spent our time or what we could have done better. (Retrospective) 4. Create a great engineering culture a. It evolves over time with the decisions we make, the stories we tell, and the habits we adopt