My Interview with Google

While not an original post by far, I’d like to share my experience interviewing with Google. Since Google is constantly changing their interview process, this was conducted in Spring 2019. This is a bit of a ramble so I’ll highlight key points as I go.

The Summoning

Ever since I interviewed for Google back in my college days for an internship, I get calls from them once or twice a year asking if I’m interested in applying. Sometimes I tell them yes, sometimes no, and sometimes “never call me again”. They still call. Unfortunately, this means I can’t help you get a call from their recruiters because I’ve been stuck on their radar for years, whether I want to be or not.

Key Point: If you don’t think you can get a job at Google yet, apply anyway and they will stay in touch with you as your experience starts to match what they need. It’s not creepy: it’s Google.

Anyway, one day I was checking my Gmail inbox and was inspired to go through my spam to see if the filters were too aggressive. Ironically, there was a recruiter email from Google asking to schedule a call. In their defense, it was being forwarded from my college email address (as per history above) so I guess they weren’t flagging themselves so much as my university.

I almost always agree to do a call, mostly because I one day hope to hear they’ve embraced fully remote work. I don’t think this will ever happen. Still, who knows how long I’ll be stuck on their recruiting radar?

During the call I get the usual spiel about what teams are in my area and which offices I can apply for, immigration questions, and when I’d like to interview. Normally, I’ll ask about working from home or flexible hours but this time I had another motive to interview: I was coaching people in technical interviews and figured putting myself in their place would be a good way to help them. See how altruistic I am by making the great sacrifice of interviewing for one of the top tech companies? My motives aside, I figured I’d get them to send me their list of study materials, I’d go over them with my mentees, do a phone screen, and share my notes.

Surprise! You get to skip the phone screen because your friends at Google recommended you. Ugh. I didn’t really want to do the full 6 hours of walking over algorithmic coals but fine Retrospectively, I think I need to find better hobbies than interviewing at tech companies.

Key Point: If you have former classmates or colleagues at Google, their recommendation will not only get you an interview but can also decide whether you get the job. 

“The Usual Spiel”

As mentioned above, recruiters tend to follow a script and Google is no exception. Below are the points covered:

  • Locations of new and existing offices in your area as well as questions about where you would like to work. Key Point: An interview anywhere for Google is good for any location at Google, including any country or continent.
  • A list of teams hiring in your area along with their current projects.
  • New company initiatives around benefits, diversity, etc.
  • What the interview process looks like:
    • (Usually) a phone screen
    • An on-site interview for 6 hours with 5 hours of technical interviews and 1 hour of lunch with a Googler
    • Judgement – tentative offer or rejection
    • Requests for references, preferably internal to Google but also external
    • Selection of a start date
    • Team rotations/team shopping: you spend 1 – 2 weeks on a team to decide whether you want to work with them or not
    • Team selection and assimilation into the Borg
  • Promises to send follow up emails and interview materials

Key Point: I was told after Spring 2019 there would be 4 technical interviews and 1 ‘soft skills’ interview. 

When and What

First Email: Study Materials

The first email sent after the call was to thank me for my interest and provide an impossible amount of material to review. Oh, but don’t worry, this is probably stuff that you already deal with day to day. Right. When was the last time I not only used but implemented a priority queue backed by a min/max heap? Never. This is the same deal with Facebook, Microsoft, and Amazon interviews so I didn’t worry about it too much. It’s just a matter of prioritizing topics against time.

For System Design, this is a great example of prioritization based on time: https://github.com/donnemartin/system-design-primer

How To Prioritize?

If I don’t have much time, I’ll jump right into practice problems and do 50/50 problems and reviewing concepts. If I have some time, I’ll review all data structures and algorithms first then do as many practice problems as possible. With extra time, I will review all operating systems and system design concepts. I almost always skip discrete math and the whole NP-complete business. This time around I had extra time so when I wasn’t doing problems I was reading through system design books.

Key Point: If you feel you cannot achieve “excellence” or “proficiency” in at least the data structures and algorithms concepts, I recommend requesting a follow up in 3 – 6 months to allow for more study time. There’s no harm in failing but if you definitely want the job this time around then set yourself up to be as successful as possible.

The Materials: Copy Pasted From The Email

PREPARING FOR YOUR ON-SITE INTERVIEW

This is a non-exhaustive list of topics that may or may not be covered during your interviews. Its intent is to guide your study and preparation.

INTERVIEW PREP BLOGS & VIDEOS

INTERVIEW APPROACH

  • The interviews focus on coding, data structures, algorithms, computer science theory, and systems design (systems design questions normally reserved for applicants with 5+ years of industry experience)

  • Likely additional topics include: hash tables, heaps, binary trees, linked lists, depth-first search, recursion (think CS 101 – concepts that everyone knows but doesn’t always quickly come-to-mind).More information on Algorithms

  • Many questions are open-ended and are deliberately underspecified to see how you engage the problem. Verbalize your thought process as you work to understand, approach, and solve the problem. Interviewers want to see which areas you find most important to the problem’s solution. Think about ways to improve the solution you’ll present. In many cases, the first answer that springs to mind will need refining. Verbalize your initial thoughts to the question. Ask clarifying questions if you don’t understand the problem or need more information. As a rule: efficient solution > brute force solution

  • For in-depth study – 3 highly recommended reads from Sr. Engineers: (1) “Programming Interviews Exposed: Secrets to Landing Your Next Job” (2) “Programming Pearls” and (3) “Cormen/Leiserson/Rivest/Stein: Introduction to Algorithms”

SAMPLE TOPICS

  • Coding: construct / traverse data structures, implement system routines, distill large data sets to single values, transform one data set to another

  • Algorithm Design / Analysis: big-O analysis, sorting and hashing, handling obscenely large amounts of data. Also see topics listed under ‘Coding’

  • System Design: features sets, interfaces, class hierarchies, designing a system under certain constraints, simplicity and robustness, trade-offs

  • Open-Ended Discussion: biggest challenges faced, best/worst designs seen, performance analysis and optimization, testing, ideas for improving existing product

