My Guide To Job Searching Websites

It’s all fine and good to tell people to change jobs or find an interview but how does that actually go? I’ve tried a few different sites with varying experiences.

When applying…

Before starting make sure you have a resume written up, a list of 3 – 5 key skills you want to advertise, and (optionally) a headline or professional description of yourself. You will be copying this information across each website in one form or another. Once that’s out of the way, plan 15 – 30 minutes to set up each account. So much for the quick and easy job hunt these sites advertise.

The Sites

For each of the sites I tried, I’ll go over pros and cons specifically related to job hunting and getting interviews.

  • Indeed
  • Hired
  • StackOverflow
  • Glassdoor
  • LinkedIn
  • Technical networks

There are even more sites out there that I didn’t look out there are probably a few new ones since I started writing this…

Indeed

What makes Indeed stand out?

Indeed very much goes for simple job hunting. Basic UI with no popup notifications makes it less overwhelming to use, if you can handle the blue and white theme for more than 5 minutes.

Pros

  • No frills experience – purely job search and apply with some company information
  • Little to no spam
  • Offers Seen by Indeed if you want help from Indeed finding a job

Cons

  • Nothing added – yes, I put that as a pro too but if you change your mind later, you’ll need to start using a different site.
  • There are two ways to respond to messages: text (as normal) or they offer a special UI to give a canned response. If I used the provided responses, I couldn’t see what option I responded with so sometimes I responded twice accidentally.
options
What is the difference between “Your contact details will not be shared” and “I would not like my contact details shared with this employer”?
  • The overall user experience wasn’t great but if it gets you a job, does it matter?

Recommended?

I would use this site if I only wanted to apply to jobs and not sign up for social media accounts like StackOverflow or LinkedIn.

Hired

hred

What makes Hired stand out?

Hired stands out because they do the searching for you. Once you create a profile, you can sit back, relax, and wait for the interview requests to come in.

Pros

  • No need to search for jobs – recruiters will search for you
  • You can block former employers
  • Scheduling your first interview happens on the Hired website – no more awkward scheduling emails
  • Filling out your profile allows you to specify non-technical job search criteria like company culture, industry, and career goals

Cons

  • I got a lot of emails encouraging me to do skills tests, talk to career coaches, and improve my profile. I was emailed continually for months afterward asking about my experience.
  • I can’t see what’s going on with the job search. Am I not getting requests because it’s a low season or because I am not in demand?
  • The search will last 2 weeks and then it will stop… probably? Despite the notice they said they’d give, I didn’t see anything that would tell me I’m no longer being shopped around.
  • Along with most other hiring sites, Hired is not remote or alternative work arrangement friendly but you can’t really tell unless you do two rounds: one remote location search and one on-site search (as I did).

Recommended?

If you already have a solid background in your career, Hired is a good hands-off way to get interviews for traditional jobs. If you’re seriously searching, you’ll need to use another site as well.

LinkedIn

What makes LinkedIn stand out?

LinkedIn is a social media and networking platform in addition to a job search tool. This can help you get jobs in a few different ways. If you regularly add coworkers to your LinkedIn network, when they find a new job, they may reach out to you to see if you’re interested in working there. Similarly, if you liked working with them, you can ask for a referral to their company. This is a “passive” way of using LinkedIn, though you have to actively add people regularly.

The other way LinkedIn being a social networking platform can help is where recruiters can send you messages about job openings without needing to exchange emails or phone numbers. LinkedIn makes this a little less annoying by giving you control over whether to start a conversation with the recruiter or not.

Pros

  • You can be a passive or an active searching and able to hide yourself from recruiters in settings
  • You can see other profiles of people similar to you in your network to compare what is in demand at particular companies or what your competition is putting out there
  • You can use the site to build reputation by using their social media features as well as using the feeds or groups to keep up with where you need to go in terms of career development
  • If you want to give someone your contact information, LinkedIn is better than your personal email or phone number for work related networking

Cons

  • You can get a lot of recruiters messaging you for jobs you aren’t interested in because a word or two on your profile matches their search criteria
  • You need to put in more work on your profile and having a network on the site
  • Even though you can put a description on your profile about what you’re looking for, no one reads it and will message you anyway
  • It is really noisy at first with a lot of notifications, social media features, and integrations with other products like skills assessments, certification programs, etc.
  • You can definitely set this up to work well for you but, as mentioned above, it’s a bit of work

