Effective engineer

Get shit done

  • Cares about product more that about code or code philosophy
  • Know when something is good enough, being able to accept that something isn't perfect, learning from this for the next project
  • All code is imperfect and that's fine - people and their code improve with time, plus constraints force painful decisions

Understanding context

  • In order to function as a developer you need to understand how your work fits into the context that you are in.
  • You will not last if you just sit down and code what is given to you, without understanding why.

    Able to see the big picture and deliver value to end users above all else.

Being comfortable with being uncomfortable

True skill development requires "being able to sink deeply into a topic and confont the areas that are difficult about it —and persevering though those times of frustration so that you can really explore, really understand the thing that is in front of you".

Setting aside blocks of time—say, two hours—and unplugging from distractions to focus on a singular goal.

Likening it to a meditative practice, enabled by setting aside those blocks of time: “Noticing that urge for my attention to go away and gently redirecting it back to the task at hand so that I can struggle through and identify ‘OK, what part of this do I not understand? How can I find an answer? Do I need to run an experiment? Do I need to code up a toy project and relate it to this? Do I need to identify an expert who can explain it to me?’ It involves trying to make progress very deliberately on difficult topics.”

Invest in the rate of learning

  • Learning compounds. Compounding leads to exponential growth. Earlier the compounding starts, the better.
  • Working on challenging task is a huge opportunity cost. You missed out on compounded learning.
  • Prioritize learning over profitability.
  • Invest your time in activities with the highest learning rate.

While on Job

  • Make a daily habit of acquiring new skills
  • Read code written by brillient engineers
  • Jump fearlessly into code you don't know
  • Always be learning. Invest in skills that are in high demand.
  • Read Books. Attend Conferences.
  • Build and maintain strong relationships.

Prioritize regularly

  • TODO list:
    • Maintain a single todo lists where all tasks are listed.
    • Don't try to remember stuff. Brain is bad at remembering. It's rather good at processing.
  • Prioritize tasks based on ROI.
  • Ask yourself regularly: Is this the most important thing I should be working on?
  • Focus on what directly produces value.

Invest in Iteration Speed

  • If you have to dome something more than twice, write a tool the third time
  • Shorten your debugging and validation Loops:
    • Extra time spent in optimizing debugging workflow can help you fix annoying bugs with less headache.
  • High test coverage to reduce build and site breakages.
  • Fast unit tests to encourage people to run them.
  • Master you programming environment

Measure what you want to Improve

  • If you can't measure it, you can't improve it

Validate your ideas early on and often

  • Not validating early leads to wasted effort
  • Don't delay get feedback
  • Approach problem iteratively.
  • Working solo? Be wary. Be extra vocal and get feedback.

Reduce operational complexity

  • Keep number of technologies low. Don't sway towards shiny new technologies.
  • Do the simple thing first.
  • The first solution that comes to mind is generally complex. Don't stop. Keep peeling off the layers of onion.
  • Simplify the architecture to reduce their operational burden.

Other tips

  • Show up to work on time
  • Interact with co-workers to help them up
  • Keep your commit small: keep your diff size small. People can help make sure that you're on the right track, you're not wasting too much time.
  • Clean code advocate: Write simple, understandable, tested code that follows certain principles.
  • Innovate and elevate: No one ever became great or innovate by just doing the same thing day in and day out so you need to spark change in your organization, how exactly are you going to do that? Find some new tech out there play around with it. Going to conferences, watch youtube, learn courses
  • Take the lead: Take more responsibility
      1. Mentor some body. Listen, give some guidances
      1. You need to get out of your comfortzone. Show some flexibility that you have to management. You need to be your own cheerleader. You can only advocate for yoursefl, don't rely on others to advocate for you
  • Get your work relatively done well whatever they give you, you ask questions, you show up to meetings
  • Write a design doc, write a document that describe what you're going to build, what the feature requirement are. How you are going to set thing up, which funciton you're going to need, which clasess, what data structures you might need and then just go build those out. That will help organize your idea
  • Don't just code for the coding sake: keep your eye on the vision, the goal that you're trying to make happen and make sure your code at least ship. And if you don't forsee your code shipping. Tried to clear the roadblocks for that. Make sure that you can get your impact in where you can
  • Be productive: Try to get at least once piece of code submitted per day that'll keep you on track.
  • Testing your code properly
  • Don't be arrogrant: It makes engineers try to make code really smart and clever. But keep it simple. Swallow your pride Ask for help when you need it. It can save you a lot of time. A lot of engineers just want to tackle things on their own. They spend a lot of time doing things one their own.
  • Create small projects for what you need to learn.
  • Pull request: These are the place every one put out their code, they create a pull request, they set it out for reviews and then a couple things happen. Take the time to review every one's code and learn what everyone is doing
  • Code: Are you help building a team style and standard and if not, are you following one, are you following something like standard.js, effective go. Are you setting up lint for the team's code.
  • Meetings: Are you speaking up? Are you doing what takes in a meeting to show that your involvment to show you are pushing.
  • Manager: Are you asking for more work, are you getting more things done now.

If you want to get the next level faster, you have to put in time outside the 40 hours or you have to be fully optimized in the 40 hours to absolutely kickass and do 10x more than everyone else now.

Take more time to write documentation and put more effort into it and take lead on things like that. Do bigger and better tests don't just do bare minimum.

References

https://gist.github.com/vasanthk/ecefb36977a8a44f01727c20e6c479b5

Last updated on