HOW TO SUCCEED

  • We believe in collaboration and sharing ideas. Most importantly, you’ll need more information from the interviewer to analyze & answer the question to its full extent

  • If you don’t understand something or are stuck, please question your interviewer and ask for clarification and/or a hint

  • When asked to provide a solution, first define and frame the problem as you see it

  • If you need to assume something, verbally check it’s a correct assumption

  • Describe how you want to tackle solving each part of the question

  • Always let your interviewer know what you are thinking as they are just as interested in your thought process as the final solution

  • Finally, listen – don’t miss a hint if your interviewer is trying to assist you

TECHNICAL DOMAINS (understanding these concepts is necessary to succeed in a Google Interview)

  • Algorithm Complexity: Understand big-O complexity analysis and Big-O notations (aka – “the run time characteristic of an algorithm.”) Working through practice problems is key

  • Sorting: Know how to sort. Don’t do bubble-sort. Know the details of at least one n*log(n) sorting algorithm, preferably two (say, quicksort and merge sort). Merge sort can be highly useful in situations where quicksort is impractical

  • Hashtables: The single most important data structure. Be able to implement one using only arrays in your favorite language with time limitations

  • Trees: Know about trees; basic tree construction, traversal and manipulation algorithms. Familiarize yourself with binary trees, n-ary trees, and trie-trees. Know at least one type of balanced binary tree, whether it’s a red/black tree, a splay tree or an AVL tree, and know how it’s implemented. Understand tree traversal algorithms: BFS and DFS, and know the difference between inorder, postorder and preorder

  • Graphs: There are 3 basic ways to represent a graph in memory (objects and pointers, matrix, and adjacency list); know each representation and its pros & cons. Know the basic graph traversal algorithms: breadth-first search & depth-first search. Know their computational complexity, their tradeoffs, and how to implement them in real code. Time permitting, study fancier algorithms such as Dijkstra and A*.

  • Other Data Structures: Know as many other data structures and algorithms as possible. Start with the famous classes of NP-complete problems, such as traveling salesman and the knapsack problem. Must recognize them when an interviewer asks you them in disguise. Find out what NP-complete means

  • Mathematics: Some interviewers ask basic discrete math questions. At Google we are surrounded by counting problems, probability problems, and other Discrete Math 101 situations. Know the essentials of combinatorics and probability. Be familiar with n-choose-k problems and their ilk – the more the better

  • Operating Systems: Concepts to know: (1) processes, threads and concurrency issues. (2) locks, mutexes, semaphores, and monitors (3) deadlock & livelock and how to avoid them (4) resources processes needs, and thread needs, and how context switching works, and how it’s initiated by the OS and underlying hardware (5) scheduling (6) multi-core: the fundamentals of “modern” concurrency constructs

Second Email: Time and Place

For scheduling, you are going to have to take a day off work (if you are currently working). You are asked to provide 3+ days in the next 4 weeks when you can interview. You will get an email confirming the time as one of those days you selected. I usually see 9 am or 10 am start times with 3 pm or 4 pm end times. The email includes instructions on parking, time to arrive, where to arrive, who to ask for, etc. This will vary based on which office you’ve selected for your interview location but read the whole email. The location I went to had a very strange parking situation so I needed to show up 30 min early. Finally, upon confirmation of the date, you need to file a formal application with Google using one of their tools.

Key Point: Read the whole interview confirmation email.

Interview Day

Key Point: Bring what makes you comfortable. As below, I like having physical pen and paper to take notes during the interviews.

As they say in the email, wear what you are comfortable with. Bring whatever you think you might need. I recommend bringing a notebook and a pen. I like to write down the names of my interviewers, which team they worked on, how long they’ve worked at Google, and notes on the questions they asked. I also bring chocolate and Tylenol because interviews are stressful.

Why write down that information? One or more of your interviewers might be a future teammate. Also, if you are not extended an offer, you can keep the questions to understand where your gaps are. Finally, if all your interviewers have been at the company 2 years or less, maybe that’s something you want to ask your recruiter about – what happens to employees after 2 years?

Things you might not expect:

  • Interview rooms can be really hot, like “I hope they don’t notice how much I’m sweating” hot or cold enough to feel like you’re directly in the path of the industrial air conditioner
  • You’re not going to be in the same room all day so make sure you don’t bring so much stuff that you’ll be uncomfortable carrying it around from room to room
  • You’ll be waiting for up to 30 mins from the scheduled “start time” of your interview – bring something to read or do
  • You will be given the opportunity to code on a computer or whiteboard. You can choose what you’re most comfortable with at each interview.

Impressions and Amenities

DISCLAIMER: I have pre-existing negative feelings about large tech companies. Have your salt at the ready.

The good things about Google corporate offices are fairly well known: free food, gyms, nap nooks, laundry, commuting cars/buses, etc. I found all my interviewers easy to talk to. In past Google interview, there were a few “hard to deal with” interviewers and I was happy not repeating that experience. The amenities were clearly well kept and organized.

The negatives are similar to other large tech companies (Amazon, Facebook, and sometimes Microsoft). All these things are what I heard from my interviewers:

  • There are too many people in the offices so you need to come in earlier and earlier to find parking
  • You have to avoid the cafeterias during lunch time because of how crowded they are
  • Organizations are constantly being moved under new leaders and moved to new buildings, sometimes in other cities
  • The offices are being shifted around to support the high populations so often that you always get lost

