Skip to content

10x-engineer

calendar_today 2020.04.01
schedule 8 min read

10x engineers Technology Radar Over the past few months, the term “10x engineer” has drawn intense attention. A widely shared Twitter thread essentially suggested that companies should forgive antisocial and destructive behavior in order to retain engineers believed to have massive individual output. Fortunately, many people on social media mocked the idea, but the stereotype of the “rockstar developer” remains widespread. In our experience, great engineers emerge not from individual output but from collaborating within great teams. Building a team that mixes different experiences and backgrounds yet is full of talented members, and providing strong support for teamwork, learning, and continuous improvement, is a far more effective approach. These 10x teams move faster and are more resilient—without tolerating bad behavior.

Overview

Essential Complexity Essential Complexity

Accidental Complexity Accident Complexity

Choose the right way of doing things to reduce the workload caused by accidental complexity; Principles

  • Begin with the end in mind
  • Task decomposition
  • Communication and feedback
  • Automation

Thinking Framework

  • Where are we ?
  • Where are we going ?
  • How can we get there ?

Begin with the End in Mind

How do we make sure our effort isn’t wasted?

Everything is created twice: first in the mind, an intellectual creation, and only then in practice, the actual construction.

For those of us who build software, we should define the “end” as building software that is valuable to users. Only by bringing value to others can our own value be realized.

tips: Design a project or example that begins with the end in mind

The Value of DoD

Definition of Done

User Story

Use scenario walkthroughs to refine requirements

  • Theme
  • Overview
  • Details
  • Acceptance criteria

In acceptance criteria, the most important part is the description of exception flows, similar to validating exception logic in test cases.

Continuous Integration

What R&D needs to deliver is not a pile of code files, but runnable software or systems. Although we all write code and develop in the same era, at the level of technical practice, different teams seem to live in entirely different ages

Lean Startup

Most people in the IT industry are not professional enough. We must think independently, ask “why” a few more times, and minimize the number of times we fall into a pit before calling for help.

Lean Startup: creating new things in the face of uncertainty. What Lean Startup gives us is a framework for thinking about products, and most products we encounter can be examined within this framework.

The build—measure—learn loop

By default, don’t build any requirement until you figure out why it should be done.

Inside and Outside the Pit

Differences between roles: the real difference between roles at work lies in context. When writing the same code, some people see the trees while others see the forest and can think globally.

When all you have is a hammer, everything looks like a nail.

Spending enormous effort solving a problem that may not actually be a problem is a common blind spot for many programmers.

Deduction

The last mile: if we want to reach the goal, what must we do at the very end?

  • Start from the outcome and see what factors the final launch needs to consider
  • Deduce a step-by-step executable plan, using the factors considered earlier as the yardstick
  • Summarize the tasks to be done based on the deduced plan Begin with the end in mind, but the path to the result matters even more.

Quantification

Insight: it depends on a person’s long-term accumulation in a field—in a sense, it is a form of big data.

Planning&Prepare

Design your own Iteration 0 checklist

Task Decomposition

How many civilizations similar to ours are there in the Milky Way? The Drake equation: N= R* x Fp x Ne x f1 x fi x l

Elon Musk’s Mars exploration plan: send a person from Earth to Mars at one-millionth of the cost.

Testing

For every programmer, only by writing both the code and the tests well during development are you qualified to say that what you deliver is high-quality code. The ice-cream cone testing model: A time-consuming and labor-intensive testing model

  • Manual regression testing
  • Automated end-to-end testing
  • Integration testing
  • Unit testing

The Test Pyramid

  • UI
  • Service
  • Unit

The lower-level the test, the fewer things it involves, while higher-level tests cover a broader scope. Write more unit tests

TDD: Test-Driven Development

Tests drive code: an example of a static method—how to test a static method, and how to do it better under OOP thinking.

Test Driven Development

Test Driven Design

Write testable code

The Master Programmer’s Secrets

  1. Where did TDD come from?
  2. Extreme Programming Explained
  3. Test-Driven Development

Decompose tasks—the smaller, the better.

Task Decomposition Exercise

