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.

I Dislike EAPs

adult business close up friendship
Photo by Pixabay on Pexels.com

If you work for a company in the United States, you may have seen “EAP” as an offered benefit. This stands for “Employee Assistance Program“. Along with some wellness benefits, it often offers some coverage for counseling or therapy. At first glance, it looks like a good way for the company to support their employees. Certainly, funding gym memberships or paying for exercise equipment is great. What about those counseling sessions though?

How It Works

If your company provides this benefit you are eligible to receive 3 sessions fully covered regardless of your health plan with an in-network counselor or therapist. This can range from career counseling to treatment of mental illness. I think you may even be able to make a case for a personal trainer to fall under this umbrella.

Typically, EAP benefits are provided through a third-party company whose website you go to for providers. Often this website has a ton of other resources. I’ve seen company discounts and coupons along with tests to tell you whether you’re cheating on your spouse (no, it doesn’t make sense). Often the material seems like a random collection of generic advice and then that search engine for people in network.

How It Doesn’t Work

I see the EAP plan as someone offering me a towel when my house is flooding: it’s a nice gesture and might help me feel a little better but doesn’t solve my problem. The flood, in my case, would be a series of stress related mental health issues and the towel is those 3 counseling sessions. These are a few things I’ve learned that make this benefit useless:

  • It takes 1 to 2 sessions to determine if you can work with a particular counselor. Sometimes it can take longer for the therapist to evaluate whether they can help you. There goes those 3 sessions and you got nothing for it.
  • Your physician may have a “care team” with a counselor included. This is super useful when both of them can work together to give you the best combination of medication and behavioral treatment. Oh, but that counselor isn’t in the EAP network, even if they are in your health plan network. So much for saving some medical expenses.
  • Finally, therapists hate dealing with insurance, much like everyone does. Unfortunately, the EAP is an additional round of paperwork for them. So, the counselors that are successful and well-liked by their clients don’t really need the additional traffic boost the EAP gives them. So guess who’s left in the EAP search engine?

What Needs To Change?

I don’t know. I only have my own case to look at and say “EAP doesn’t work or make sense for me” but who knows, maybe it isn’t just lip service and people have been helped by it. However, to make this something other than an irritating reminder of how poor our mental health support is, here are some things that I think would make it better:

  • Remove the in-network limitation
  • Cover 2 introductory sessions with any new therapist up to once every 3 months (supporting those searching for the right one)
  • Allow an additional covered session for “qualifying life events” such as divorce, bereavement, or a new medical diagnosis
  • Provide career and life advice to employees generated by the company’s HR department, not some generic employee support company that tells you how to shop for a tie

In Conclusion…

I hope you learned more about what EAPs are and I hope they are more useful to you than they’ve been for me.