A few additional things stood out. First, there was a nap nook. Nap nooks are meant as small rooms or enclosures where you could take a nap during work. I’m used to seeing them as very small rooms about the size of a walk-in closet with a light, maybe a recliner or a cot, and enough room for prayer mats. This is similar to what I encountered:

via-we-heart-it_rect540 alcove bed
Credit to http://concordgreen.blogspot.com/2010/12/in-praise-of-bed-alcoves.html

Kudos for making the decor look, ah, “homey” but this makes me just a little bit uncomfortable. Can you imagine sitting next to your manager on that couch for a quick chat? Ew.

The second thing that stood out was how one interviewer described the difference between this location and Mountain View.

People here are a lot more interested in work-life balance and family rather than getting work done quickly.

I see. I guess it’s good that I’m not applying to work in Mountain View. Or maybe I want to burn out like a supernova: a high energy, crazy-bright star, with a short life on its way to complete destruction. But a rich supernova.

Coding Questions

As a friendly reminder, our interview questions are confidential, so please keep things under wraps.

~Google

I won’t tell you the questions but I will share the areas you would need to study to answer them.

Question 1: Card Game

  • Object-oriented design
  • Multi-dimensional arrays
  • Randomness
  • Multi-threaded access to shared objects (I used the word “semaphore” at some point)

Question 2: Merge K Lists

  • Greedy algorithms
  • The merge k lists problem – this wasn’t the question but I really kicked myself for skipping it during my practice after this interview

Question 3: Empire Building Board Game

  • Binary trees
  • Graph search
  • Linked Lists vs. Arrays

Question 4: I Heard You Like Trees

Question 5: Design a Cache

  • This was actually the question

The Result

As of writing this post, I do not have the result of the interview and I suspect I won’t for another few weeks. Google is infamous for long deliberation on candidates. I’ll update this post with the result when it makes it to me.

Very delayed update almost 6 months later…

As expected, I didn’t get the job. Why? When given a technical interview question, it is expected that you have the correct answer right away. Out of a pool of hundreds of questions, this is really a matter of luck. However, I was told I had excellent communication skills. Too bad Google doesn’t like good communicators.

While this may seem like a bad outcome, I came out with stronger interview skills, further conviction that I don’t want to work at Google, and a boost in my confidence as a communicator. It also helps that a Googler I met after the interview described the team in interviewed for as “a massive dumpster fire” and handed in his resignation shortly after.

System Design Interviews

As I network through tech I frequently hear newcomers ask how to answer system design questions. I’ll try to clear that up in this post.

Why am I being asked to design a parking lot?

If you’re comfortable writing code and work on multi-component projects, then you might be familiar with maximizing reuse without high coupling. In an interview, they will test this with an object oriented design questions. In a service-oriented world, we are now being asked to do this with systems.

These concepts are inconsistently taught across all programs. Unlike a for loop, interviewers can’t always expect a candidate to be familiar with systems and services. Unfortunately, the interviewers are given a checklist and if it contains system design, they ask it. More bad news: the recruiters aren’t told what’s on the list. As a result, you and your interviewer have different ideas about what’s going to be asked.

How To Learn This

Question and Answer Format

Question

Questions will be phrased as: “design a system to XYZ”, “design a pre-existing software system”, “draw the architecture for XYZ”. Examples:

  • Existing software: Uber, Lyft, Facebook Messenger, Amazon retail website, Google Search, DNS, Expedia, Docker, GitHub, WordPress, any website you can think of.
  • Interview problems: Parking garage, generic search engine, inventory management system, hotel guest management system, log aggregation

Anything can come up here depending on how prepared or creative the interviewer is.

Boxes and Lines

The answer is going to be boxes and lines.

Boxes_and_Lines

Approaching the Question

Clarifying Questions and Requirements

If you’ve done any preparation or any interviews, you will know you need to ask clarifying questions and get the requirements. Treat your unimplemented solution as a black box and try to describe the inputs and the outputs. Take Twitter for example:

  • Are tweets text only?
  • How will customers get data out of the system? Browser, phone, REST API?
  • Can a customer send one tweet at a time or many?
  • Do users have accounts or is this anonymous?
  • Is user following enabled?
  • Are there multiple feeds or one giant aggregated feed of tweets?

You might be thinking “Do you even know how Twitter works?” If you are, good. You need to make sure you and the interviewer are on the same page. You can’t come up with a design that has every current Twitter feature so make sure to scope it down to a few specific features. Saying “I’m going to implement user accounts, tweeting text only, and retrieving messages without the follower system as my first round” is extremely helpful. The interviewer will know that you are aware that there are more features and are choosing to defer than rather than forgetting them. This also makes the problem easier. If you don’t specify which aspects you are implementing, you and your interviewer will have different ideas about a good answer.

Note: These interviews are 45 to 60 min. It’s better to start small and then discuss enlarging the scope with the interviewer than the other way around.

Always identify the data.

The data tells you a lot about the design. What data is being sent? What data is being stored? Does the data need to be sorted? How quickly does the data need to be available? This provides another way to get requirements. Example:

  • How will data be searched? Maybe we start with hashtag search only.
  • Can anyone see all tweets or are some tweets restricted viewing? We can start with all public.
  • When we search for tweets, do we return all of them that match or only the top 100 most recent? Let’s do all of them at first for simplicity.

The Boxes

What are the boxes? Don’t be thrifty on the boxes. Boxes are more easily grouped than separated. You can do a “discovery” style and follow a single piece of data through the system.

For example, a customer hits the “Tweet” button from their browser. This goes to some server, the TweetManager. The tweet needs to be stored and show up in the user’s page and the global feed (as per requirements of no custom feeds). The tweet also needs to be searched later by hashtags (as per requirement of hashtag search only). This tells us we need a place to store the whole tweet, TweetStore. We might also need to store user information that can reference their tweets, UserStore and maybe UserManager. Somewhere else, we need to support hashtag searches, SearchTagManager and/or HashTagStore. Finally, we can throw in notifications for fun and have  NotificationManager. Here’s what that looks like:

Twitlines

  1. The user tweets and the tweet is sent to the TweetManager (here we assume that the user is logged in and is who their cookies or headers say they are).
  2. The TweetManager stores the Tweet in the TweetStore. At this point it is linked to the user that posted it.
  3. The TweetManager sends the hashtags in the tweet along with a reference to the tweet in the TweetStore.
  4. The HashtagManager adds the tweet reference to the list of all tweets related to that hashtag in the hashtag store (this creates a link to the tweet store).
  5. The TweetManager sends a completed message to the notifier which then shows everyone logged in that a new tweet has been posted.

We also have Login and ‘A’ which is searching by hashtag.

Note: This is a simplified example. I would strongly discourage using this answer in an interview because it doesn’t scale, has high latency, and will likely result in data inconsistency.

Hey, Where Are My Tables?

You may be tempted to say one of your boxes will be a SQL database and start describing your schema in detail. Don’t. Don’t do this unless the interviewer asks you to go into details. If you focus on details, you won’t have time to answer the whole question. However, having them at the ready doesn’t hurt in follow up questions.

Grouping

It turns out I have 3 storage boxes and 3 service boxes. Do they all need to be separate or can some be together? There are many driving factors for doing this:

  • Minimize coupling: you should minimize lines between two boxes for a single “trip” through the system
  • Follow the K.I.S.S. rule: you should not have to fan out to turn one tweet into 5 calls to other boxes
  • Asynchronous vs. Synchronous: know which lines need to be blocking and which can be done asynchronously. In some systems, the different types of calls go to different boxes (not always).

A simple grouping might be all the logic in one box and all the data in another:

Group

Scalability

Scalability is challenging. In these questions, you can either predict how to scale the system or you can do this exercise repeatedly:

  1. A significant political event is happening. A few key individuals are sending out tweets through the event. Everyone on the planet is trying to search for tweets with the event hashtag at the same time.
  2. Identify what will break first and how it will break. If it breaks, does it break only the overloaded part of the system or other parts too? In this case, the hashtag manager can actually be scaled to tolerate the number of requests. However, the data store (no matter what store you use) will be in trouble.
  3. Discuss or draw a way to solve this. The most common answers to this are asynchronous communication with queuesreplicas, and some form of sharding.

Often you need to do one or two examples to show you understand what scaling is and how to alter a system to support more traffic.

New Features

You’re feeling great because you drew boxes and lines. You came up with your own scaling answers before the interviewer asked. Then the interviewer throws a giant wrench into your answer: I want you to implement followers, identity verification, and malicious account detection.

If you only have 5 minutes left, feel free to verbally explain while waving your hands at your diagram. Throw a quick machine learning trained fraud box and a service that requests identity verification through a third party vendor. Usually when these features are requested near the end of the interview it isn’t about implementing them but about discussing how you can grow your solution. If you can’t discuss the solution, it might look like you copied it from a book.

Follow Up Questions

  • Why is this data here and who can access it?
  • How long does it take to complete one customer request?
  • Why are these two components separate or together?
  • Can you make this more generic or into a platform? How would you covert this into a Software as a Service product?

I Did All The Right Things And All I Got Was This T-Shirt

I’ve had too many interviews where the interviewer was stubborn, critical, condescending, dismissive, and basically an asshole. It’s almost impossible to succeed in these cases unless you fit their mold perfectly and even then it’s not a guarantee. Here are some signs that it might not be your answer that’s at fault:

  • Your interviewer is flipping between high level criteria and specific technologies (i.e. we need a customer service but please use AWS lambda)
  • Your interviewer is telling you where to draw your lines without explaining why
  • Your interviewer is repeatedly cutting you off when you try to ask clarifying questions and replies with “just implement it the way it is”
  • Your interviewer says “uhhh” a lot and doesn’t seem to know where he or she is going with the question
  • Your interviewer changes the question halfway through: did I say architecture? I meant library
  • You were incorrectly leveled by your recruiter (surprise!) and you feel deeply in over your head.

Leveling?

All companies put their applicants into buckets that are highly variable but sort of follow this structure:

  • 0 to 2 years of experience: entry level
  • 2 to 5 years of experience: mid level
  • 5+ years of experience: senior level
  • 12+ years of experience: principle or CTO level

Highly variable by company, geographic area, job role, and how the recruiter feels that day.

I think it’s unreasonable to ask an entry level applicant a design question because they may or may not have encountered them. If an applicant is on a border of experience levels, they may ask this question to see which bucket they fit in. Finally, as above, recruiters and interviewers don’t talk.

In Conclusion

Just don’t draw a single box with a SQL database schema as your answer. Good luck!

 

Defensive Interviewing

If you’ve interviewed anywhere in tech, you’ll hear the advice or instructions to have questions ready for your interviewers. Which questions do you ask though?

Hopes and Fears

Everything boils down to what you want to happen and what you don’t want to happen.

Hopes

  • Belonging
  • Achievement
  • Trust
  • Growth
  • Variety
  • Money – this one is salary negotiation so I’ll skip it

Fears

  • Exploitation
  • Rejection and isolation
  • Boredom
  • Stress

Now that we’ve got the heavy stuff out of the way, how does that translate into interview questions?

Belonging / Rejection and Isolation

A sense of belonging contributes to happiness. A sense of happiness contributes to productivity. Thus, you will be more successful if you feel like you belong. Even when your job is really bad, if you feel like “you’re all in it together”, it’s easier to pull through.

Questions:

  • What is the diversity of your team?
  • Are there people like me on the team?
  • Who will be my mentor when I join?
  • What are some social activities we will do as a team?
  • What communities for technical and non-technical topics exist at the company?
  • Do you feel like you could be friends with some of the people you work with if they weren’t your coworkers?
  • How often will I have 1 on 1s with my manager?