Requirement: a user logs in by entering a username and password.

Excellent Test Code

A journey: A-TRIP

  • Automagic
  • Thorough
  • Repeatable
  • Independent
  • Professional

Cutting Requirements

Principles for evaluating user stories:

INVEST

  • Independent
  • Negotiable
  • Valuable
  • Estimatable
  • Small
  • Testable

To manage requirements well, first break them down into small pieces

How can requirement estimation be done more reasonably, with minimal error?

Recommended books

Requirement Management

Requirement priority management: importance and urgency

Minimal Cost

MVP: Minimum Viable Product

Communication and Feedback

Life doesn’t go your way eight or nine times out of ten.

Communication and feedback are ways to improve encoding, decoding, and the algorithm itself.

Writing Maintainable Code

Any fool can write code that a computer can understand. Good programmers write code that humans can understand. ------Martin Fowler

Program in the language of the business

Domain-Driven Design

Recommended reading Clean Code — Robert Martin

22 Lightweight Communication: Why Are We Always in Meetings

Meetings are meant to solve problems, but the reality is that meetings solve few problems while creating the problem of too many meetings.

Meetings that work particularly well are almost always for information sync; meetings that go poorly are basically ones for discussion.

Improving meetings:

  1. Reduce the number of attendees
  2. Communicate face to face
  3. Stand-up meetings

Visualization: A More Direct Way to Communicate

Technology Radar: a structured way to learn new knowledge

Build Your Own Radar

Fast Feedback: How to Do Continuous Integration Well

  1. A continuous integration monitor that shows CI status in real time
  2. Respond to problems immediately

Retrospective

Don’t be defeated by the same trick twice The benefit of retrospectives: objectification—looking at problems from someone else’s perspective

Retrospective: replaying the process, discussing and analyzing it, and finding ways to improve yourself. This approach provides an objectified perspective, allowing you to view everything that happened more objectively.

Hold retrospectives regularly, pinpoint the root causes of problems, and keep improving.

Listen to the Voice of the User

Whoever is closest to the user has the right to speak, whatever your role

Spend more time with users

A product manager is the mouthpiece of user needs

Fail Fast

If there is a problem, expose it as early as possible.

The earlier a problem is exposed, the lower the cost of fixing it.

Structured Learning: Be Good at Writing Documentation

There are many ways to structure scattered knowledge, and output is a critical part of it.

How to write good documentation: there is no secret—practice makes perfect.

Recommended reading

The Presentation Secrets of Steve Jobs

The Nature of Laziness

Doing valuable things matters most—and “valuable” here doesn’t just mean what you do; saving time and cost by not doing things is also valuable.

Start with automating your daily work and build your own automation toolkit

The capability needed to build automation tools for others: software design

In software development, everything else is volatile; only the variability of design is under your own control.

The three virtues of a great programmer: laziness, impatience, and hubris.

Project Automation

Automate the work process.

Scattered Operations Knowledge

Systematize scattered operations knowledge—but how?

Continuous Delivery ≠ Continuous Integration

How to build a continuous delivery system

Take deployment into account during development

Acceptance Testing

BBD: Behavior Driven Development The BBD testing framework Cucumber

The key point: automate acceptance testing

Gradually Decaying Code

The best punishment for a programmer is to make him maintain the code he wrote three months ago

Software design principles: SOLID

  • Single responsibility principle
  • Open-closed principle
  • Liskov subsitution principle
  • Interface segregation principle
  • Dependency inversioni principle Keep functions short

MVC Layered Design

The value of layering: building a good abstraction

Hexagonal Architecture

How to Build a Taobao with 50,000 Yuan

Recommended book: Ten Years of Taobao Technology

Systems of different magnitudes are simply not the same system

Solve problems with simple technology until the problems become complex

Do DDD Well Before Talking About Microservices

DDD: Domain-Driven Design

Recommended books

How to Maintain a System

When transforming a legacy system, one key point is: don’t go back to the old ways.

Recommended book

How to Stay Competitive

Master one specialty while developing multiple skills—become a T-shaped talent Work and grow in the learning zone. Growth Ring