edit: reading some other comments I think it's easier to be an older IC at big companies than startups/small companies. But whether you should pursue a management track is a completely different question.
[updated] IC = worker with management tendencies but more technical knowledge.
[kept] Ok then. Helpful. Corporatespeak is often just jargon creation to exclude others for whatever reason.
[edit expansion] Worker who is not manager but has manager skills sufficient to orchestrate as needed to deliver a result in required manner. Knowledge level exceeds expectation normally associated with a classic "pure" manager.
Many software engineers (including myself) much prefer the IC route.
Ok I probably mangled this but IC just paid for itself in my mind via increased understanding, nuance and useful brevity.
There's also the verisimilitude that it can also mean an inferred ceiling. For example, Principal <whatever area> Engineer role[s] at Microsoft is [are] typically the highest that you can go - if you stick to the IC (read: non-managerial) track[s].
One way to deliver that experience is in delivery management, that is, being responsible for teams that ship stuff.
Another way to deliver that experience is in people management. Not all companies equate this with the previous responsibility.
A third way in in a more nebulous “leadership” role that doesn’t have “manager” in the title, e.g. “Architect,” or “Principal Engineer.”
The latter is tricky, but can be a very good opportunity. My 2c on being in engineering leadership is that it’s best to think of yourself as a manger without authority, rather than thinking of yourself as an engineer with authority.
- - -
FWIW, I am 57 and a Principal Engineer with PagerDuty.
That's great, and resonates
If you're a senior enough person who doesn't want to manage people, you should think of yourself as a "know-how" (knowledge, experience) manager and find a role that allows for that.
As a technical lead (getting into my 40s soon) I try to think of myself as an chief enabler / support net: Let the team figure out implementation, support them as they go where they get out of their depth - and protect them from DIRECT trickle down BS/interruptions from management or clients.
This has worked pretty well for me thus far, but I've really got no idea if this is a solid approach or way of thinking.
I'm curious to know anyones thoughts?
I'm actually a Vice President without any direct reports. I'm on the same level as the head of software delivery on the organigram. See myself as chief enabler too. Fixing architects disillusioned designs and try to explain to developers how to implement these designs. Sometimes I dabble doing some POC. Good thing is that I don't have people management bullshit, downside is that this is my glass ceiling if I stay here :)
Im a principal at AWS. A coworker made a joke that resonated with me; a principal engineer is a manager without direct reports.
My job is twofold. Helping managers understand where to go. Helping ICs and teams to get there. I have no inherent authority and it all comes down to trust and influence.
That said there does seem to be a push to reemphasize the ‘exemplary practitioner’ aspect and scale back on the high level “architecture” and pseudo PM aspects that creep in with expanded scope.
Only regret is that I absolutely under leveled myself (msft L64), and after a couple years getting dragged through a couple of reorgs, I still feel like promotion is a ways off. Most of my peer group is 10 years younger, and most ICs of my age group are at least two levels up. So wait for an opportunity at the level you think you should be. Don't let imposter syndrome talk you out of it or think you can make it up after you join.
But even still, I'm doing way better now than I was back in Michigan working for startups, even accounting for cost of living.
Also note the most challenging change for me was getting used to how little control of anything you have is. I really miss being able to basically decide my design and implement it against public well-known technologies. Now so much of it is calling around, trying to figure out how other teams are doing things, coordinating with them, ensuring backward compatibility with a million old things, blah blah blah, it's much slower and less interesting. But, still worth it....I guess. (second-guessing myself now?)
And don't let imposter syndrome weaken your resolve on that salary if you're coming from somewhere with way lower baselines. You don't need to be a super hero at any level short of "partner" level. You'll just end up with a lower leveled job than you should.
My experience at msft in a nutshell. They pay very well and their name brings prestige, don't forget that when you second guess yourself!
That said, I just went in cold. If you've been coding and are current in one of the 3 big interview languages (C++/Java/Python), and if you still understand your undergraduate level algorithms course and the corresponding vocabulary, then you know what you need to know.
Side note: A thing that no one told me but that I had to figure out on my own is that your technical writing skills are one of the most important skills to doing well at google. It was unironically said to me that the highest reward/effort one can do at Google is to write documents. The person who said it was correct about that IMO.
> if you still understand your undergraduate level algorithms course and the corresponding vocabulary, then you know what you need to know
speaking from experience, this would not get you nowhere near the level you have to be for passing the Google interview (or any other FAANG interview for that matter). You need to study long and hard in addition to solving OJ problems and familiarize yourself with different problem patterns. Let me give you and example of what I got at Google: https://leetcode.com/problems/remove-duplicate-letters/ Solving this problem optimally with only what you remember from undergrad algo courses is impossible. You either need to have a knack for these types of challenges or solve enough of them to identify a solution pattern.
Can someone explain this? I can't even parse that sentence.
In the second example with input cbacdcbc a possible solution would be cbad but acdb is "smaller" (ordered before).
As an engineer, before starting to code, I'd first ask if the customer would prefer "abcd" or "cbad" for the second example, as either would be far cheaper in terms of development and maintenance costs to do. It's somewhat common to discover that they're just taking the "acdb" you're giving them because that's exactly what they asked for, and then they're alphabetizing it to "abcd" afterward on their end, anyway. But sometimes, there is a legit reason for the weirdness, and the customer is willing to pay for the extra effort.
Whenever someone seems intent on aiming at foot and pulling trigger, always ask "Are you sure?" and "Why do you want that?" at least once before helping them do what they want.
The "read hypothetical; code answer" type of test doesn't quite capture that like the interactive interview discussion does.
CACB
You can get either CAB or ACB. If you were to order all of the possible results of removing duplicates (in this case only two, but obviously many more for more complex strings) and order them alphabetically, then take the lowest one, that would be the right answer.
A good problem gives people with algorithms ability a space to demonstrate that, but it should also give space for demonstrating strengths in design, coding, communication, etc. This one is almost all algorithms, of the "have you seen things like this before" variety, plus a small amount of code.
(Speaking only for myself)
The other important bit is that you often don't need to just find the optimal solution to get good ratings. For the question I used to use, I've had perhaps one person get the optimal solution without any hints. None have solved the extensions without hints. I've given more than one Strong Hire rating.
I have never tried to solve such problems before, but wouldn't it be enough to convert the string into a set of chars, then into an array of chars, sort it, and return it as a string?
No. Please re-read the problem statement. It's way more complicated than that. If you figure out how to do it, try to figure out how to do it in O(N).
An optimal solution would be something like
- create an array of 26 or 52 bytes depending on whether this is case sensitive
- iterate over the string and set the byte corresponding to each letter’s position in the alphabet to 1
- iterate over the byte array and for each 1 you encounter print out the corresponding letter
But that's what "lexicographical" means?
> In mathematics, the lexicographical order is a generalization of the way words are alphabetically ordered based on the alphabetical order of their component letters.
> This generalization consists primarily in defining a total order on the sequences (often called strings in computer science) of elements of a finite totally ordered set, often called an alphabet.
Consider the input “ba”
This solution will return “ab”, which is not a strong that can be generated by deleting characters from the input.
1) create an empty string, call it "S2" 2) loop over each char in original string 3) if the char isn't in S2, add it to the end of S2. If the char is already present in S2 then lexicographically compare the prior S2 verse S2 with this char shifted to the end. Keep the lower ordered one.
This took about 3-4 minutes of thinking and is O(n). It might not be optimal, it might not even be a correct solution as I've spent only a few minutes on it. However, I feel it's close and it wouldn't take much to flesh out.
EDIT: This solution is incorrect.
Build a suffix tree ( https://en.wikipedia.org/wiki/Suffix_tree ) of the input with two modifications:
1. When adding a letter to the suffix tree, skip any paths that already contain that letter. (Thus, each path will contain a given letter no more than once.)
2. Include accounting information in each node specifying the length of the longest suffix including that node.
From wikipedia, construction of an ordinary suffix tree takes time and space linear in the length of the input string. At this level of analysis, I'm just hoping that modification #2 doesn't affect that. #1 certainly won't, in that it involves spending less time and less space than otherwise (by bailing out early under some circumstances).
Once the tree is constructed, just walk it, selecting at every point the child that is lexicographically earliest among all children with the maximum suffix length.
Observation: constructing this tree by hand really feels exponential; I suspect that the linear time and space requirements lean on an assumption that the size of the alphabet is finite.
Observation #2: Based on the comment timestamps, this took about 40 minutes of thinking. I think it's a good solution, but it probably wouldn't look great in an interview. (Also, handwaving "construct a suffix tree" is fast, but actually producing the code to do it takes extra time.) :/
Observation #3: assuming your solution is correct, it is essentially a reduction by dynamic programming of this one, only doing the calculations that are necessary to produce the lexicographically earliest string where I produce them all.
This problem asks for subsequences rather than substrings. As a result, when adding a node to the "suffix tree", it will need to be added as the child of more nodes than it would if we were building an actual suffix tree.
This seems like the type of change that might make construction of the tree harder than O(n). In particular, it will violate the constraint that a suffix tree for a string of length n has only n leaves.
1. "b"
2. "bc"
3. "bca"
4. "bca"
5. "bca"
What am I missing?input: "bcabc"
output: "abc"
This is not an easy problem.
For each char in the original string there is: * 1 check in hashmap (let's assume it was found). This is O(1) * build a new string where we remove that char from the string we are building (string2) and add it to the end. This step may look O(n) initially since we need to find that char in string2 but string2 is capped at 26 characters so it's O(1) * One comparison between the string we are building and the altered version.
How does that make it O(n^3)? I can't see which step inside the initial loop is O(n) or greater.
EDIT: The solution is actually incorrect so this is now semantics.
Interesting use of "semantics".
The question of "how fast does this algorithm run?" is totally independent from the question of "what does this algorithm do?"; the second one is semantic but you're discussing the first here.
I'll stick with creating actual solutions for real people with real problems. So much easier. shrug
I sometimes follow a Reddit sub geared for mostly recent CS grads. Every week or two will be a post from someone who got a FAANG job, detailing what he did in order to pass the interview. And some of these are pretty absurd - graduating last semester and since then spending 6 months going through leetcode 6 hours a day, studying algorithms, paying for interview training classes, etc.
And as an older guy who has a decent CS degree but hasn't needed to use 90% of anything related to algorithms in 15 years, I'd have to study a lot, and along with the numerous days of vacation time used for these interviews in California, it doesn't seem worth the effort.
AFAIK they only blacklist you for 6 months and then you can try again. Even that may be relaxed if you're trying for a different department or, especially, geographical location.
> numerous days of vacation time used for these interviews in California, it doesn't seem worth the effort.
In India at least, the big companies handle this better than smaller ones - they have one or two telephonic interviews to begin with and then finish off all the face-to-face interviews in a single day.
12ms w/ 2.1MB memory usage - apparently 25 percentile for speed and lower memory usage than 100% of submissions in ~50 lines of Go.
[1] https://leetcode.com/submissions/detail/292246392/ (Not sure if you can deep link in to leetcode like this?)
[2] I am looking for a job! Hit me up! https://news.ycombinator.com/item?id=21937576
It seems you cannot, 404 error.
That said, being an eager doc writer in an effort to claim credit or inflate the perception of your own work is a great way to lose friends and alienate people.
--- Here's the actual PDF contents -------
Algorithm Complexity: ○ Please review complex algorithms, including big O notation. For more information on algorithms, visit the links below and your friendly local algorithms textbook. ■ Online Resources: Topcoder - Data Science Tutorials, The Stony Brook Algorithm Repository ■ Book Recommendations: Review of Basic Algorithms: Introduction to the Design and Analysis of Algorithms by Anany Levitin, Algorithms by S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani, Algorithms For Interviews by Adnan Aziz and Amit Prakash, Algorithms Course Materials by Jeff Erickson, Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
● Sorting: ○ Know how to sort. Don't do bubble-sort. ○ You should know the details of at least one nlog(n) sorting algorithm, preferably two (say, quicksort and merge sort). Merge sort can be highly useful in situations where quicksort is impractical, so take a look at it.
● Hash Tables: ○ Be prepared to explain how they work, and be able to implement one using only arrays in your favorite language, in about the space of one interview.
● Trees and Graphs: ○ Study up on trees: tree construction, traversal, and manipulation algorithms. You should be familiar with binary trees, n-ary trees, and trie-trees at the very least. You should be familiar with at least one flavor of balanced binary tree, whether it's a red/black tree, a splay tree or an AVL tree, and you should know how it's implemented. ○ More generally, there are three basic ways to represent a graph in memory (objects and pointers, matrix, and adjacency list), and you should familiarize yourself with each representation and its pros and cons. ○ Tree traversal algorithms: BFS and DFS, and know the difference between inorder, postorder and preorder traversal (for trees). You should know their computational complexity, their tradeoffs, and how to implement them in real code.
○ If you get a chance, study up on fancier algorithms, such as Dijkstra and A (for graphs). ● Other data structures: ○ You should study up on as many other data structures and algorithms as possible. You should especially know about the most famous classes of NP-complete problems, such as traveling salesman and the knapsack problem, and be able to recognize them when an interviewer asks you them in disguise.
● Operating Systems, Systems Programming and Concurrency: ○ Know about processes, threads, and concurrency issues. Know about locks, mutexes, semaphores and monitors, and how they work. Know about deadlock and livelock and how to avoid them. ○ Know what resources a processes needs, a thread needs, how context switching works, and how it's initiated by the operating system and underlying hardware. ○ Know a little about scheduling. The world is rapidly moving towards multi-core, so know the fundamentals of "modern" concurrency constructs.
● Coding: ○ You should know at least one programming language really well, preferably C/C++, Java, Python, Go, or Javascript. (Or C# since it's similar to Java.) ○ You will be expected to write code in your interviews and you will be expected to know a fair amount of detail about your favorite programming language. ○ Book Recommendation: Programming Interviews Exposed; Secrets to landing your next job by John Monagan and Noah Suojanen (Wiley Computer Publishing)
● Recursion and Induction: ○ You should be able to solve a problem recursively, and know how to use and repurpose common recursive algorithms to solve new problems. ○ Conversely, you should be able to take a given algorithm and prove inductively that it will do what you claim it will do. ● Data Structure Analysis and Discrete Math: ○ Some interviewers ask basic discrete math questions. This is more prevalent at Google than at other companies because we are surrounded by counting problems, probability problems, and other Discrete Math 101 situations. ○ Spend some time before the interview on the essentials of combinatorics and probability. You should be familiar with n-choose-k problems and their ilk – the more the better.
● System Design: ○ You should be able to take a big problem, decompose it into its basic subproblems, and talk about the pros and cons of different approaches to solving those subproblems as they relate to the original goal. ○ Google solves a lot of big problems; here are some explanations of how we solved a few to get your wheels turning. ■ Online Resources: Research at Google: Distributed Systems and Parallel Computing ■ Google File System ■ Google Bigtable ■ Google MapReduce
● Development Practices and Open-Ended Discussion: ○ Sample topics include validating designs, testing whiteboard code, preventing bugs, code maintainability and readability, refactor/review sample code. ○ Sample topics: biggest challenges faced, best/worst designs seen, performance analysis and optimization, testing and ideas for improving existing products.
The list looks reasonable to me.
What things, in your opinion, should be considered optional/lowest priority on the list?
Here are some things I would depriotize: ● Sorting: ○ Know how to sort. Don't do bubble-sort. ○ You should know the details of at least one nlog(n) sorting algorithm, preferably two (say, quicksort and merge sort). > I don't know anyone who has had to write a sort in an interview. Obviously you should know big O notation and also how they work, but practicing the implementation seems like a waste of time. In fact in my onsite, I used the .sort() method mentioned it was O(nlog(n)) and moved on to the rest of the problem. It was a minute part of the solution.
● Hash Tables: ○ Be prepared to explain how they work, and be able to implement one using only arrays in your favorite language, in about the space of one interview. > Again, while you should know how to use Hash Tables, I really don't think they would ask you to implement one.
● Trees and Graphs: * You should be familiar with at least one flavor of balanced binary tree, whether it's a red/black tree, a splay tree or an AVL tree, and you should know how it's implemented. > I actually still don't know how to build a balanced tree. It's never come up on any Big N interview I've had. The rest of this section is really important though, tree problems are extremely common in interviews.
○ If you get a chance, study up on fancier algorithms, such as Dijkstra and A (for graphs). > I dont know Dijkstra and I don't think it comes up that often. I have no idea what A is.
● Other data structures: ○ You should study up on as many other data structures and algorithms as possible. > I think if you know trees, tries, arrays, linked lists, and hash tables you will do fine. I only had one interview which had a different data structure (rope data structure) and the only reason he asked me the question was because I had never used it before. It was an intro question and if I said I knew it he wouldn't have given it to me. So I think if they give you another data structure, they are gonna assume you don't know it and will give you an intro question.
● Operating Systems, Systems Programming and Concurrency: ○ Know about processes, threads, and concurrency issues. Know about locks, mutexes, semaphores and monitors, and how they work. Know about deadlock and livelock and how to avoid them. > I don't know anything in this area (besides real basics on processes, threads, and locks). Never had a question here. I wouldn't study unless you are interviewing at team where this is relevant.
○ Know what resources a processes needs, a thread needs, how context switching works, and how it's initiated by the operating system and underlying hardware. ○ Know a little about scheduling. The world is rapidly moving towards multi-core, so know the fundamentals of "modern" concurrency constructs. > Again I don't know anything about OSes. I am not a CS major and never had a question in this area.do
● Data Structure Analysis and Discrete Math: ○ Some interviewers ask basic discrete math questions. This is more prevalent at Google than at other companies because we are surrounded by counting problems, probability problems, and other Discrete Math 101 situations. ○ Spend some time before the interview on the essentials of combinatorics and probability. You should be familiar with n-choose-k problems and their ilk – the more the better. > Also don't think this is that important. You should know how n choose k works (because that is needed for measuring complexity), but I definitely wouldn't spend my time on discrete math.
Did you pass either of those 2 Google interviews? And/or get offers from other similar companies?
> I only had one interview which had a different data structure (rope data structure) and the only reason he asked me the question was because I had never used it before. It was an intro question and if I said I knew it he wouldn't have given it to me. So I think if they give you another data structure, they are gonna assume you don't know it and will give you an intro question.
Can you explain that a little more?
Specifically: “they are gonna assume you don't know it and will give you an intro question.”
To explain, one of the interviewers walked in and asked "have you heard of the rope data structure?"
I said "no" because I hadn't and he was like "great because otherwise I would give you another question". He then asked me to build 2 key functions for the data structure. I didn't need to study it beforehand, and if I did he would have gave me another question.
I think if they give you an uncommon data structure the expectation is that you have prior knowledge of it. This question was the favorite part of my interview loop (we chatted a bit about how google uses rope data structures)
Was this part of the interview challenging? Seems to me like a surprise data structure coming up in an interview could be a bad thing (in terms of doing well).
Edit: What have your other interview experiences been like? Similar to Google, or would different/more preparation be required?
Also, what level are you at/interviewing for at these companies?
In between and before those, I have worked at two startups and three other in-between (in size) organizations, as well as two non-tech giants, over the course of about 27 years now. Kind of takes my breath away seeing that last number!
As others here have noted, no matter where you work, one of the most important things is your manager. I've had good managers and bad managers, and my less happy time at the previous 'FAANG' was largely due to a bad manager.
Having said that, the department/group you're in is also important. I had a great manager at one of the large (but not giant) companies but the department had big problems. It was a relatively comfortable but in the end unproductive couple of years. (And also why I decided to move on relatively quickly.)
Re: skills to brush up on: honestly, I suggest just start interviewing heavily and use that as a template to figure out what you need to learn.
The big tech companies have the luxury of having tons of talented, qualified people trying to work there, and so structure the interviewing process to be biased toward turning away qualified people rather than accepting unqualified people.
That means that the interview process can be pretty strenuous.
Re: trying for management: I was a manager briefly, early on in my career, and decided that I was never going to do that again. I was relatively good at it, but I didn't like it, so all of my roles have been technical, though of course a lot of the best things I've accomplished involved large quantities of 'soft', non-technical people work.
Re: fed up with uncertainty. Yup, I totally get that, and it's the main reason I haven't done more with startups. I value my personal/family time too much, and always have.
Feel free to contact me directly: diederich@gmail.com
Best of luck.
Mostly algorithms and system design interviews. I thought I did pretty well (something like 3 very good interviews, 1 good, and 1 ok). In both cases, the conclusion was that my results were good enough for an L4 position, but they wouldn't hire me for less than L5. (Why not, I'd be happy as an L4...). Also, I found the interview process pretty random and arbitrary. One company praised my algorithmic skills, while the other said that I did very well on system design). They encouraged me to re-apply.
I'm not concerned about the actual job, I don't feel less capable than my 30 year old self. I'm more knowledgeable, and I have more experience with human interactions.
The interviewers all told me that you don't have to be a manager if you don't want to, and that good developers were always valued, regardless of their age. I don't know how much of this is true though. I can't help thinking that my age had played against me in the final decision.
The interview process is a pain. It's very random, it takes a lot of time preparing (some people literally spend months working full time). The things they ask you have very little value besides getting you a job. At least, it's kind of fun to work on these leetcode problems, but after 200 hundred variations of BST and dynamic programming exercices it starts to get old. Also, if you already have a demanding job (and maybe a family), it's hard to find the time to practice.
If you spend enough time preparing AND if you aren't stressed out during the actual interview, I think you can pass with reasonable probability the algorithm interviews. I found system designs a little more random. My question wasn't in the "syllabus" they provided me. Also, as an older programmer, there may be many things that you knew a few years back. You're disadvantaged compared to a younger graduate.
Can you elaborate on this? Were you interviewing specifically for L5 roles? I wonder if years of experience or even achievements can be used against a candidate by raising the bar so to speak. Maybe one is a L5 at their current company but only a L4 elsewhere. As long as you can contribute at whatever level is appropriate for the given company I don't think it should be held against the candidate.
A year later a different recruiter from the same company contacted me again to ask me to re-interview. Then he contacted the recruiter from one year ago to see if I had to retake the initial phone interview, or go directly on site. After discussing with her, he told me that they don't have currently an L5 position open, and that he would be contact me again in a few months (which he didn't).
Just because someone with many years of experience levels lower than typical doesn’t make them a bad person or even a bad hire. But it does make them a more risky candidate to hire (more likely to be "middle of the pack"; less likely to be "undiscovered superstar"), and so some companies choose to pass.
(I’m arguing that this is rational, not that it’s right, fair, or morally sound.)
If you don't have that endless stream, you are more likely choosing between "this candidate" against "no candidate" vs "this candidate" against "the next qualified candidate".
I don't see how this could be legal, even in an employer-friendly a nation as the U.S.
Sure, there are some outlier candidates who enter the field later in life as a second career. But for the overwhelming majority of candidates, "years of experience" is a very thin proxy for "age". I can understand requiring a minimum YOE, but there's no reasonable justification for a maximum.
Failing to have grown skills and project scope to L5 level after extensive time in the industry could be interpreted by some as poor motivation or career growth planning - their thinking is that if you've been doing the same thing for years elsewhere without growing, you'll tend to be trying to do the same things for years there without growing.
An individual might be trying to get into a FAANG in order to get experience with technically complex projects of a certain scope. A lot of roles out here at non tech or smaller firms are just building and maintaining simple CRUD interfaces. The business domain may be complicated but the tech execution is probably not. I thought the algo gauntlet was a equalizer where exceptional coders could clear the bar regardless of education or work history.
From an interview point of view, they're probably looking for examples of that independence and self-motivation (ie, not just doing what someone told you to do), and also the step beyond just writing the code towards more holistic ownership (things like "created a new test harness along the way", "did a survey of developers", "made sure there was a killswitch", "created a rollout strategy", "convinced another engineer to share review and support responsibilities").
The projects I've worked on in my career haven't been considered in the interview process. They just expected better results on their standardized interviews (algo + system design) compared to a more junior candidate. I don't think the question they ask correlate at all with candidate experience, even for the system design part.
But overall, I think it's an imperfect but fair process.
Edit: I've now found levels.fyi - these are Google's internal progression levels.
Unless I'm missing some details, this actually sounds like age discrimination.
Wouldn't it be the same as not hiring a 30-year-old basketball player who is performing at the same level as a 25-year-old player?
It can be, and I've seen it. In general there is an assumption that people who come in at too low a level relative to their experience won't be happy and won't stay, so it's not a good idea to hire them.
Obviously some people are exceptions, but hiring managers will err on the side of caution.
https://leetcode.com/discuss/interview-experience/360829/ama...
I say this because that is personally a cardinal rule of mine, and I've never heard anyone contradict it -- hiring a manager comes with inherent risk, and you significantly add to that risk by hiring someone that hasn't done it before. If you want to try out management, you should first get a job as an individual contributor somewhere and then move into a management job in that company. They will know a lot more about you from having worked with you and you will know a lot more about the team, the company, etc and have a much higher chance of being successful.
This is really a two-way street, you are much more likely to be successful this way as well. The interview process is simply too artificial to get a good read on how someone will do as a manager when they don't have previous experience.
This is my experience too. Companies don't like hiring managers without at least a little experience, and often are resistant to hiring first level managers at all. Instead, they look for "senior IC, but manager material" candidates, and extend an IC offer with a loose expectation of becoming a manager in a year or so. It's not an explicit role you can apply for, but you can target it by applying for an IC role and keeping any leadership and team-focused experience visible on your resume and during your interviews.
As I get older, this is the bucket I tend to get put in during interviews, and then after joining I decide if I want to be a manager this time around.
Thanks.
If you don't have enough engineering manager experience, you can generally join as an IC (with a full IC interview loop) with a view to converting to manager. You may have additional discussions or even interviews around management as well, especially if converting to manager is something you identify as a career goal (as opposed to an option).
Converting to manager from an IC is generally pretty easy if you've shown good aptitude for leadership - the larger companies generally find it a lot easier to hire ICs than good managers externally, so internal conversions are necessary to keep up with demand for quality management attention on teams.
Often, you'll still have a coding (or other technical interview) and a system design interview, and a probably very similar general "people skills/career" type interview that an IC gets. But instead of another one or two technical interviews, you'll have another one or two manager-focused interviews (how to build teams, how to run projects, how to grow individuals, how to navigate a particular scenario).
At Google, the bar is that you are expected to be able to contribute as an equivalently senior IC, but will be expected to use those skills to inform how you do manager stuff.
So you will definitely get technical questions, the type of which will vary slightly depending on which level of management you're interviewing for. But they will be legit technical questions, like solving a graph theory problem or designing a distributed system.
In addition, you'll also get explicit sessions probing you on your leadership style and management fundamentals. Standard behavioral stuff.
Non CS background doesn't seem to matter as much as actual leadership experience afaict. Formal leadership roles seem to be weighted more strongly when considering your level, but you do seem to get some credit for informal roles too. I'm not super sure on this point.
I think it'd be hard to go directly as an external IC to a manager role. That's not a risk I'd personally want to take if I were the hiring manager in that situation.
If it helps you calibrate, I had about 6 years experience as a line manager at other companies, and I was considered for (and hired as) a line manager. I was never being considered as a 2nd level manager of managers.
hth.
Also is the technical bar lower? And do they care at all about having done business school?
"Tell me about a time you had to resolve conflict between two engineers on your team."
And then a bunch of follow-up questions. "What went well/poorly about that", "what would you do differently next time", etc.
This is why I think it'd be hard to go directly from an IC role to a manager as an external hire.
FWIW, I think that hesitation would apply at any company, not just Google. In my last company, I myself was in charge of hiring other engineering managers, and I can tell you that I didn't even consider any resumes unless they called out some sort of lead role.
If they were an actual manager, i could skip directly to the behavioral questions. If they were a tech or project lead of some sort, I did a lot more probing on the exact scope on how much they dealt with people, what they were and were not responsible for, etc. before even getting into the behavioral stuff.
Managers are hugely influential in any org and hiring is an inherently risky activity. You want to minimize risk, not increase it by hiring someone who's never done the actual job before.
Back to Google, I'm not sure the technical bar is lower at all. I got literally the same questions that any senior IC would get, just fewer of them in order to have time for the manager sessions.
No idea whether recruiters care about business school. From my own personal observation, b-school can prepare you to do some analytical stuff, like cash flow analysis or broaden your knowledge base by reading M&A case studies, but nothing in there prepares you to be in charge of running a team with actual humans on it.
If an inexperienced manager is hired by the tech company, the blame falls on the tech company's hiring practices when things don't work out, not the applicant. People will always want a big raise or promotion.
My suggestion for someone with a lot of experience is to focus more on networking your way in to the company than on skills brush up. Find contacts at the company(s) you are interested in and try to set up direct meetings (in person, video conference) to find out more about positions, responsibilities, etc. at that particular company. Each company has their own unique philosophies and growth paths for individual contributors vs. eng. managers, so I don't know that there would be one generic piece of advice to follow.
Feel free to reach out to me at <username> @ gmail if you would like to talk more specifics.
But if I go full-time manager, I don't know how easy it would be to flip back to dev / IC.
My dev friends over the last 10+ years have included people who made a management/dev track career decision and anecdotally speaking, those who chose management have earned more and seemed to have more employment stability. In a couple of cases, I have friends in my personal network earning 3X a senior dev salary managing dev teams.
Personally, I decided to stick with the dev track and have been somewhat dismayed to find (after 10+years with one employer) that I am often pulled into decision/management-type situations but am consistently evaluated as a lower-level employee because "coder." It's even more annoying when I chat with my peer group who made the mgmt track choice and I find that the overlap between what I do and they do is actually very large.
I think this is highly relevant. Traditional companies have a historically inherited structure where the talents to 'do things' are relatively easy to come by, allowing management to accrue larger influences and hence compensation with the organization. The practice has a lot of momentum as you would hire the same managers even for a software business, they'd come from one of these places.
The growth of FAANG and other new tech companies threatens to end this by driving up the scarcity of engineering talents, while creating an entirely new management class that used to be engineers. While they do make more than most engineers in those companies, they take on highly technical decisions that management in traditional industry mostly refrain (drive & initiate vs select from n things).
One of the biggest pitfalls of ICs regardless of age (but I see it more as some get older) is the inability to break free from the past. If you cant learn, or refuse to accept, anything new have no use for you. Tech is changing constantly and if you can't tout something you are looking forward to and just constantly looking back on that one project you did and using that same method/tool/tech it really makes it difficult to envision.
There are IC roles that are "lead" but not management which our company calls "Principal" consultants - that seems to be the latest term in the industry that everyone is going with to denote someone at a high level of expertise who contributes at somewhat of a manager level but not necessarily of people just of projects but is still more of an IC than a project manager.
I lasted 3 years and then got the urge to go chase my own thing again (ML/robotics consultancy), but most my friends (well into their 50’s) are still there.
Go for it.
Anyway, after my timeout I got back into contracting. First of all, I've never encountered ageism and my experience was always appreciated. It could be to do with my attitude, or maybe ageism is not a thing in the UK as it is elsewhere. I think attitude helps and if you come across as a friendly experienced person you will be able to get in.
My question to you would be why go for the "Larger" tech companies? Why not focus on established smaller companies? I personally equate those with start-up level stress but less ability to affect things. Again, just my personal perspective. Second point - do try contracting. It's quite liberating not being tied to a place in a long term mental-bond. The market is great for contracts (at least in the UK).
Curious though, to hear your thoughts on the incoming off-payroll legislation and how you feel it will effect the UK contracting market.
Another friend told me his current client wants them all inside IR-35 which means a mass contractor exodus. He also told me banks are cutting the contractors as well. The problem for banks is that a LOT of their tech staff are contractors at high rates.
To be perfectly honest, I'm concerned to a degree. Both for contractors like me, and to clients who rely on contractors - come April, if this is not retracted, there will be a mass shortage of hands. Being inside IR-35 is like being PAYE without benefits and PAYE pay is significantly lower than contract one. This is quite a problematic situation.
I am an IC so I make sure my code is top notch, which means I need to LC for weeks before I'm ready for the onsites.
Reading some of comments in this thread made me realize that many people don't figure out what they want to do, even until 40's, so I feel better that I am not alone in this. I thank you all for sharing your perspectives with career. I will bookmark this page and read this whenever I feel lost with direction of my career.
I have seen some people make the transition smoothly... others not so much.
edit: I'm in Denver, and here senior leader positions are not too common.
You have an interesting background, would love to learn more about your career trajectory. Do you have a blog where you write more that you don't mind sharing? Feel free to email a link if you're up to it. (email in bio)
Thanks!
Tech companies really care about your tech skills (assuming that you do not want to go to the manage route), so age should not be an issue. However, skills might be an issue. I.e. if you spent your career in companies that use tech, you might not have deep specialization.
Companies that use tech, are easier, which tends to bring less experienced developers, which usually are younger and might create ageism.
The age thing wasn’t a problem for me interviewing for an engineering position. However, I had some difficult engineering interviews with senior and principal engineers. You should prepare hard to interview very well. The hardest part is convincing young senior engineers that you’re as good of a develop as they are or better.
> I am a bit fed up with the stress and uncertainty of startups and looking for something more stable, at least for a while.
I think you have answered your own question there for the most part, and I don't think its too much to ask for a bit of stability.
Personally, I would advise you take some time to think about what areas & roles you enjoyed the most, as you're looking for something possibly long term, don't make it difficult `WORK`, instead make it something you enjoy.
Then you can dedicate your time looking for the projects/companies you really are excited about.
Sounds like a dream, but theres no reason why you can't suit yourself!
Best of luck!
PS: I don't think you should worry about your age, if thats why it was in the title; but if you're like me, over time I lose patience with people who wonthave a genuine discussion & be open to being wrong. But this is a maturity thing that you can asses at interview time I guess.
> I can still keep up coding
This sounds like you are not confident of your skills. At 43, with 20-ish YOE, if you want to become a SWE IC at FAANG you better be good, and know it.
> but should I do that, or try for management?
no offense, but you sound like an 18 yo.
In all this time at startups, how is it you haven't learned how to make decisions? Sorry if I am being harsh, consider it tough love. :)
You might just be coming off in writing as being indecisive and lack confidence, whereas in real life you are solid. Or you might have the humility that only true seniority brings. I can't tell from here.
Either way, I don't think this is a question with easy answers that you can get from a forum. You need to do some soul searching. I would first settle the question of whether or not you want to go into management, not whether or not you think FAANG will have you as an IC. There are plenty of books on becoming a manager. Almost all of them suck, but that doesn't matter. You'll get some initial perspective from reading 1 or 2 of them.
Assuming you do want to switch tracks to management, I don't know at all how FAANG is at hiring no-experience managers at age 43. Personally, I like to be prepared so my personal plan in that case would be to get a manager job at a startup -- it should be super easy for you. Do that for 2 years max. Quit no matter what after that. (You need to make that your plan and stick to it.) If you like it, apply to FAANG! Note though that being a manager at FAANG is completely different than being one at a startup. But what you're going for is the resume builder as well as the experience of having direct reports. Ideally you'd get a job where you have firing authority. Not that you want to exercise that, but it changes things.
Now if you search within and read a couple books and decide IC is what you love, take a month to bone up on core algorithms and then go for it.
It's a trade-off though, by choice I'd be programming most of the time.
Also, you may already know this, but big companies have their own problems. Unlike at smaller companies, these are deep structural or cultural issues you will not be solve. Instead, you have to learn to make the best of it and not let it get to you.
If you're 43, you should know what you want to do. If you want to code, go for a senior/principal programming lead position. If you want to manage, go for a managerial position. You're asking a question a 20 yr old should be asking which makes me extremely worried what the future has in store for me. I hope that when I turn 40 in 2029, I could still do what I love (which happens to be in programming), and not have to fret if I need to change professions or not...this is the way.
*Edit, I hope I don't sound like a jerk, but this is really what I feel. I hope when millennials like me start to hit 40, we can change the tech industry's age distribution and we no longer have to worry about problems like this.
I'm reminded of this quote by Baz Luhrmann:
> The most interesting people I know didn’t know at 22 what they wanted to do with their lives, some of the most interesting 40 year olds I know still don’t.
Incidentally, I'm in the same boat as the OP. I've done coding, I've done the management gig, not sure what life has for me in store in the next 5-10 years.
"At age 20 if you're not doing bad you fell good. At age 50 if you're not doing well you feel bad."
I find that to be true, causes you to question a lot of what you've done in your past, and what you're doing in your future with the limited time you have left.
You are saying that OP's question makes you afraid. This has nothing to do with OP but everything to do with you. Go chart your own waters.
I just clocked in 30 and post like OP's make me rethink the position I've held up until now which is I have until I am 40 in tech. I love what I do and if there is a way for me to do for more than 10 years then Great!
LOL no. I'm 43. And I change my plan more now as I get older. Probably as I am less scared to change and no longer live paycheck-to-paycheck. The kids act like a small anchor to prevent me from going backpacking for a year but otherwise feel free to change my mind all the time.
Granted I have some friends/ex-colleagues at my age who knew what they would be doing until they retire. But they knew that when they joined some medium-to-big corp at 25-30 and never left.
But I also have more and more people my age (35-45) who change radically what they do as perhaps it is a midlife crisis or just realised they can afford to change now or need to before it is too late. I am not sure it ever is too late.
True, 25-years-old-me thought 35+ me would be a settled dad in a big corp and go fishing each weekend. And it turned out 36-years-old-me old left big corp to oscillate between startups and contracting and hacking each weekend instead.
In a word, no.
You can change what you want to do at any age. At 29, I chose to put academia behind me to "go industrial". At 37 I started my own company. At 51, I joined another company. And again at 53.
You might have a general idea of what you want to do at some age, or something very specific. A particular itch you wish to scratch (see my 37 year old self wanting to prove that I could do "it" better than some of my predecessors).
Today, my 54 year old self wants to continue to enjoy working with very smart people, on hard projects, making material impacts upon top line and bottom lines of larger companies. In a real sense, my employer, those who actually pay my wages, changed 6 days ago.
In all these transitions, I've altered what I did, what I wanted to focus upon.
You shouldn't be scared of being old. Age is, for the most part, only a number. It is not relevant, unless you wish it to be. Or deal with some idiotic companies that think it is important.
You retire when you want. A friend 10 years my junior retired 2 years ago. He's bored silly now, but still, you can choose what to do, when you want to do it, modulo physical/health issues. For me, I think I realized I couldn't keep going at the powerlifter rate in the gym after I hit 53. I had to leave weights for the younguns to lift :D
https://code.dblock.org/2019/11/17/the-pros-and-cons-of-goin...
I would recommend it.
you need to disclose what was your role in these startups.
if you want to go back to coding at FANG there would be less ageism but it will still be there. Be sure to brush up your algo, data structure. I would suggest finishing a book of programming interview and you should be set.
I don't like this assumption: Some of the older engineers & architects I know are incredibly more adept at developing than management, and speaking with a lot of them, most are pushed into management roles instead of desiring them.
Big picture infrastructure
Big picture domain knowledge
Big picture risk management
Big picture release management
Big picture languages
Big picture frameworks
Big picture architecture
Big picture maintainability
Big picture knowledge sharing
Big picture build infrastructure
Big picture etc
If you have a GOOD senior, you will safe a lot of time on bs, and will make your junior devs shine like rockstars.
Consulting is nice because projects/customers come and go so every few months you're on to something different. Of course, consulting has down sides too but i seem to have a knack for it.
At least in the initial stages it seems FAANG companies at least are very good at ignoring age for applicants, later stages though are tougher when most people interviewing you are half your age.
HN can't answer this for you. Which do you prefer?
Really love coding, really hate management: Apply for IC. Tolerate/enjoy management: Apply for management.
That said, you should do what you want, especially if you have your nut already. Look for an outfit that really needs someone and is willing to look past age (or even sees it as an advantage).
42 at MS
If it is management, go for it.
If it is coding, be open about your expectations and go with a company that values your experience while accepting that you're there 9 to 5.
Those are the things I try to determine when I interview someone.
You mention "trying" for management. If you haven't previously managed people, then you probably won't be able to get a good SDM role directly. Instead, your best path would be to be hired as an SDE, demonstrate strong managerial bones (mentorship, communication, process orientation), and then transition to SDM after a few years.
If you've mostly been an engineer, then you may want to learn more about what's expected from different levels of engineer so you can determine, realistically, where your experience will be sufficient, and where there will be gap.
This is very true. No company I’ve interviewed with so far was willing to hire a manager who hasn’t previously managed people.
> Instead, your best path would be to be hired as an SDE, demonstrate strong managerial bones
I’ve tried this strategy a number of times and I wish it was that straightforward. Usually, even internal management roles are set aside for people who have already managed people before. So, you’ll take the time to be an outstanding IC, develop credibility with the team and good communication skills, focus on process building... then finally the workload grows to the point where you need more than yourself and you think “now is my chance!” You go to your manager and propose to hire a few people under you and SURPRISE he already hired an experienced manager who will have three reports including you! Bummer!
I'm currently at a FAANG and it is that straightforward. You don't just say, "hey, I should have people under me" but you do say that you're interested in managing folks some day. The company even offers a specific development track and training for people that want to do that.
That's also how I got into management at a non-FAANG company. I was hired as an IC, but indicated that my desire was to be a manager. I eventually became a VP.
Obviously every place is different, but you do need to make your desires known.
>What's the bar for being hired as a FAANG engineering manager?
In my past cycle I interviewed at, and received offers from two of the FAANGs. Past Engineering management experience was required and experience managing other managers was definitely a big plus. I think it's that latter bit that really makes a candidate very attractive since there seems to be high demand. A history of strong IC experience and technical leadership was also required.
I didn't have FAANG experience, but did have significant startup experience and a clear career progression, culminating in a few years at larger (>10k people) companies. One benefit of startup work is that the majority of my past experience is being the primary architect & owner of complicated production codebases and systems. The larger companies provided an opportunity to show how I was effective working cross functionally and getting things done in orgs where I was not in the chain of command.
So, tl;dr: is that strong IC background plus a few years of management are required, but specific types of experience can make you more attractive.
FWIW I've been both an IC before and have steadily moved to CTO at my current startup. I come from a non traditional background (non CS) but had several leadership roles there.
It's okay to be disrespectful. It's not okay to preface that disrespect with an overtly false disclaimer.
Perceiving my comment to be disrespectful, I think, is a part of the larger societal problem that exists today; namely, of people being overly-sensative.
Friend, I will gently invite you to toughen up.
You can define "disrespect" however you wish. It matters little to the recipient who undoubtedly feels slighted at the "arrogant" characterization.
I can only say this man. Your comment history on HN worries me. It's very, very negative, and hear me out. I'm not putting you down, but when there is anger or bitterness in one's heart that hasn't been dealt with, it's easy to only see, or even create, negativity in life.
I don't want to argue with you. Just know that you can make a decision to root for others, uplift people with your comments on HN, and sometimes just totally pass up opportunities to argue and move on to a positive comment.
Jumping from argument to argument on HN will only create anger and hate in your heart.
I could be totally wrong. This is just my opinion. Regardless, I wish you the best man.
You did it again. Please, it's okay to put people down.
The remaining questions regarding coding vs. management or what skills to 'brush up on' are very person-dependent beyond general platitudes. Sure, discussions can be had, but it kind of depends on what he wants.