Scenario one: a diverse group of people who welcome new members with an automatic support network of a mentor and bond through shared interests. Scenario two: a monochromatic team of humorless people you can’t identify with that leave you to struggle alone and generally don’t talk to each other. Take your pick.

Achievement, Growth, and Variety / Boredom

Boredom is bad. Boredom is similar to stress. You disassociate and (eventually) become depressed or destructive. Work that slightly exceeds your skill set is ideal for maximum engagement and learning (according to Emotional Intelligence by Daniel Goleman). You can keep things interesting through promotions, new skills, or role changes. Additionally, if you want to climb the ladder, make sure there are at least a few rungs.

Questions:

  • What does promotion look like here?
  • How long does someone like me stay in this role before being considered for promotion?
  • Do you support 20% time or time to grow professionally via hackathons, conferences, or tech talks?
  • Does this company encourage moving between teams if there are other opportunities available?
  • Does this company support role changes and what does a successful role change look like?

Trust / Exploitation

People typically know when something they are going to say will put people off. The managers and recruiters of the world know this and choose to omit or mislead when it comes to that information. Instead of trying to catch them in a lie, probe to fill out the truthiness of their answers. This was taught to me as “peeling the onion”. In this metaphor, the more you peel the onion, you might get more onion or, I don’t know, a radish.

Questions:

  • What tasks are you working on right now? Ask for specifics.
  • What would you say is the key success criteria for your job? Why?
  • What is an example of the first project (not task) I will be working on? How is this important to our customer?
  • How involved will I be in designing new features and choosing team priorities? How often will I get a chance to influence project direction?
  • How many people with my role are on the team? (the more there are, the more reliable their answers)
  • If I am interested in working on something in particular, how would I go about getting assigned to the project? Give me an example of when you did this.
  • When something goes wrong, what is the recovery? Maybe a bug is pushed or a customer says the feature was done wrongly or a service goes down. Is there a retrospective? Does it get fixed right away?
  • Who is responsible for operations, customer contact, and project planning?

This is probably the hardest one to detect. Often, teams want to hire someone to do the housekeeping, like bug fixes, legacy maintenance, mindless migration, and minor management activities. You need to ask questions to confirm there is enough “meaty” work for you and housekeeping is spread evenly or kept to a minimum.

General Red Flags

  • Your manager has been in the company or sub-org for less than 6 months. This usually means they haven’t been through a performance cycle and there is a risk that they aren’t sure what it looks like for you to do a good job. If you don’t know how to do a good job, you might not be rewarded for the work you do. However, after about a year to a year and a half, most managers figure it out.
  • You are being hired for a “generic” position. This is basically job roulette. It’s worked out well for me in the past but it’s also opportunity for you to be placed where no one else wants to be.
  • There are a lot of buzzwords. If something sounds good but doesn’t tell you anything specific, they might be trying to hide something. “We do machine learning” is the equivalent of saying “we develop software”. It generates excitement but doesn’t tell you that you’ll actually be a code monkey for the scientists who do the “real” machine learning.
  • “We have no operations.” This is very job dependent. I’m talking about services, cloud, and larger software applications. If you have no ops, you have no usage or no customers. On the other side, you might have a lot of ops but someone else deals with it. This is an organizational anti-pattern and guarantees someone will strongly dislike you on that ops team. Not fun.
  • “We are a rapidly growing team.” This can genuinely be exciting if you are joining a team of smart and capable people coming together to create a new great thing. Or this could mean the managers are throwing bodies at a problem in such a way that creates stress, confusion, and general unhappiness.

It’s Too Late

If you’ve found yourself in a job where it didn’t live up to your expectation, first, figure out which questions to ask next time you interview. Second, tell someone it wasn’t what you expected and firmly ask to be placed somewhere that meets those expectations. Third, as soon as you can, decide whether you want to stay or go. Be intentional about what job you are choosing to do. By taking responsibility, you give yourself control over your situation and who doesn’t like control?

Good luck interviewing!

Dot Your I’s, Cross Your T’s, And Get Paid

An independent professional in my network recommended I watch a talk by Mike Monteiro called “F*ck You, Pay Me” when I asked for advice on contracts and client relations. Whether you’re freelancing, consulting, part-time, or full-time, the advice given applies to any contract you sign related to your professional skills. Below is a summary of the video and I’ll also cover how this can apply to a full-time position.

Read More »

Tales From The Git Keeper: The Wild Goose Offer

I interviewed for a job and got an offer. I only learned the terms of the offer a week into the job. Maybe “job” is a strong word since I also wasn’t getting paid.

sign pen business document
Photo by Pixabay on Pexels.com

The Beginning

A recruiter and I start talking and decide I’ll interview for a position. The phone screen goes well. The in person interview goes well. The recruiter tells me they are putting together an offer and I dedicate the rest of my mental energy trying to decide whether I want the job or not.

The recruiter is part of one of those third party recruiting companies. Normally this would be a “bad recruiter” but this time we became sort of friends. The fact that neither of us worked for the company trying to hire me was actually a bond rather than a divide after this mess.

The day I interviewed was the 26th of a random month in the year, say December. On the 3rd of the following month, January, I was leaving the country for a 2 week long trip.

Make Me An Offer

On the 28th, two days after my interview, I was called up by the third-party recruiter to tell me they loved me and wanted to extend an offer (her words, not mine). They appeared willing to meet all of my unorthodox demands, like part time hours and flexible vacation. All I needed was the HR department to extend the official offer.

Both parties were aware of my upcoming vacation and assured me the offer would come in on the 1st of January, 3 days before my departure. Just one thing: I needed to apply to the position officially through their Workday site. Workday, like every other HR related software solution, is no fun to use. Whatever, I can jump through hoops, I thought. Even hoops where I’m given a random string of numbers as my user name. Thanks Workday.

