Interview and Job Search Tips for Software Engineers

Job Seeker

Photo by on Unsplash


The opinions expressed here are my own, not my employers, and anything I have wrong is entirely my own, not that of my sources.


This article is primarily intended for for Software Engineers, DevOps, and SREs. I know that not everyone is a software engineer or similar role, but that is what I know best. Most of the content and resources here are still applicable to other roles if you ignore the parts related to coding exercises and system design.

Recent months have been challenging for a lot of people in the tech industry due to layoffs and economic conditions. Plus there are always people trying to start a new career, find a better role, or change paths.

So this seemed like a good time for me to put some effort into collecting the suggestions and resources I can share to help anyone looking for a new role. This is in two parts. The first is this article with tips and advice, and the second part is a collection of resources for job searching and interview preparation.

This is the most helpful thing I know to do for people who may be in a bad place right now, so I hope it helps you if you are looking for a new role, especially those of you affected by layoffs who did not expect to be searching for a new job.


Although I am currently gainfully employed, things can change suddenly for reasons that are not always under our control. I experienced what it is like to be unemployed for an extended period earlier in my career. I did not have a full-time job for five months right after I had just become a father. This is an experience that will leave an indelible mark on you. I was working for an extremely tiny startup, and it shut down without paying me for the month prior. I was a self-taught developer, only twenty-five years old, and every job experience on my resume was from a small unknown company or self-employment. I had about eight years of experience because I started working when I was only seventeen, but I had virtually no credentials on paper. I also had zero experience at job searching. Every position I held was from word-of-mouth or working with people I knew.

There is probably nothing earth-shatteringly new here, but it can be useful to make sure you have the basics covered, and try to raise the bar and stand out.

What Do I Know About Interviewing?

I have interviewed hundreds of job candidates over my career, mostly software engineers and engineering managers. I have also been hired after interviewing at a large tech company three times, twice at Amazon and once at Google. I credit some of this to competing in soldier boards and NCO boards while I was in the Army. I was chosen from these competitions as NCO (Non-commissioned Officer) of the month once and soldier of the battalion twice during my four years of active duty. These competitions were basically panel interviews by senior NCOs who would ask about arcane details from Army field training manuals. They would also sometimes ask you to recite things like the NCO Creed or Soldier’s Creed. These competitions required a lot of study and preparation and they were intentionally stressful unlike most tech. job interviews, so they were good training for performing under stress.

Strategy and Mindset

Before getting into any specific resources or details, I want to offer some advice on mindset and strategy, which also applies in other situations. 1) focus on what you control, and 2) a system is better than a goal.

Focus on What You Control

It is important to let go (emotionally) of what you cannot control and focus your energies on what you can.

This is called the Dichotomy of Control in Stoic philosophy and is at the beginning of The Enchiridion by Epictetus. I talked about this in my article “Influencing as a Technical Leader” as well. A useful metaphor for this is described in The Stoic Guide to a Happy Life by Massimo Pigliucci and attributed to Cicero. The archer can train, prepare, aim and release to their best ability, but once they release the arrow, whether or not it hits the target or bullseye is out of their hands. They prepared and influenced the outcome, but they do not control it. They control their training, breathing, and aiming, but not whether the wind changes after they release the arrow.

Systems over Goals

Having a goal is not the same as having a plan, much less a strategy for how to achieve it. Several of my favorite authors have helped me absorb this, and my personal experience with trying to set or change habits and establish systems have helped me accomplish a lot of things I would not have otherwise. James Clear, the author of Atomic Habits, describes the reasons for systems over goals in this online article. Scott Adams also discusses this in his book How to Fail at Almost Everything and Still Win Big: Kind of the Story of My Life.


A related effect is identifying with what you want to accomplish, rather than just having a goal or even a system. For example, in a 2009 study smokers who said things like “I am not a smoker” were more likely to successfully quit than people who (more typically) say “I am trying to quit”. In other words if they incorporated something into their self-identity, they were more likely to stick to it.

