Slide 1

Slide 1 text

How to be an Effective Engineer Aditya Satrya Data Engineering Tech Lead at Mekari linkedin.com/in/asatrya #isiTalk #EngineeringCultureSeries | Oct 2020

Slide 2

Slide 2 text

2 Why?

Slide 3

Slide 3 text

Increase your impact? Staff engineer → making a whole team better Principal engineer → making the whole company better Distinguished engineer → improving the industry 3

Slide 4

Slide 4 text

Get promoted quickly? More quality time? 4

Slide 5

Slide 5 text

Outline #1 Mindset Prioritize regularly & focus on high-leverage activities Optimize for learning #2 Execution Measure what you want to improve Solve problem in structured manner Approach problems iteratively Invest in Iteration Speed #3 Long-Term Value Balance quality with pragmatism Invest in your team’s growth 5

Slide 6

Slide 6 text

My Favourite Books (top 3, in this topic) 6

Slide 7

Slide 7 text

7 #1 Mindset

Slide 8

Slide 8 text

#1.1 Prioritize Regularly & Focus on High-Leverage Activities 8

Slide 9

Slide 9 text

Opportunity cost of working on wrong ideas can set back growth by years. 9

Slide 10

Slide 10 text

Focus your effort on leverage points 10

Slide 11

Slide 11 text

Ask yourself regularly: “Is this the most important thing I should be working on?” 11

Slide 12

Slide 12 text

Adopt a goal-setting & execution framework ● OKR ● Scrum 12

Slide 13

Slide 13 text

13

Slide 14

Slide 14 text

Be focused Learn to say “no” Preserve blocks of focused time Limit the amount of WIP 14

Slide 15

Slide 15 text

#1.2 Optimize for Learning 15

Slide 16

Slide 16 text

Adopt the growth mindset 16

Slide 17

Slide 17 text

Invest in the rate of learning. Learning compounds. 17

Slide 18

Slide 18 text

Make sure you are working on high priority/impacting projects. 18

Slide 19

Slide 19 text

Preserve a constant portion of time for learning 19

Slide 20

Slide 20 text

Find/build work environments conducive to learning 20

Slide 21

Slide 21 text

Look for culture with curiosity. Where everyone is encouraged to speak up and take a risk. 21

Slide 22

Slide 22 text

Autonomy. Freedom to choose how to achieve a goal. 22

Slide 23

Slide 23 text

People smarter than you. 23

Slide 24

Slide 24 text

Increase team’s learning Practice code review and post-mortem 24

Slide 25

Slide 25 text

25 #2 Execution

Slide 26

Slide 26 text

#2.1 Measure what you want to Improve 26

Slide 27

Slide 27 text

Use metric to drive progress. If you can't measure it, you can't improve it. 27

Slide 28

Slide 28 text

Pick good metrics. That reflect real value, not just activity 28

Slide 29

Slide 29 text

Pick good metrics. That drive the right behavior. 29

Slide 30

Slide 30 text

Align everyone around metrics. Your manager, peers, subordinates, clients. 30

Slide 31

Slide 31 text

#2.2 Solve problem in a structured manner 31

Slide 32

Slide 32 text

32

Slide 33

Slide 33 text

#2.3 Approach problem iteratively 33

Slide 34

Slide 34 text

Evaluate your effort early and often. Not evaluating early leads to wasted efforts. Don't delay getting feedback. 34

Slide 35

Slide 35 text

Find low effort ways to validate work. 35

Slide 36

Slide 36 text

Power of small batches. Helps you avoid making a big mistake by stopping the flow. 36

Slide 37

Slide 37 text

Reduce risk early. Do the riskiest task first so that you can mitigate biggest risk early. 37

Slide 38

Slide 38 text

#2.4 Invest in Iteration Speed 38

Slide 39

Slide 39 text

Find out the biggest bottleneck to optimize. Engineering cycle Communication overhead Organizational process 39

Slide 40

Slide 40 text

CI/CD is high leverage Implement it as early as possible, even if your team consists only you. It improves speed, quality, and peace of mind 40

Slide 41

Slide 41 text

41

Slide 42

Slide 42 text

Invest in time-saving automation. If you have to do something more than twice, write an automation the third time. 42

Slide 43

Slide 43 text

Examples to automate ● Testing, ● ETL, ● Detecting spikes, ● Deploy servers, etc 43

Slide 44

Slide 44 text

Debugging is hard. It's time-consuming. Upfront investments to shorten debugging loops are worth it. 44

Slide 45

Slide 45 text

Examples: ● High test coverage ● Fast and incremental compiles and reloads ● Logging ● Clean code, refactoring ● Coding standard & naming convention ● Dockerization 45

Slide 46

Slide 46 text

Non-engineering bottlenecks: Cross-team dependency 46

Slide 47

Slide 47 text

Anticipate the misalignment of priorities ● Shared OKR ● Regularly asking for updates 47

Slide 48

Slide 48 text

Projects fail because of under-communicating Not over-communicating 48

Slide 49

Slide 49 text

Non-engineering bottlenecks: Approval/feedback from decision-maker 49

Slide 50

Slide 50 text

Don't defer approvals until the end. Don't delay feedback. 50

Slide 51

Slide 51 text

51 #3 Long-Term Value

Slide 52

Slide 52 text

#3.1 Balance Quality with Pragmatism 52

Slide 53

Slide 53 text

Balancing benefits vs trade-offs Instead of right and wrong, look at things in terms of works and doesn’t work to achieve our goals. 53

Slide 54

Slide 54 text

Establish a culture of reviewing code Catch bugs and design problems early, sharing working knowledge of the codebase. 54

Slide 55

Slide 55 text

Manage your technical debt Accumulating technical debt is fine as far as it is repaid within time. Focus on the debt that incurs the most interest. 55

Slide 56

Slide 56 text

#3.2 Invest in your team’s growth 56

Slide 57

Slide 57 text

Help everyone around you succeed. The higher you climb up the engineering ladder, the more your effectiveness will be measured not by your individual contributions but by your impact on the people around you. 57

Slide 58

Slide 58 text

Avoid heroism. Shared ownership of code. Share knowledge. 58

Slide 59

Slide 59 text

Invest in mentoring 59

Slide 60

Slide 60 text

Create a great engineering culture Optimize for iteration speed. Push relentlessly towards automation. Build the right software abstractions. Focus on high code quality by using code reviews. Maintain a respectful work environment. Build shared ownership of code. Invest in automated testing. Allot experimentation time, either through 20% time or hackathons. Foster a culture of learning and continuous improvement. Hire the best. 60