According to the company HR contact, my application via Workday would cause a cascade of recruitment dominoes, triggering NDAs, pay set up, offer details, and various other employment necessities. With my application done, I narrowed down my list of things to negotiate depending on the offer details and waited.

Your Offer Got Lost In The Intranet

As the days passed and my suitcase was getting packed for my trip, I suspected I should have my offer but didn’t. I emailed the third-party recruiter for an update. You might wonder why I was still talking to the recruiter. Why wasn’t I talking directly to the HR contact? The answer is simple: I was never put in touch with the HR department. My only conduit to the Borg was via this recruiter. Luckily, we enjoyed working together and continued to bond over how dysfunctional the company was.

Back on track: the recruiter responded in less than 5 min with minimal punctuation that this was not okay and I should have had my offer days ago. At least I knew they didn’t secretly change their mind and ghost me. This triggered an investigation on the HR side to figure out where my offer was and why I didn’t have it.

A Canary Can’t Fail If There Are No Canaries

Background: a “canary” is a software term to describe a simple test or check to show something is working, at least basically. It comes from the phrase “canary in a coal mine.”

As I was on my cross-continental flights to a tropical paradise, the recruiting and offer debacle was beginning to unravel. The first hitch: most of the HR department was out of the office on a retreat or conference out of town so they weren’t as available to respond to candidates requesting their offers or third party recruiters trying to figure out where the offers were. The second hitch: the IT department decided the best time to migrate to a brand new HR system (i.e. Workday) is the week that the HR department is out of the office and not around to detect errors.

The message routed to me via the recruiter: “We just migrated to Workday and something went wrong so we aren’t sure where your offer is.” I requested they send a PDF version so I could at least review legal terminology, employment restrictions, and negotiate sooner rather than later. This seemed reasonable to me and my recruiter friend so we waited with the expectation that this offer would come along in an hour or two.

Do You Really Need An Offer?

By this point I’d already decided my trip was more important than the offer and proceeded enjoy the tropics. Every once in a while I’d ping the recruiter for an update on the offer that hadn’t come in and she’d say she didn’t know what the hold up was. This went on for a few days, bringing us to the 8th of January, a week after I was supposed to have my offer.

The HR contact, now in a long and confusing email thread with me and my recruiter, sent me my “offer”: a number describing my pay along with a annual bonus tier. I mean, I guess that’s a offer, in a sense. However, a job is more than pay. What about moonlighting policies? At will employment? Vacation? Health benefits? Anything? At this point I still had my wish list of negotiation points but nothing to negotiate against.

My recruiter and I chatted over a call when I had reliable Wi-Fi and agreed this wasn’t much of an offer in terms of details. There wasn’t even anything to sign, no legal agreement laid out. I discussed with her my negotiation criteria and she said she’d make it happen. She thanked me for my patience, responsiveness, and lack of complaint while the company was unresponsive, off track, and generally a mess.

I Could Be A Murderer

During the last days of my vacation, around the 18th of January, we agreed that I would start on the 30th of January. This seemed fine. I spent some time in limbo until the 25th when I realized I hadn’t been asked to do a background check. Who in the world is going to ask for a background check? People who are paranoid and want to make sure they aren’t immediately ejected from a new job because of an HR mix up.

I gently reminded HR that my start date was less than a week away and was there a criminal background check I needed to fill out? Response: Well, shit, you mean you didn’t get it already? I guess we have to manually trigger that Workday workflow and since none of us know how Workday works, it will take a few days.

Background checks can take up to two weeks and this was 5 days before my start date. I mean, I don’t mind if you don’t do a background check. I also don’t mind if you push my start date back. Could you just get your shit together?

Am I In The Right Place?

After the vacation ended, a sort of verbal agreement fell into place about my offer. I had given my start date and it seemed to be on track. Except for one thing: why hadn’t I signed an employment agreement? I’m not saying I like signing things but every other employer had one that outlined all the ways I could be fired immediately. Or sued. Or burned at the stake. It seemed important.

Right up until the day before I started, we still hadn’t figure out whether I needed to sign something or not. The HR department claimed I had accepted my offer in “the system” and I maintained that I had never signed a thing, though I’d be happy to do so once something came my way. As it turns out, the system had a few more problems.

When I started, they expected me the week after. That just meant that I had to fill out real paperwork for proof of eligibility of employment instead of the digital versions I was supposed to have gotten a week before I started. No big deal.

Oh, and you won’t be able to access any of your benefits. Hold on: I haven’t signed an offer, I’m not technically active in your system, and I have no benefits. Is this volunteer work or employment?

It’s just the new system, don’t worry about it.

Day 2

My second day of work, the HR department set up a meeting with me and my manager to discuss my strange obsession with the lack of employment agreement. I told them I develop software outside of work and wanted a guarantee that there would be no legal intellectual property infringement or that my software wouldn’t default to their ownership. The answer: “We have no such restrictions here and never have. Even if we did have them, we wouldn’t pursue them.”

Uh-huh. I didn’t believe it but couldn’t do anything about it. Well, on the plus side, I still hadn’t technically signed anything so I’m fine. Right?

Welcome to Company X

I’d decided to let go of this “signing a contract” business and move on. Until my second week. Workday blasted me with an email storm about all this legal bullshit I needed to sign. You are restricted in the software you develop outside of work. You will be immediately terminated on violation of the following work policies. You must fill out proof of employment. You can’t drink at work. All those signature requests finally came in, a week after I started.

I was pissed off. What kind of HR department doesn’t know the legal bindings of an employment at their company? And directly contradicts them? All I could do was send a passive aggressive email to HR and my manager explaining to them how there were legal documents I needed to sign and I likely didn’t see them because of the incompetence of HR and the poorly timed migration to Workday. Boo.