How does all this relate to job searches and interview preparation?

Building Your System

I would recommend creating a plan of what preparation to do and when for each area you want to study or improve, and checklists of what to research and prepare for each application and each interview event. Smart people often fail at simple things, and if you do not believe that I recommend reading the Checklist Manifesto by Atul Gawande.

Daily habits are the easiest habits to keep. Read about Habit Loops by Charles Duhiggor or Atomic Habits mentioned earlier to get more pragmatic details on setting or changing habits. The tl;dr is to understand the cue, routine, and reward of habits so you can make or break them more effectively. Set aside some time each day to work on what you need to do, and set targets for how much to do each day for tasks that are in your control. For example, find ten new jobs, send three new applications, spend sixty minutes studying the topics on your list, and thirty minutes practicing interview questions. And make sure to do whatever task you find the most unpleasant early in the day which will give you a sense of relief and accomplishment once it’s out of the way which helps you stay motivated.

I recommend that you track your system visually. Many of us have a completionist side. Seeing things on a desk or wall calendar with checks or stars on each day for your activities helps you stick to a new habit and feel a sense of progress.

If your timeline allows it, build some checkpoint intervals into your system for when you will adjust based on progress and new information, and in between those intervals try to be patient and stick to your system. If you change it everyday it will make it challenging to tell what is working.

Prioritize what you think is more important to focus on based on where you are at now and view it as a continuous improvement project. You are the product, and you want to be able to ship early and often. Setting priorities and tracking your progress as you go along will also help you avoid falling victim to the planning fallacy, the tendency to underestimate how long it will take to complete tasks.

My last tip is to not focus too much on job search and interview preparation specifically. Make sure you actually are investing a significant portion of your time into development or at least review of skills that will be useful in your career. This will help with the self-identity aspects (i.e. I am a strong, professional engineer…, I am a leader,…I am good at coding in Java,.., etc.) This helps you be more confident in interviews and is more likely to benefit your career growth in the long run.

Persevere towards your goal. Angela Duckworth, the author of Grit, defines grit as “passion and perseverance for long-term goals” and says that grit “predicts achievement in really challenging and personally meaningful contexts.” By building a system with daily activities you can track, you will be more likely to make it a habit that you can sustain, and have a sense of progress under your control that will help your morale if the desired outcome takes longer.

Celebrate your progress every day, and try to make your preparation fun or at least interesting.


Some areas that are important to cover when trying to find a new role are:

  1. Clarifying what you want and what is a non-starter.
  2. Networking proactively; start yesterday, seriously.
  3. Having an up-to-date, effective resume.
  4. Preparing for interviewing (practice, study, and research)
  5. Avoid anti-patterns on interview day
  6. Prospecting consistently for referrals, positions, contacts, and other opportunities.

Now let us go deeper into each of these areas.

Clarify What You Want

Get clear on what type of role you want and what you need. Without downplaying any harsh financial realities folks may have, it is good to know what kind of role you want to focus your search on.

Determine what you are willing to negotiate on or not, including:

  1. Cultural concerns that you view as non-starters, (i.e. work-life balance)
    • This page has a list of questions about company culture that might help you think of something important to you.
  2. Are you willing to be on-call?
  3. Type of role? Individual contributor, engineering manager, technical program manager, etc?
  4. Minimum scope or level of responsibility?
  5. Chance of growth, including but not limited to promotion or switching to a role with more leadership or management?
  6. Specific technology stack, programming languages, frameworks, desired or to avoid?
  7. Specific industry (i.e. advertising, finance, game dev., etc.)?
  8. Specific benefits requirements: vacation, educational assistance, health coverage?
  9. Remote, onsite, or hybrid?
  10. Willing to relocate or not?
  11. How much are you willing to travel? Do you want opportunities to travel?
  12. Minimum salary and total compensation?
  13. Type of compensation? Sign-on or performance bonuses? Will there be relocation assistance if applicable? Is their equity or options compensation and if so what’s the vesting schedule?
  14. Stability (startups or small companies ok?)
  15. Company Size (willing to deal with big company processes and communication overhead? Willing to wear many hats and accept potentially more risk to work for a small company?)
  16. Type of organization?, As in for-profit, non-profit, government, government contractors, etc.


