Engineer Survival Guide

Imposter/imˈpästər/ syndrome

Be aware we all feel like imposter syndrome sometimes, and don’t let it get to you. It is fun not knowing what to do and figuring it out as opposed to fearing it, the more you fear it, the more control it has over you.

The importance of data to convince others

Engineers are data-driven people. Always back up your ideas with data, the more you provide, the easier you convince others.

How often should you interview

  1. meet amazing people.
  2. know your market value.
  3. get backup options: turn down the offer, ask match the offer, jump to new opportunity, negotiate.
  4. opportunity to find sth you love.
  5. stay sharp about domain knowledge.
  6. learn what you know well and what you do not.

Learn to say no and brutal prioritization

  • You are assigned work based on your experience and reputation.
  • Opportunity cost: if comes at a cost of missing your deadline.

Always calculate the opportunity cost, prioritize brutally, and learn to say no to people with an explanation of why it is a no.

Never say no

  • say no but never use actual word “no” directly
  • I would love to help on this, but to set expectation, here are the tasks I need to do for this week that are higher priority.

Keep a good blacklog and always use it to your advantage to tell people why you cannot prioritize what they are asking instead of saying no, stay away from saying no as much as possible.

Finding a mentor

  • Pick a design decision and study it as much as possible, discuss on blind spot/spɑːt/.

Always look out for mentors, the more the better. But pick them carefully to make sure their goals are aligned with yours.

Prototype fast, first working prototype always wins

Always turn your ideas into working prototypes as fast as possible. Everyone has great ideas, but a working prototype is game-changer.

Visibility is everything

  • which one do you think deserves promotion?
  • which one do you think should be let go if company is downsizing?
  • for repeated questions, write a playbook and answer for others reference.

Always find ways to increase your visibility. If no one knows you did sth, no one will believe you have done anything important.

Let people fail, help them fall slowly

  • You need to remind yourself of how you felt as a junior with a micromanaging monster.

Don’t be a micromanager. Set a direction and let people do their best while preparaing a safety net in case they fall.

The tiebreaker - reaching consensus

  • The problem starts when the discussion is about sth non-quantifiable and people’s options come from their intuition.
  • The majority wins will not help you get global optimum, but if things go wrong, nobody is to be blamed and everyone is responsible, the failure will still make team move forward and make better decision next time.

Always have an odd number of people in decision-making so you can have a tiebreaker, remove egos from the picture, the majority wins.

Or ask the authority to decide and clarify when you cannot speak in power.

The importance of allies in design decisions

  • A better approach is composing the design with different options without too many details and sending it around for a small group of people to get feedback as early as possible and keep the design an evolving collaborative document.
  • Doing iterative design help you pick the solution that has the agreement.
  1. Use design discussion to utilize other people’s brain as much as possible.
  2. Make sure all the decisions and the alternatives are documented so everyone can follow.
  3. Make the design an evolving design instead of an end-to-end design.
  4. Have a small group of engineers and get them to you allies before the final design discussion.

The power of meeting summary emails/notes

  • give them chance to correct any misunderstandings, brings everyone to consensus.
  • keep track of all decisions made and people’s positions.

Get yourself in the habit of taking notes and sharing them with stakeholders after each meeting.

Align and Align

  • The secret of success of any company is to figure out long-term vision, the short-term direction.
  • join the all-hands meetings in your company to get a better understanding of the leadership’s long-term goals, keep asking questions, have meetings with the skip-manager to learn from them.
  • Be a regular user of your product; keep an eye on what other projects are going around.
  • The more alignment, the higher impact of your projects, the higher chance to get promoted.

Make sure both you and team are aligned with management, vision and company, this should be a regular exercise for you.

The power of giving credit

Giving credit to the owner either by directly telling them or spreading in meeting or email, the more credits you give, the better.

Sharing the responsibility

For oncall specifically:

After heavy on-call week, the on-call engineers try their best to mitigate and prioritize things, and drive the sync up to distribute(visible to team) the remaining tasks to the team(for example owner who introduced them) and make sure they don’t have too much during the sprint.

Pay attention to patterns and come up with process to solve problems instead of getting frustrated.

Taking responsibility & ownership

Leaders step up, take responsibility for all the risks that carries, and try their best to avoid it ever happening again.

Pick an area, start acting like an owner, take responsibility and shield/ʃiːld/ people.