Volunteer Work

Finally, all this offer, recruitment, and legal agreement stuff is put aside and I got down to work. One, then two, then three weeks went by and I was getting the hang of things. Everything seemed fine. Until I got a few credit card bills and went to check my bank account where I had set up direct deposit pay. No money. Okay, maybe I hadn’t been here for a full pay period yet.

I checked the pay schedule on the HR site, which was a rabbit hole adventure through SharePoint, Workday, ServiceNow, and custom internal sites. It looked like I was due pay for 2 pay periods, almost 3. Huh. Well, it looks like I’m not getting paid.

I sent a message to the HR department through their online ticketing system and got this response back: “Your paycheck will be in the store.”

Background: This job was in the technology department of a retail company with several physical stores. Unfortunately, or maybe fortunately, I don’t work in a store. Either way, this begged the question: if I don’t work in a store, where is my paycheck?

What about the mail room? Surely, if they said “store” maybe it just meant “employee location”. I went up and down the building floors in search of something that looked like a mail room. I found something like it near the IT department but I don’t think they even knew of me in the system. At this point, that’s not surprising.

Finally, with a week gone by of me searching for my paychecks, I went to my manager.

Manager: Are you okay if we cancel today’s 1:1?

Me: Sure, there was just one thing I wanted to ask you about though.

Manager: Okay.

Me: I’m not getting paid…

Manager: What!? We are getting to the bottom of this right now!

*Walk to the team Admin*

Manager: Hi Admin, we have a bit of a problem *looks at me*

Me: I’m not getting paid.

Admin: Oh my God! That’s awful!

Manager:  Do you know anything about that?

Admin: I don’t really handle pay or anything. You’d have to talk to HR *turns to neighbor* Have you heard anything like this?

Neighbor: What is the problem?

Me: I’m not getting paid… I mean, I set up direct deposit over a month ago and I haven’t received anything.

Neighbor: Oh… you know, when I joined a year ago they sent my first few checks to the reception desk. Nobody told me about it and it took a while to find where they went. It might be worth checking there.

Manager and Admin: What? Why would they do that and not tell anyone?

Neighbor: *shrug*

Me: Well, I’ll go check and if not, we can escalate to HR.

In retrospect, this whole interaction was a little funny. How many times had I said “I’m not getting paid?” and it seemed like my coworkers were genuinely concerned about this problem. I went to the reception desk on another nondescript floor of my office building and asked if they had any mail for me. Voilà: there were all my employment checks, ready to be dropped into my bank account and swiftly redirected to pay my credit card bills.

By the end of all this, I was finally getting paid, I knew the legal parameters to my employment, and I had a firm distrust of HR and related software systems.

What I Learned?

  • There is always a legal contract to sign that should be presented before employment no matter what HR and related systems tells you
  • Always check your first pay period and verify you get your pay instead of waiting and draining your savings to cover bills your pay should have been covering
  • Dealing with incompetence creates a bond through struggle, even with a recruiter

 

Why Use LinkedIn?

This post will be about how I’ve used LinkedIn in my career and how recruiters on LinkedIn or otherwise can be used as a tool as well.

What Is LinkedIn?

If you are a working professional, you’ve probably heard of LinkedIn. At least for the English speaking, North American job markets. Like other professional job searching sites like Glassdoor, Hired, and Indeed, LinkedIn allows you to upload a resume and makes it searchable by companies and recruiters. Similarly, you can search and apply for jobs. It’s different for its social networking. I think of it as “Facebook for work “. It’s a lot less awkward to share your LinkedIn details than your Facebook profile. LinkedIn is a Microsoft acquisition. Back when that happened we bemoaned the data they’d be taking from us. Now, we’ve more or less forgotten.

Using LinkedIn To Your Advantage

Fishing For Jobs

By frequently updating your profile, you show up in more search results. This will boost you in “recently updated” results. The other way you show up in search results is keywords in your descriptions. Make sure to put a buzzword filled description for your work histories.

A “Living” Resume

Several companies often take a snapshot of your LinkedIn profile instead of a resume. This means you don’t need to spend time fiddling with font size and margins to fit that extra internship on one page. This is another reason to make your profile detailed. Since there aren’t any length restrictions on your LinkedIn profile, it’s a good opportunity to add more information about your past work.

Following Up

When a prospective recruiter, manager, or client meets with you, get their LinkedIn details. This is a great way to follow up because you can stalk them to get a better picture of the company they work for and their work history. Just a reminder: following up is a great way to improve your chances of landing a a client or job.

Other Uses Of LinkedIn

Recruiting

You can use LinkedIn to recruit old coworkers or find people to be your referral bonuses but I don’t. Occasionally if I know a position will help someone, sure, I’ll shoot them a message. I don’t want to turn into a part-time recruiter.

Job Searching

For a site that’s strongly advertised as a job hunting tool, it’s not the most diverse. You can only search for on-site, full-time positions. You can search for jobs in Remote, Oregon but not remote working positions. Sites like Remotive and We Work Remotely are better for jobs you can do anywhere. Even Remote, Oregon.

Watching Companies Or People

Watching people or companies is useful if you track company performance for investments. You may also be looking for information on lay-offs or massive hiring initiatives. You could also follow business leaders that inspire you for opportunities to hear them speak or read books they’ve published. This is a way to understand trends in your industry and adapt to them… only if they’re a large enough company to spend money on social media specialists.

Getting Industry News

Like watching companies or people, you can get news digests for your industry. Sometimes I’ll take a look and get a simple digest of information. It’s a mix of study results, platitudes from leaders, and gossip. This is a good source of water cooler topics.

Joining Groups