Do not wait until you need a job. You can make it more interesting by creating something to help others that you enjoy and use it to increase your visibility, especially if it’s a project you did to strengthen some job-related skill.

  1. Share that you are looking for work.
    • People will usually only share the opportunities they know you are looking for, so do not limit your options by keeping your status or goals to yourself.
  2. Reach out and touch base with contacts, especially those in companies that may be hiring and in the same field who may know someone hiring.
  3. Ask for referrals. A referral, even from someone with a limited familiarity with the candidate increases the odds of receiving at least an initial phone screen interview at most companies significantly.
  4. If you are reading this on LinkedIn, you are probably already putting some effort into networking, but also think about what you can share to help others and attract some attention.
  5. Searching for a job is largely marketing yourself, especially the networking aspect. Some engineers are hesitant to think in terms of marketing and branding. Just think in terms of how to increase your visibility and highlight your abilities for those they would benefit. For some basics of personal branding check out this article at CareerFoundry.
  6. Network in real-life as well. Go to some tech meetups or other groups and meet some new people in the business. Listen to them first, genuinely, but share that you are in the job market before leaving the conversation.

Your Resume

Your resume is a tool to get in front of hiring managers and recruiters and land interviews (along with your LinkedIn profile)

  1. Reflect. Think through your accomplishments, especially recent ones to decide what to add to your resume. Expect to be asked about anything on your resume during interviews.
  2. Show your accomplishments, instead of just describing tasks or work.
  3. Describe Impact.
    • Try to quantify the impact of the work you have done whenever possible, in terms of the number of customers, team members, revenue/sales, transactions per second, queries served, terabytes of data, monthly active users, SLO/SLA improvements, or any other quantitative metric you can share.
    • Do not forget the “so what” part of your accomplishments in a qualitative sense either. Let the reader know why what you did mattered.
  4. Be concise. Edit ruthlessly. Good writing requires revision, proofreading, seeking feedback, and leaving some parts on the cutting room floor.
  5. Remember Soft Skills. These matter too. Software development is a team sport, and if you are in leadership or management roles then these skills matter even more. Indeed has a good article with examples and survey data of soft-skills that are sought by hiring managers.
  6. Research specific roles for the skills, experience, and responsibilities listed and update your resume to reflect where you have those and may not have included or highlighted them.
  7. Check out other resumes for inspiration. LinkedIn is an easy place to do this.
  8. Check that you are not missing critical information that may keep it from being seen. Most large companies typically use an automated resume scanning tool, AKA an applicant tracking system (ATS). And hiring managers, recruiters, and sourcers have limited time and attention. You can use a resume scanning tool to check for problems. Indeed has a free one, but there are certainly others.
  9. Proofread your resume! And ask someone else to do so as well. Typos, misspellings, and grammatical errors will not raise anyone’s opinion of you, though how much weight people place on this varies.
  10. Customize. Tailor your resume to the specific role or type of role you are seeking. Say what type of role you want and why you are the right candidate.


Practice, research, study, and learn to increase your odds of success. You do not really control the interviewer or their decision, but you do control how you prepare yourself. You should practice interviewing, technical questions, behavioral questions, system design, and answering questions about your prior experience. Study areas where you may be weak or rusty. Research what specific companies and roles are looking for in a candidate and their interview process. Make sure you are actually learning or at least reviewing some new, useful things so the preparation process is enjoyable. This will help you stay motivated and get more long-term benefit out of the time you invest.

“Every battle is won before it is fought.”