How to disarm assholes

  1. Try your best to change your perspective and see things from their side.
  2. Change the way you communiate with them. If in-person is a problem, utilize messages/emails
  3. Take a break, let your emotions calm down, and look at the conflict objectively.
  4. Start documenting conflicts and ask someone to give you advice.
  5. Pick projects that do not involve working with them.
  6. Ignore them at all cost.
  7. Talk to manager.
  8. Change the team.
  9. Change the company.

Adaptability

Be positive to the changes around you, calm down and think about the challenges and opportunities introduced rather than being fearful, keep good mindset.

The important of tools and patterns

Always consider whether there is any tool that can help your task better, faster and with fewer mistakes, keep learning tool consistently in your career.

Open source internally

Even for company internal project, treat and evolve it as the open source style, this can remove yourself as a single dependency from the project in the long-term.

The general workflow for open source project:

  1. code sth useful
  2. doc how it works and API usage
  3. doc how to contribute
  4. upload the code to a repo
  5. preferably add doc for each component, the more the better.
  6. add unit test, the more tested the better.
  7. preferably functional tests.
  8. keep an excellent backlog to prioritize and track tasks.
  9. advertise the project and get more engineers invested.
  10. drive the long-term vision and assign task to appropriate engineers.
  11. stay on top of code reviews to keep code quality high.
  12. keep repeating maintaining, docing, adding tests, prioritizing, etc.

How to get more headcount

  1. Switch project unimportant as fast as you can.
  2. Increase your project visibility, advertise the project and yourself better.
  3. Maintain a good backlog and make it visible.
  4. Make sure other team requests are visible, do not fix things before discussing them during sprint.
  5. Seek feedback and improve yourself.
  6. Find another team with management that has faith in you.

Side projects and knowing your surroundings

Tracking other projects will be confused at beginning but it takes less and less time later. Networking is important to achieve that, pls see below section.

Benefits:

  1. Become the go-to person for others, by helping others know what is going on, you become more senior.
  2. Become the bridge between teams, start impacting on projects by commenting and knowing priorities than teammates.
  3. Chance to help other teams to make right choices in their design.

Most of the engineers in big company are working on existing project by doing incremental changes, it is lucky and not common to start sth from scratch and watching it grow.

You can working on small things with surrounding projects, get insider knowledge of how system is being designed and long-term vision for it, this can also help you find critical-priority project that truely care about.

The importance of networking

Started building relationships before you need anything:

  1. Eating lunch with coworkers.
  2. Attend the happy hours, events.
  3. Monthly/biweekly meeting, ask pick up a topic.

After networking, you will not feel you are approaching someone for gain but approaching a friend for help, people love help friends.

Changing teams, risks, timing, making the switch

Familiarize with performance deadlines. The best time to switch team is after your results are finalized, especially right after a promotion, if possible.

How fast to respond email/chat

  1. The one who always replies answer fast in chat/email is the go-to person.
  2. Find the “sweet spot” to decide how often to check the notifications: are you good at context switch?
  3. The ack can be:
  • ASAP: ack, acked, checking
  • will respond in a minute, have meeting and will get back to this in half hour, will answer by EOD
  • how urgent is it? can I look at it later, get back to you later today.
  1. tag people if you are not the right owner, if not very sure, say: pls take a look and tag the right person
  2. create post for repeated questions and share.

1 on 1 with leadership

Status update only is not useful to you, to have right perspective for these meetings, make best use of them, they are here to support you:

  1. happy with your career?
  2. burning out?
  3. plan the career development.
  4. plan the long-term goal.
  5. help you not fail.

For project:

  1. set boundaries with another team?
  2. need someone to drive the discussion, tiebreaker?

You need to get good at reading people, take notes in things you see, this will help you recognize patterns, keep noting the things they do amazingly and the things the are not doing that well.

More important in one-on-one:

  1. career developlment, what you want to learn or get involved?
  2. long-term vision, what your team is trying to achieve? great chance to know the surrounding projects, what others are working on?
  3. getting high quality feedback, make sure the feedback is proactive and actionable, keep follow-up questions, ask to be more concrete and how to improve? Put a plan to move forward.
  4. ask for recommendation when need help, who to access, etc.
  5. ask for mentors, manager has larger network than you.
  6. talk about other people who need help, make sure to pick your words wisely so don’t like you are complaining about someone and focus on what kind of help you manager can bring.
  7. not to be stranger to higher management, ask for meeting with them, they have long-term goal and details. Stay away from yes/no question, instead:
    • how do you see my project aligning with the long-term goal?
    • how do you envision my project evolving in time?
    • what the best outcome you think we can get?

Ack then think

  1. Never let yourself be quiet when you have sth important to say, no matter how early or late, it has to come out.
  2. You can give up safely, say: “Never mind?”