Recommended?

This is good for both passive and active job hunters but I’d mostly recommend this if you’re looking to get recruiters messaging you over time (i.e. passive) or if you want to build a digital network. You can use this as the simple search and apply but there are other sites that make it simpler if that’s all you’re looking for.

StackOverflow Jobs

What makes StackOverflow stand out?

StackOverflow jobs stands out because it offers a lot more freelance, contracting, and remote positions compared to the other sites. Several of the other sites had very little to offer in terms of these three “alternative” working styles. The downside is that you can see some sketchy job postings but nothing as bad as the freelance sites out there like Upwork or Freelancer.

Pros

  • Different types of work than on-site full time.
  • Similar to Github, you can use your StackOverflow account to show technical contributions in the community but it’s optional.
  • Some listings show expected salary, which makes salary comparisons a lot less work. This is also in Glassdoor but not the others.
  • Very little “stalking” – no notifications, no sudden change in my ads or popups telling me to reapply.

Cons

  • You’re not going to see many of the large tech companies here. For example, searching for “Amazon” has something on the other sites but not here.
  • Again, some listings might be for individuals or small companies looking for one off work that is more like a freelance task and these can be scams.

Recommended?

If you’re looking for alternative work or you want to work for smaller, non-tech companies, StackOverflow has more of those. It also has more contracts and “gigs” (for example, on-demand interviewers) for those looking for temporary work.

Glassdoor

What makes Glassdoor stand out?

Glassdoor has always stood out for showing data on company ratings and salaries. Ever since I joined the tech industry almost a decade ago, Glassdoor was referenced as the place to check for getting salary estimates. These days, other sites like Indeed above,are trying to catch up in this area but it will take a while to get the data.

Pros

  • Find companies that match your values and lifestyle needs in addition to having open positions.
  • Description of interview difficulty and interview questions.
  • If used in addition to other job search sites, can help you negotiate recruiter calls when seeing what to ask for in terms of pay.

Cons

  • So many notifications. Every time you do a search or you look at a job description, the default is to show a popup and an email asking if you’d like to go back and apply.
  • The data can be misleading. If you look into some of their charts and reports, there may be very little people reporting so it skews the result. All of this is self reported so you’ll need to take care with dishonesty or exaggeration in the information.

Recommended?

I can’t stand how many notification popups I see on this site when I use it but if I stay logged out and only use it to see the general company information, it’s okay. I think if you want to go all in on one site, this could be a good one to use – like LinkedIn, it can be the One Site you use with some effort.

Technical Communities…

…and in person networking

What makes technical communities stand out?

Technical communities can allow you to branch out beyond your current title and experience. You can go to one tech event and be a software developer looking for management positions. At another event, you can be looking for a startup co-founder. In each case, you can test out your pitch and gauge people’s reactions. This can help you find the right set of words to put on your online profiles or it can result in the partnership or job you’re looking for.

Pros

  • You don’t need to spend hours crafting the right phrases to fit perfectly on your one page resume – having a LinkedIn profile helps but isn’t needed.
  • You can find opportunities outside of what’s online. Some startups can’t afford posting jobs on LinkedIn or Glassdoor and only show up at networking events..
  • You can grow your network to find people who will help you get a job in the future, study interview questions with, or hang out and play board games.

Cons

  • Unpredictable results with a high time investment.
  • More costly considering event tickets and transportation costs.
  • Very draining if you’re an extrovert, though networking through Slack or Twitter can make this work a little better.

Recommended?

If you’re looking for startups or looking to found one, networking in technical communities is often the only way to find companies early on. Otherwise, this type of networking can be good if you’re just shopping around and don’t want to keep up an online profile. For those who want more dynamic careers, investing time in a specific technical community for a while will generate opportunities. This can mean becoming a contributor or maintainer for a GitHub project or a part-time instructor for boot camp classes, things harder to find on job boards.

What do I use?

As you might have gathered, I use a mix of sites for different things:

  • Glassdoor: for salary and company information
  • LinkedIn: primary professional profile and interacting with recruiters
  • StackOverflow Jobs: when looking for temporary work or gigs
  • Technical communities: keeping an eye open for trends and job postings I might not find otherwise

For the whole roundup: I don’t use Hired or Indeed because they have nothing new or convincing to offer. If I’m bored, I might do a round of Hired but as I’m in an “alternative working arrangement”, it isn’t useful.

Next Time