- Sun Tzu, The Art of War. (5th century BC)

  1. Practice makes perfect.
    1. Even if you have strong skills already, preparation increases your feeling of confidence which will reduce your stress and improve your ability to concentrate when you are on the spot during an interview.
    2. Things to practice include: mock interviewing, behavioral questions, timed coding without an IDE or StackOverflow, hypothetical system design, and real-life discussion of design, implementation, operational, and leadership work you have done in the past.
    3. Start interviewing with your second choices if possible. I think interviewing with a company you would not want to work for is a waste of time on both sides, but I do think your odds of success are better if you do not start interviewing with your dream company first. Have some interviews under your belt before hitting the top-tier company onsite you want to nail if you can make the logistics work out, but just prepare as well as you can if it ends up in the other order. You may not be able to control all the scheduling constraints and timelines on the other side so do not pass on a golden opportunity just because you feel like you could prepare more.
    4. Study some real-life system designs. Do some reading on best practices for design in your specific domain and best practices in general.
    5. Practice timed coding problems. Refresh your memory on language syntax if you are rusty. Study computer science fundamentals if you have gaps or have not used them in a while.
    6. Know the basics of how the machine and network work. To paraphrase what Peter Norvig said in his article, Teach Yourself Programming in Ten Years, remember the “computer” in computer science. Take a look at this article on for some numbers you should have handy in your mind for making decisions about latency and scalability so you can do the back of the envelope calculations that many system design interviewers will want to see. You should also know how to do bit manipulations, the size of an integer on your favorite platform, how a floating point actually works, and understand the basics of TCP/IP networking. If you are senior or specialized in web/cloud services, then you should know important distributed computing concepts, the CAP theorem, like popular algorithms for distributed consensus(Paxos, Raft), how two-phase commit works, and what ACID means.
    7. Do not forget about operational, quality, and reliability considerations. I like to ask people things about how they test, instrument, monitor, deploy, measure, troubleshoot, operate, optimize, scale, and continuously improve software systems, not just how to do some paper thought exercise or remember an algorithm you memorized in school. You may be asked how you dealt with a difficult operational problem in the past or how you would set up monitoring during a system design exercise.
    8. Expect questions to be ambiguous on purpose. Take the time to clarify the use case and requirements before committing too much of the solution, and when doing any type of design, get the high level picture sorted out before you dive into the details. This will save you from wasting precious interview time solving the wrong problem.
    9. For system design, remember non-functional requirements for things like performance, latency, scalability, privacy, and security.
    10. Make some notes for prior work examples you can use when asked about what you have done in certain scenarios in the past. Look through interview preparation resources from the career sites of companies in your field. Get some example behavioral interview questions and think through how you would answer them.
    11. Practice interviews. Get a friend, service, mentor or someone to ask you interview questions as if in a real interview.
  2. Learn something new.
    1. It can be emotionally draining when you are in a job search. It is important to also have some fun. One way to do that while also helping your career is to learn something new and share information or example code online, especially GitHub and LinkedIn.
    2. You can also choose something you are concerned may be a weak area during interviews.
    3. Some companies, interviewers, and hiring managers will want to see evidence that you are interested in learning and self-development. Software development is far from a static field, so developers who do not keep learning start to look like dinosaurs after a while.
    4. Have a growth mindset! If you find yourself thinking in fixed terms about your capabilities, find something you think you cannot learn and prove to yourself you can.
  3. Gather references.
    1. You will be asked to provide references. Make sure they know someone may contact them and why. Choose people who will be viewed as objective and who have enough direct experience with you to provide meaningful information.
  4. Research Before an Interview
    1. Before interviewing with a specific company, research the company and role. Things to research include their interview process, press, public statements, careers page, mission, and culture. Look for anything about culture that comes from current or former engineering employees rather than a careers page or recruiter. Any engineering blogs are good things to check out, and sometimes presentations at conferences or published papers give you some idea of what it is like on the inside as well.
    2. Sources for company research include,, LinkedIn company pages. For startups Crunchbase is also useful.
    3. Use LinkedIn to determine who you already know at the company and ask what it’s really like. Check for second degree connections as well, not just first degree.