Stop thinking too much and start acting. Start with simplest step to force yourself. At the very least, start making sounds like “Umm” or send out the meeting invite, and then you can figure out the rest later.

Do not be scared to take the time off

If you are sick or have a family situation going on, or have vacation saved up, use it! You should put you 100% at your job, if cannot, take the PTO until you can.

Biggest regret

How to answer interview questions:

  1. what is your biggest regert?
  2. what is the big risks you have taken?

If you cannot answer these questions, that means you are playing too safe. Work on things you will be proud to mention in the future, you can work on 2 safe projects and jump to a risk one, and repeat.

Perfectionism the biggest enemy

Focus on MVP(here it means most valuable product), focus on selling point and make sure that is working and nothing more, don’t spend on too many details, too much perfecting, avoid overengineering.

Don’t let the sneaky ego ruin your life.

Finding an owner area

  1. Establish authority and job security, knowing how to add new features and make sure things do not get broken is super valuable.
  2. Who is in charge of what when join a new team, what is the dependency structure like? Any old system that everyone scared to touch and avoids working on?
  3. After gaining ownership, you can slowly start replacing pieces with better designs.
  4. New and high impact projects will have many people trying to stay as an owner.

Lookout any system without clear owners and try to take them over, or start a new system.

Do not redesign a working system

  1. No working code is bad code! System/requirement keeps changing, the “perfect” design will be short-lived.
  2. Your new system is likely not very different from the old one, when crashing hacky solution(inelegant solution to a particular problem) could be added.
  3. weigh the pros and cons of redesigning a system.

Do not touch a working system thinking you can make it better. Every project starts super clean and nicely design. Then life happens, and each hacky code you see is actually fixing a business logic for sth important.

The important of culture

  1. Company culture, the division adds their own culture on top if it and team further adds sth on their own, for example, how much do you feel encouraged to break things?
  2. Different team/project can have differet pace, think about that: (1) fast prototype and implementation, breaking and fix fast? (2) rethink and do many sanity check before submit?
  3. adding sth of your own to the culture.

Pick the company that aligns with your cultural expectations.

Ambiguity

  1. Dealing with unknowns
  2. Chasing after dozens of people, asking right questions and bringing everyone to a consensus, this is the hardest part.
  3. requirements are constantly changing.
  4. senior people work more on influencing people to the right choice.
  5. A half working system is better than a not working one.

Keep fighting the ambiguty. Start an evolving design doc, collect requirements: must-haves vs nice-to-haves and use cases, prioritize, find solutions that fit, do comparative analysis(pros and cons), setting deadline, bring tiebreaker, sharing meeting summary, prototype fast, repeat until ambiguity disappears.

Hold that question

Hold your questions for a second, build your process, and do basic searches before asking questions. If you cannot find answers, mention your process and ask for help.

Put it on my tasks, unblock yourself

  1. what if you keep ending up stuck in a discussion you don’t believe is worth the time?
  2. never shut someone up in discussion and push back by saying “No”.

Make sure people feel valued when they share suggestions by writing them down to notes, design documents, or simply by creating tasks. If you cannot get into the task soon, it is nice gesture to reach out to the person and explain why you cannot prioritize it right now.

Do you have sometime, ask my calendar

Get better at using calendars, they are like have an executive assistant without actually paying for one. Try incorporating them into your personal life as well.

Setting focus time on calendar

Utilize the calendar tool to set up starting, ending business hours, lunch block and focus time, so people know when not to schedule meetings or ping you directly.

Make people think it was their idea

  1. People let their egos get involved in the decision-making process.
  2. Ask yourself how to reach the idea? past learning, data, experience?
  3. direct people by asking questions.
  4. If no agreement, step back and find the missing pieces.

Do not tell people what your solution is. Give them the data that help you reach the idea and ask leading questions until they reach the same solution.

Being more active on interviewing others

Answer common questions from candidates:

  1. what are you working on?
  2. how much you like it?
  3. how much chance you get for self-development?
  4. what your day-to-day life is like?

Be more involved in the interview process.

What to expect from a brand-new manager

The new manager career has to learn a lot, pick up new perspectives, give up an old habits, and let go of control.

Do your best to help them with every challenge they face, otherwise, change your team as quick as possible.

Collecting actionable feedback

  1. write down the things that need to be improved in each cycle, document how you had done to improve through the cycle and show the progress at the end.
  2. get “constructive” feedback, actionable from your colleagues, managers.
  3. ask feedback sooner rather than later, anonymized comments, also ask feedback on product and process.