A lot of job hunting sites are offering skills quizzes. I’m going to run through some of these and do another post on how those go for a few sites that offer them.

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 »

Course Review: Docker for Java Developers

This post will go over a course Lynda.com (company owned by LinkedIn and by extension Microsoft) to learn about Docker for Java Developers.

Lynda.com Course

Docker

Java 

Usefulness And Overview

Currently, the course topic is relevant. The paradigm of “containerization” or releasing your software as self-contained collections of related packages and dependencies called “containers” is catching on quickly across services in the industry. Even though this says it’s for Java developers, it’s not really Java specific. All the concepts and commands used are language independent to a certain extent. The part that the course missed out on was Kubernetes, a fast growing solution from Google related to container management.

Is this particular course a good use of your time to learn about Docker? Maybe. A lot of the content was easily found in documentation or by searching online. If you like information presented in sequence with context, yes, this is a good choice. Otherwise, it may be tedious or too shallow in topic coverage.

The course follows a mini-lecture with demo format. You can copy the course materials and follow along with the demo. The course starts off assuming you don’t have Docker set up. The content begins with installation and follows a simple web app through containerization, deployment, release and scaling. It further goes through monitoring options and maintenance commands.

Course Details

  • The instructor introduces Docker by showing you the download websites and how to install on various operating systems.
  • He introduces the course material by showing how to use git to clone the course materials and use them.
  • The first use of Docker is to create a container with the sample application and use the start and stop commands along with options. List running containers as well.
  • Next, the website is deployed using the container and various health checks are shown. An important not here was how container health is different than application health.
  • The lecture shows how to automate the use of containers in a build and release flow.
  • Container sharing, tagging, and maintenance in a container store are shown along with best practices for tagging.
  • Next was a more complex application with multiple services with a container that needed to be started up in a particular order (application and database).
  • He went over the use of container contexts to allow running multiple instances of a container on the same host.
  • This then moved into more advanced use of containers including swarm mode with rolling updates, certificate rotation, auto-scaling, and fail over.
  • He went over container maintenance and use of the master node to manage other nodes in the cluster including the use of drain and pause commands.
  • Another advanced topic covered was storage nodes and how to use container independent storage or distributed storage solutions with containers.
  • As the last topic, he went over tools and other plugins for monitoring including the stats CLI tool, Prometheus and C Advisor.
  • He did not go over Kubernetes but recommended it as a future topic.

What Doesn’t Kill You Slowly Grinds Away Your Sanity: Psychological Burnout

Often you will hear people say that someone is “burnt out” or “I was really burnt out on [project/team/company].” Casually, this means you are exhausted or temporarily stressed on a team. This often is thought of as a passing condition. Unfortunately, there is a more formal type of burnout called “psychological burnout” or “occupational burnout.” Here I’ll talk about what this is, how it can ruin your life, and how to fix it.

IMG_20181023_092942
Top: this is your brain. Bottom: this is your brain crushed by burnout.

What Is It?

Burnout is a pathologic syndrome in which prolonged occupational stress leads to emotional and physical depletion and ultimately to the development of maladaptive behaviors (e.g., cynicism, depersonalization, hostility, detachment).

https://www.sciencedirect.com/topics/nursing-and-health-professions/burnout-psychology

This is a fairly formal definition and doesn’t include a few key points:

  • This type of burnout can last years
  • You may develop long lasting mental health problems such as depression, alcoholism, and eating disorders
  • It can take months or years to recover
  • By the time you notice your “maladaptive behaviors”, it’s already happened to you

You May Have Psychological Burnout If…

We are all different and the signs of this type of condition are different per person too. On top of that, we have such poor mental health support (in North America) that we don’t recognize these problems as repeated exposure to stressful situations. Remember, these “symptoms” are a stress reaction, not a personality trait.

What To Look For:

  • No matter how hard you try to stay optimistic, you can’t see anything going well and you constantly fall into cynicism and criticism at work or elsewhere.
  • You take a lot of breaks at work to get away from work with activities like eating, drinking, or over-exercising.
  • Your week follows a pattern like this: work Monday to Friday, sleep Saturday to Sunday.
  • You become more resentful of people asking you do to things even if they are simple.
  • You start blaming yourself for not working hard enough, not being tough enough, or not being smart enough to overcome the challenges you have at work.
  • You enter a protective combat mode: you are argumentative and defensive about any changes or comments related to your work. When you look back on what caused it, these are usually no attacks on you but you can’t stop yourself from reacting that way.
  • You feel isolated. This can be emotional isolation: no one is there to help you, you need to fix this all on your own, your coworkers or boss don’t have your back. Or physical isolation: you start working from home more, you don’t want to participate in any team activities, you stop responding to emails or chats messages.
  • And much, much more…