During the Interview

This also applies to mock interviews and other practice. You want to practice the right way so you will perform the same way in the real version.

  1. Describe your solution and assumptions before going too far into coding. This is the thing people most often fail at in the coding interviews I have done. A pretty solution to the wrong problem does not get you very far.
  2. Do not stop when you think you have the code complete. Try to mentally test the code and describe how you would write test cases in real-life. Make sure you covered or at least talked about error handling and edge cases, but it is better to have the happy path work for the primary use case than to have half a solution with tidy error handling so manage your time accordingly.
  3. Choose your field of battle. Use the language you have the most confidence in. Do not pick one you are less experienced with just because of what the role description says.
  4. How you collaborate with the interviewer is important, and most interviewers will gauge you on this as well. Make sure you take direction, and make sure you are answering the right question.
  5. Do not forget the problem solving skills part of answering questions. Clarify your assumptions about the problem, and try to understand what is most important if it’s ambiguous. Talk through your solution at a high level before jumping into coding or lower level design details in case you have made a bad assumption the interviewer can redirect you.

Anti-patterns to Avoid

There are some red-flags and anti-patterns to avoid during the interview to put your best foot forward.

  1. Not being authentic. You need to act professionally, but try to be your authentic self. Fake smells bad on anyone, and most people are poor actors. One specific way this happens is having a pre-arranged script of what you want to talk about and trying to constantly redirect the conversation to the same canned example of your prior experience. Good interviewers are trying to go deeper into the specific details of specific areas they are trying to cover. If you steer the conversation into your favorite topic repeatedly, you will keep them from getting the data points they need to evaluate you fairly, other than saying you communicated poorly by not listening.
  2. Being arrogant. You want to be confident but show some humility. This will help you in many situations regardless. Arrogant people can come into an organization and be like a bull in a china shop, especially in senior roles. Just do not suppress your confidence by trying too hard to be humble.
  3. Being too timid. It is natural to be nervous during an interview, but one of the reasons you should practice is so you can turn down the dial on the stress by showing yourself you can perform. Everyone has imposter syndrome sometimes, so try not to listen to those thoughts. People respond to confident leaders. Timid people sometimes fail to act in time, and the real world involves situations where a timely but poor decision is better than analysis paralysis. People trust those who appear to be calm, confident, and competent. Missing any of these dimensions will interfere with people’s ability to trust you. There is a good article on this by leadership coach, Toni Collins, “The Three C’s That Build Trust in Your Leadership Skills”. Competence is really the foundation, but if you can not convince others to follow your lead then you may not get an opportunity to use those competencies.
  4. Going on and on and on and… without letting the interviewer interrupt you. The interviewer is focused on time management to keep the interview on pace. If they are trying to interject something it is to help you because they need to cover something else, you are focusing on the wrong part of the problem, you have misunderstood something about the question, or they are trying to give you a hint.
  5. Not saying what you did specifically when discussing prior work. Teamwork is important, but how you made an impact yourself is critical to the interviewer understanding your abilities and approach. Many people use a lot of plural words like “we” when describing work to not hog credit or to show appreciation of others, but the interviewer is trying to figure out what you did yourself. If you were a leader, influenced, or took the initiative of work others helped deliver, take specific credit for your innovation and leadership and describe how you accomplished it, but make it clear who did what.
  6. Do not bad mouth your current or former employer or colleagues. Everyone can infer that there is a reason you are looking for a new role, but if you go through those reasons any bitter feelings you have may spill through, and even if they do not the interviewer will wonder if they want to be the one thrown under the bus next time you change roles.
  7. Try to smile and make eye contact. This does not come naturally for some of us, but it turns out it makes you feel better anyway. People smile back, and we have a lot of hardwired biology related to reading faces and body language.
  8. If you feel stumped, just say something like “Let me think a minute” rather than blurt out something half-baked. You do want to think somewhat out loud while problem solving during the interview to show your process, but not in a totally unfiltered way.
  9. Being too vague or staying too high level aka “hand-wavy” during design questions. They need to see that you have concrete knowledge and experience, not just an ability to regurgitate words from an article on system design. Talk about how you would decide between design alternatives, based on what data or inputs and how. Talk about specific software you have used or would use instead of just saying things like “a NoSQL database”.
  10. Providing too few details about prior work. Take the time to reflect and review your prior work so you can readily recall things, especially concrete decisions, alternatives, and outcomes, preferably with quantitative KPIs, metrics, and other numbers. Sometimes confidentiality agreements cause some constraints here. Be creative on how to stay out of trouble but show your scope. One way to do this is to find things which are already public but relevant for your company. Often marketing materials for companies and earning statements for large ones contain at least approximate customer or revenue numbers for products or businesses which are okay to reference.