Half the time I forget this is a feature because of how hard it is to make use of it. There are alumni groups for schools and companies. The idea is to be able to refer jobs to group members and potentially mentor people. As with any internet social media groups, they vary widely. Group conversations are more fun on a casual forum like slack so I use that instead.

How LinkedIn Is Getting Me Closer To My Dream Job

LinkedIn can help get you a dream job. It’s not the best fit because I’m looking for remote, part-time, or freelance work. It can still be useful. Some of those irritating features helped connect me with work I wanted.

Following Up

Following up is really important. I think this is the third time I’ve said this in this post but it’s worth reiterating. Your potential clients aren’t going to contact you if they’re busy (which they often are) or maybe they a client for a few months down the line instead of today. LinkedIn in as a great way to take a name and turn it into a picture of a person or company along with a way to contact them and see what they’re putting out there. It also allows you to see their connections and find more potential clients. Typically, people in similar business or career stages cluster. So, what if this person was a “miss”? You can also check out their company to see what things you should avoid.

Call My Bluff, I Dare You

Recruiters are like a fungus: they bloom, you wipe them out, they lie in wait, and return with equal or greater power later. At first, I ignored them or declined connections. After a while, I wondered what they would do if I asked for a part-time, remote contract. When I did, a lot of them backed off and didn’t come back. However, there were a few who started a discussion.

I think of these as the “good” recruiters. They didn’t give up when I gave them these difficult requirements, they started to ask why I needed them and what types of negotiation I’d be willing to do. I started building potential work schedules in my head: 20 hours per week onsite, 30 hours per week remote, or fully remote 3 month contract. Surprisingly, they went out and came back with jobs meeting these criteria. Not only that, they frequently followed up to tell me how the search was going and which companies were interested in my work proposal.

The takeaway: if you can come up with a job worth talking to a recruiter for, they might find it for you.

Tales From The Git Keeper: Ain’t No Rest For The Overworked

When we are navigating through life, we often hear about the importance of boundaries. Boundaries come in different forms: ownership, intimacy, and work/life balance. Here is one of several cases where my work/life boundaries were crossed in the course of my employment.

Background

I was on a team as a sort of floating engineer working on some architectural designs rather than specific features or operations. My manager requested my help on an urgent project for 2 weeks and assured me it would bump me up the list for promotion, something I’d been working toward for the past 6 months. The catch was having to put aside some of the architecture work but I thought it would be a nice addition to my highlight reel.

In another part of my life, a close friend was going to be married 3 weeks from the day I was asked to help on this project. I had accepted the invitation and booked my flights several months prior as well as sending out the usual out of office calendar notices.

Incident

They didn’t warn me that I’d be working with someone who didn’t know the system. Instead of 2 weeks, it was 2 weeks of me working and 1 week of me undoing the mistakes of my coworker. As the deadline neared, I had increasingly detailed documentation of the remaining work and release plan so someone else could pick it up. I lived under the assumption that work would bend to my vacation plans, not the other way around. Until this conversation:

Project Manager: Hey, so is this going to be done by tomorrow?

Me: That’s not up to me. I have all the changes lined up and the validation scripts ready but I can’t make anything else go faster.

Project Manager: And you’re going on vacation?

Me: Yes…

Project Manager: Too bad we can’t cancel that, huh?

Me: No, my friend is getting married so it’s immovable.

Project Manager: Ah… well, let’s see what happens tomorrow.

My manager had been coaching me on not being so angry at work (gee, I wonder why that kept happening) and I knew if I indicated any emotional response to this, I’d be getting a stern talking to (this manager was a jerk). So, on the outside I just vaguely smiled and went back to work but on the inside I was calling this shithead all kinds of names and preparing to quit if they tried to make me stay.

I did go on my vacation and I did meet my deadline.

Aftermath

You might want to know what happened to the project, the promotion, and the project manager. Here’re the answers:

  • The project manager was fired for incompetence.
  • When I returned from vacation, the project was delayed and didn’t need me to work like crazy, under threat of losing vacation beforehand.
  • 4 months later my manager informed me that my work to this project “didn’t count” towards my promotion. He remains a jerk to this day, or so I’ve heard.
  • The walking incident of a coworker had been ejected from the team. It turns out he wasn’t only ignorant of the system but of how to do anything.
  • The only part of the project that worked without completely destroying all other integration points was the piece I implemented. It’s not because I’m a superstar developer. It’s because the team was all new randomly hired people except for me and one other guy. They had no chance.
  • My documentation was passed along and worshiped as the only documentation for the entire project that described how to validate anything.

What Did I Learn

  • Shit rolls downhill: Despite my intense irritation with the project manager, I saw he was under a lot of strain to get this project done. He was being asked to make a lot of personal sacrifices to make this thing happen. So when he implied that I would need to make sacrifices too, I wasn’t surprised but I didn’t think he’d cross that line.
  • Never trust your manager when his ass is on the line: Until the sudden foray into the project, I didn’t know anything about it. After getting back from vacation, I gained more context on what was happening. Apparently, there was this political battle between two directors and one of them was mine, trying to make a point about the effectiveness of his team. I got pulled in, not because it would benefit my career, but because it would benefit his.
  • The real deadline is when everyone else is ready: I had accepted the deadline given to me because I didn’t know anything about the project when I was enlisted. What I found out later showed me there wasn’t a snowball’s chance in hell that any other team was going to be ready by the deadline. The fact that my work made my team ready was just an excuse for the asshat director to throw shit on other teams. It didn’t matter that I did the work, did it well, and did it on time.
  • A pattern emerges: Now that I had a history of Hail Mary passes, guess who came knocking at my non-existent, open-space door at the next crisis? That’s right, asshat director. So I started saying ‘no’. And then I changed teams. And then I quit the company. Sometimes my old coworkers tell me he says he’ll hire me back anytime. I hope he’s not holding his breath.