The worst part is the slow creep: you won’t notice a big, sudden change. Instead, you’ll find yourself here without knowing how and you’re not sure how to get out.

Causes

When we talk about burn out in the casual sense, it’s usually caused by a tight deadline, late nights, or the frenzied kind of work we associate with “crunch time”. Interestingly, this isn’t the same as what causes psychological burnout.

This is how I sum up the cause of psychological burnout:

You put effort into something and you got no result (or not the one you expected).

Here are some examples of how that shows up:

  • You are asked to write a design or build a feature and just as you are halfway through, it’s cancelled
  • You put up a code review and no one reviews it for days or weeks
  • You prepare a proposal for a new feature, project, initiative, anything and it’s brushed aside by your manager or team
  • You write a masterpiece of an email reporting some fabulous result or finding and no one responds
  • You ask questions or make comments in team meetings and they are ignored

Some other causes you’ll see listed on medical websites call out other things like dysfunctional teams, lack of control, or boredom. To me, these fall into work that’s not getting the result you expect. If you are trying to talk to your team and they don’t respond, that’s effort wasted. If you find out your project was cut because you have no say in your team road map, more effort wasted. I find that any action by the team or company that sends the message of “you did all this work and we don’t care” is hugely damaging. It makes sense that people withdraw, start thinking nothing they do matters, and, of course, “develop maladaptive coping behaviors.”

When It’s Too Late

Too late to me means you’ve gone so far into your emotional hell that you start to see your relationships, productivity, and physical health suffer. “Too late” doesn’t mean you can’t get better, it just means that you will need to make a significant change in your lifestyle to recover from your new and horrible condition. Here are a few examples of what too late looks like:

  • You a few beers after work to get rid of the unhappiness built up during the day
  • You can’t remember the last time you slept well and find yourself self medicating with pot, alcohol, sleep medication or other substances to get to sleep at night
  • You’re are late to work because you can’t get yourself out of bed anymore
  • Your coworkers and managers tell you you’re angry and critical
  • Your friends are telling you to quit or they’re not talking with you as much because they’re tired of your work rants
  • You’ve been to visit your doctor to either get anti-depressants or increase doses
  • You have other minor physical problems building up: regular indigestion, random aches and pains, sprains, headaches, frequent colds or flues

These signs differ for each person. Some choose to drink while others over-exercise. Some will get angry and others consider self-harm. Either way, substance abuse, uncontrolled emotion, mood altering prescriptions, and a decline in personal relationships mean this is now taking over your life and something needs to change.

How To Recover

How did this happen? It’s complicated. A lot of different pieces came together at the same time to create this situation. To solve it, it’s also going to take a lot of different pieces coming together to work to get you better. Here are a few of the bigger things you can do to find your path to recovery:

  • Go to therapist or counselor: this person will help you identify the situations leading to burnout and track your improvement or lack thereof over time
  • See a doctor for mental health evaluation: you may have stress induced depression, anxiety, ulcers, or insomnia that needs medications and management with a physician
  • Take a break: take time off for as long as you can. By taking time off, you will see how unhealthy your life has become and seek better opportunities.
  • Change jobs: consider changing teams, managers, or companies depending on what you learn from introspection and counseling
  • Change careers: many people choose to change careers to escape the damage of burnout. Going back to school, choosing to invest in family, or becoming a travel blogger are common escape routes.

Make sure you do something. If you choose inaction, you’re damaging yourself physically, mentally, and potentially financially (medical bills, being fired).

Finally, find things that counteract the cause of burnout:

Do things that turn your efforts into rewards.

It’s Not That Bad Yet

If you’re reading through these signs and think “I’m putting effort and not seeing results but I’m just frustrated, not a depressed alcoholic” then you’re in luck! You can avoid the worst by getting away from your situation early. When you start to see people ignoring, cancelling, brushing off, or otherwise not returning anything on your effort, evaluate whether or not it’s worth staying where you are. It’s not just about wasting your time, it’s about damaging your motivation and joy in working. You can use mindfulness to identify what is going well and what isn’t to get yourself moving in a better direction.