Part of finding a new job is basically sales and marketing, which makes some engineers uncomfortable, but avoiding it will not make it less true.

I work in advertising where we talk about customer funnels. If you do not have prospects entering the upper funnel (awareness), i.e. knowing you exist, then it will not matter, statistically speaking, how well the other stages of the funnel go. There is a drop off in conversions at every stage you can optimize, but without inputs to the funnel there will be no outputs regardless.

The Marketing Funnel

  1. Awareness (outreach, being in search results)
  2. Consideration (resume review, informational calls, phone screens)
  3. Conversion (decision phase: onsite interview loop, hiring decision)
  4. Loyalty/Delight (happy customer, performing well at job)

The book Fanatical Prospecting makes the case that where most people fail at sales is procrastinating and avoiding making new connections. Prospecting is “the process of identifying and contacting potential customers in order to generate new business.” according to Sales prospecting 101: A beginner’s guide from ZenDesk. You need a system, and you need input metrics to keep yourself honest by measuring it. Your odds of success are correlated to how many people you reach. Prospecting is the part of the awareness stage you directly control. The other part is basically to increase your visibility online which you can influence only indirectly by activities like networking to make new contacts, talking to your existing contacts, and posting content.

  1. Prospecting steps include: researching leads, qualifying the leads, and outreach (contacting) the leads.
    1. For a job search, research means finding out about companies, roles, and specific contacts for networking.
    2. Qualifying in sales means they can buy your product and they have a use for it. For a job search it means they(company, recruiter, hiring manager) are hiring someone for a role you have the skills to perform. It means they can decide (or at least influence) who to hire. For a networking contact it means they are in the right industry to connect you with other qualified leads.
    3. Outreach is just what it sounds like. Study how to do warm and cold contact with people for networking, referrals, and getting interviews.
  2. Have a system, track it, and stick to it. Build it into a daily habit.
  3. Set input metrics: For example: you will reach out to N new people a day. You will apply to M new positions a week. You will follow up with each contact after X days.
  4. Marketing means getting eyeballs on your resume and your foot in the door for a chat, a phone screen, or an interview.
  5. Selling means presenting yourself in a way that your “customer” is clear on the benefits you provide. Doing this means learning about and listening to what the hiring manager, role, and company need from a candidate for them to succeed. It can help to think about things in terms of what your unique value proposition is as a solution to the problems the company is facing. This article at FindSpark by career coach Shar’nee Francis, has some useful advice for writing effective outreach messages for your job search.
  6. Do your best in whatever role you are in. This maps to the Loyalty/Delight stage of the funnel. After you land the job you want to make your new employer and colleagues happy with your performance. They do not have to be your best friends, but you need to make yourself valuable and perceived as such through professional behavior, teamwork, and impactful contributions. This is a major part of how you get the next job.


Remember these four key ideas for improving your odds.

  1. Create a system to keep yourself on track.
  2. Prepare yourself; focus on what you can control.
  3. Incorporate a habit of daily practice.
  4. Work consistently to prospect, network, and increase your visibility.

