Upgrade to Pro — share decks privately, control downloads, hide ads and more …

An Essential of "Effective Engineer"

An Essential of "Effective Engineer"

What I summarized from "The Effective Engineer" Book as my company culture value

Ahmad Anshorimuslim Syuhada

November 18, 2018
Tweet

Transcript

  1. PT. MULTIDAYA TEKNOLOGI NUSANTARA Jalan Cikutra Baru V No. 18

    Bandung, Indonesia 40124 +62 (22) 727 4689 [email protected] Anshori - @ans4175
  2. eFishery Platform FishBiz FishFeeder Dashboard FishMarket Mobile Apps Feeder (90,360)

    Sensor Investor Petani Buyer Seller Petani Business, Restaurant Feed Company Ikan pakan, alat Budidaya pake feeder Bagi hasil keuntungan Smart Feeding
  3. How do you measure an engineer’s effectiveness? Is it by

    the number of hours she works? The amount of effort he applies? The number of tasks she completes? - Edmond Lau
  4. To be effective engineers, we need to be able to

    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.
  5. Focus on High-Leverage Activities 1. Use leverage to measure your

    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.
  6. Optimize for Learning • “Google pioneered an idea called ‘20%

    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
  7. Prioritize Regularly • Work on the important and non-urgent. •

    Work on what directly leads to value. • Write down and review to-dos. • Protect Your Maker’s Schedule • Reduce context switches
  8. Invest in Iteration Speed • The faster you can iterate,

    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
  9. Measure What You Want to Improve • Measure your progress.

    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!”
  10. Validate Your Ideas Early and Often • Approach a problem

    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
  11. Improve Your Project Estimation Skills • Incorporate estimates into the

    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
  12. Improve Your Project Estimation Skills • Allow buffer room for

    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.
  13. Balance Quality with Pragmatism 1. Establish a culture of reviewing

    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
  14. Minimize Operational Burden 1. Do the simple thing first a.

    “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
  15. Invest in Your Team’s Growth 1. Help the people around

    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