Always think of what you can improve about yourself, share it with peers and work on it. Ask for actionable feedback throughout the cycle, find an useful tools to anonymize/ə’nɔnimaiz/(hide identity) them if needed to make your peers feel comfortable about their honest opinions.

Dogfooding

Just list private preivew.

  1. It is the process of using or testing your own services before going public.

Keep using your service as much as possible, and plan dogfooding sessions. Make them organized, assign some parts to everyone involved, grant incentives.

The importance of knowing terms, office jargon

Acronym /'ækrənɪm/: OOO, LGTM, AFAIK, LMAO.

Every time you hear an acronym or term you don’t know, loop them up and note them down until you memorize them. Terms are super helpful to communication and design discussion, never underrestimate their value.

  1. This is essential to senior track.
  2. search google trends or github trends to see which projects are trending.
  3. Know cloud provider’s new product and try it.
  4. Take a note of this project in case later you need it, run small prototype.

This can prepare yourself for a great design discussion and have an idea of what are the available solution out there and how they solved similar problems you are facing

Never keep all your eggs in the same bucket

  1. Implement and landing project, then start onboarding other engineers and focus more on leading them and offloading your time to set the direction.
  2. When you feel the project is not too challenging anymore or not taking all of your time, it is a sign to look for other projectsm, and so on.

Solve the hard challenges, put things in order, onboard more engineers, and focus on becoming a great leader who is hard to replace.

The importance of positive surroundings

We are the average of the closet friends we have. Make sure you pick the close friend wisely.

Being the happy coworker

Find ways to love what you are working on or find projects you will love working on. If you can achieve being happy during the day, your teammates will love working with you.

Working at a start-up

Start-up concerns:

  1. move fast, insane/ɪnˈseɪn/ paces, good fit?
  2. shared office spaces.
  3. layoffs due to financial difficulty.
  4. tech stack, more open-sources and build from scratch.
  5. long work hours, less WLB.
  6. income, stock compensation may not be fulfilled before IPO.

Practice to be good at context-switch and multitasking. What stage the start-up is in, and the risk is different.

Start-up can teach you a lot, before decision making connect with engineers to get some insider info on what they like and dislike.

Office politics

  1. the long-term vision is driven by the leadership, project distributions are influenced by the leadership.
  2. remember that management tends to change regularly; positions get realigned all the time.

Build connections with the leadership but use it more for influencing long-term vision and not to bully people. Always prefer other conflict resolution tactics, but if you no other choices, having strong connections is always better than not having them.

How to help your manager work for you

  1. working on your expectation document improvements.
  2. ask for feedback actionable:
  • what areas would you improve on?
  • do you need to be better at communication?
  • should you increase your visibility?
  • is you code quality not up to the standards?
  • do you need to work on higher impact project?
  1. help on priority tasks from other teams and talk to others, share the task details, your insight and how valuable you think.
  2. tag your manager in all your design review for visibility, even if they do not have time to fully review or comment.
  3. use your manager as central people database.
  4. start writing your GRAD/performance doc early and keep asking review and feedback.
  5. ask for more interview opportunities.
  6. ask for the promotion template.
  7. ask to find your mentors.
  8. share your long-term vision to them, how the project you working on can set the team at a privileged position in the future and get feedback.
  9. have your manager resolve conflicts for you.

The importance of intelligence

Be good at networking. Build your intelligence netowrk, remember trust is a two-way thing.

Comparative analysis

  1. putting things in pros and cons list/table and comparing them, highlight the difference for reviewer.

Using comparative analysis to visualize the pros and cons and make a choice to fit all requirements easily.

Power of A/B testing

People might suggest things like bias, seasonality or random shifts in user actions, but if you have strong metrics to prove your contribution, they cannot say much about it.

Learn how A/B testing works and uses it on your projects so you get data to prove exactly how you have helped the critical metrics. Data is hard to argue against.

Logs, events, metrics and dashboards

Always write self-explanatory log messages and add as many events as possible; create good dashboards to make sure your system is functioning correctly.

Dashboard with meaningful data is a easy way to convince people, learn dashboard build tool and SQL.

Debuggers and crash investigation

  1. breakpoint, step in, variable value display, auto crash detection, edit code and exection on the fly, change vars value, etc
  2. there could be some tunnel extension to help you debug on live server remotely.

Use debuggers on your code smartly and help you fix issues.

Remember it is not your company

Always remember it is not your company. Use all benefits, enjoy your time there, focus on learning the most and being more productive.

Playing for the long game

Focus on the long game, not short-term gain in your career and life.

0%