I hope that this article is helpful to anyone who finds themselves reading it. I have placed this content in a GitHub repository as well so that people can contribute or provide feedback there:

Whether you are reading this because your were laid off, trying to launch a new career, looking for a better opportunity, or just a change I sincerely wish you the best of luck.


Amazon Advertising. A complete guide to the marketing funnel. (2012). Retrieved January 18, 2023, from

Andres, C., Beck, K. (2004). Extreme Programming Explained: Embrace Change. United Kingdom: Addison-Wesley.

Blount, J. (2015). Fanatical Prospecting: The Ultimate Guide to Opening Sales Conversations and Filling the Pipeline by Leveraging Social Selling, Telephone, Email, Text, and Cold Calling. Germany: Wiley.

Clear, J. (2018). Atomic Habits: The Life-changing Million-copy #1 Bestseller. United Kingdom: Random House.

Collis, T. (2019, September 26). The three C’s that build trust in your leadership skills. Toni Collis. Retrieved January 18, 2023, from

Dweck, C. S. (2006). Mindset: The New Psychology of Success. United States: Random House Publishing Group.

Duckworth, A. (n.d.). About the book. Angela Duckworth. Retrieved January 18, 2023, from

Epictetus, Matheson, P. E., & Arrian. (1916). The Enchiridion. P.E. Matheson.

Fowler, M. (2019). Refactoring: Improving the Design of Existing Code. United Kingdom: Addison-Wesley.

Francis, S. (2017, March 1). How to write awesome outreach emails to find your next job. FindSpark. Retrieved January 18, 2023, from

Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 978-0-201-63361-0.

Gawande, A. (2011). The Checklist Manifesto: How to Get Things Right. United Kingdom: Profile Books.

Grieve, P. (2022, May 23). Sales prospecting 101: A beginner’s guide. Zendesk Blog. Retrieved January 18, 2023, from

Habit loop. ModelThinkers. (n.d.). Retrieved January 18, 2023, from

Kleppmann, M. (2017). Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems. United States: O’Reilly Media.

Martin, R. C., Coplien, J. O. (2009). Clean code: a handbook of agile software craftsmanship. Upper Saddle River, NJ [etc.]: Prentice Hall. ISBN: 9780132350884 0132350882

McDowell, G. L. (2015). Cracking the Coding Interview: 189 Programming Questions and Solutions. United Kingdom: CareerCup, LLC.

Norvig, P. (n.d.). Retrieved January 18, 2023, from

Pigliucci, M. (2020). A Field Guide to a Happy Life: 53 Brief Lessons for Living. United States: Basic Books.

Skiena, S. (2021). The Algorithm Design Manual. 3rd ed., SPRINGER.

Systems vs goals. ModelThinkers. (n.d.). Retrieved January 18, 2023, from

Tzu, S. (2005). The Art of War. United Kingdom: Shambhala.

Thomas, D., Hunt, A. (2019). The Pragmatic Programmer: Your Journey to Mastery, 20th Anniversary Edition. United Kingdom: Pearson Education.

van den Putte, B., Yzer, M., Willemsen, M. C., & de Bruijn, G. J. (2009). The effects of smoking self-identity and quitting self-identity on attempts to quit smoking. Health psychology: official journal of the Division of Health Psychology, American Psychological Association, 28(5), 535–544.

van Steen, M. and Tanenbaum, A.S. (2023). Distributed Systems, 4th ed.,

Xu, A. (2020). System Design Interview - An Insider’s Guide. (n.p.): Independently Published.

Software Engineering/DevOps/SRE Job Search Tips Resources

These resources are also available on GitHub at




What to Expect at Interviews

System Design

Data Structures and Algorithms

Example Coding Questions mostly on DS/Algos

Both of these articles have example coding questions by category.

Best Practices

Coding Practice

Mock Interviews

Reliability and Operations

Behavioral Interviewing

Interview Preparation

Leadership Related

Company Specific

Company Research