The author notes:<p>> One caveat: my experience comes mainly from working on infrastructure and developer tools at large companies, on teams where engineers have a lot of bottom-up autonomy to influence their roadmaps. In a more top-down environment, there may simply be less room to work this way.<p>I wonder if the overall trend in tech is that engineers are experiencing less bottom-up autonomy and more top-down controlled environments. I would be curious to see how many tech companies (or the average engineer's experience) have changed from being tech led where engineers have autonomy to being more product management led. My suspicion without evidence is that the overall engineering autonomy has decreased over the years as the culture of tech has (in my opinion) shifted away from tech focus to more business, management, product focus with engineers just as the widgets who are tasked with fulfilling the goals of business, management, product.<p>all hypothesis, only anecdata
This sounds about right. At least I feel it acutely in my career. And the more experienced I got instead of more autonomy it has decreased. So to me it seems autonomy is decreasing at a rather fast clip.<p>Even outside projects and general work condition it is worse. 10 years back I could just decide when to work from home, or do a few interesting projects show to managers get approval afterwards. Today I have to explain myself to managers and get proper approvals for same thing. And I have been in same place for quite some time so it is not even the case that I have to prove to my new employers first.<p>Being not much ambitious I use to think after these many years and multiple successful project my win is to be a kind of made guy in that same mid-level position. Supporting , fixing project which I delivered over years and just take it easy, start day late, leave early until retirement.<p>Turns out things I assumed, don't exist. And even if they do they are above my level. Not worked in big tech, no massive RSU based compensation and with AI flattening difference (in employer's view ) between 2 vs 20 years of experience, story is not going to end great for people like me.
>And I have been in same place for quite some time so it is not even the case that I have to prove to my new employers first.<p>Any individual company is likely to atrophy because continual success breeds fear of change, fear of breaking what's already working. Especially if management rotates and new management didn't actually create the success in the first place.
> Especially if management rotates and new management didn't actually create the success in the first place.<p>Critical point, and absolutely true in my case. With change in management all past successful projects are "failures" now. Instead of using x, y, z projects uses a, b, c so leadership is kind to dismiss me with prejudice.
How will you get bonus if you don't do anything different?<p>How will you do anything different if you don't ignore/brush-aside past successes and focus on replacing them with new things?<p>How will you replace them without funding i.e. more budget, more power?<p>How will you keep moving up if you don't repeat this cycle?
>Supporting , fixing project which I delivered over years and just take it easy, start day late, leave early until retirement.<p>My experience has been you'll be regularly moved around to mitigate the "bus factor"<p>If you're seen as highy capable you'll be moved on to firefighting duty.
One should distinguish between high-stakes vs low-stakes firefighting duties. The former could fast-track one's career, but the latter is a guarantee for stagnation.
Yep, and if this happens you need to get promoted quickly out of that or you’ll get stuck at it. It’s great fun, and you’ll learn about every project your company has going on by doing it.
The higher the position the less leeway you have because you are working on bigger problems with more experienced people who want to do things their way.<p>It makes sense the higher up you go the more demanding the boss because their boss is more demanding.
I think this is very true. I've seen it. It's the same in the design field too.<p>And it's because the tech industry has matured. Best practices are clearer, and there is proportionally less work happening "at the forefront", so to speak.<p>Most tech work is, at its core, stuff like building CRUD wrappers around a database. But we know a lot more about how to do those things now than we did 25 years ago. Our tech stacks are mature. There are extraordinarily well established patterns, and so much prior art.<p>This means that business folks have a stronger intuition of what's possible than before -- and that makes top-down direction much more likely. The innovation is commonly in the business strategy, not the tech itself.<p>(I'm not saying there aren't hard problems to solve, or there isn't exciting greenfield stuff happening -- there absolutely is, especially with LLMs -- it's just that the majority of tech work today exists to unblock a business goal)
Without providing too much detail, at my current place of employment I find that to be the case.<p>In most of my career, especially when in a Staff role, it has been up to me to propose the direction and priority of work within my scope. Usually, this is based on my estimation of the impact to the business (possible new features, security) or operations (devx, efficiency $$$). Obviously I still have to work with product to get things scheduled as they have needs that must be met, but it was as an equal partner. As a very creative person thats usually the space I enjoy the most.
I agree with this and think that when your company isn't profitable and is running out of runway (due to the end of the zirp) and can't get more, moving toward features that more directly <i>could</i> land sales is a natural top-down move (and totally correct in the abstract).<p>However I still see a lot of "work theater" where directors couldn't care at all about changing the bottom line but just care that work that sounds plausible enough is executed in a predictable way that makes them look good (in fact they get pretty disappointed if something happens TOO fast [like half the estimate] as it illustrates they are out of touch the work they are claiming to represent). What I'm saying is that "do more top-down-product" in theory makes sense as a direction, but in practice I usually see it as wasted energy.
I've certainly seen that shift in some places. 8 years ago I started on a project as a freelance software engineer, to build something they couldn't really envision yet. I had a ton of freedom, built a prototype, chose my own tech stack, designed every part of it. A team was built around it, and I migrated to a leadership role where I decided the direction, addressed issues I saw, redesigned parts that needed improvement. We had an enormous amount of freedom, and used it to build great things fast.<p>A bit over a year ago, I joined that same company again, as lead of what's technically the same team, this time as an employee, but everything had changed. It was very hierarchical, very top-down, very little freedom, lots of red tape and office politics, and a tedious, slow pace.
I'm sort of in this area, and I'm fighting the same struggles because I desire "productivity", not autonomy.<p>I asked my manager if I should be creating tickets for the work I'm coming up with, and he answered a question I didn't ask, saying he doesn't count sprint points. So I clarified, shouldn't I at least be creating tickets so that we're accounting for it in our sprint planning? And he didn't seem to care.<p>IMO, it's a 180 degree shift to go from trying to accomplish assigned work to creating new work and accomplishing (or delegating) it / adding it to roadmaps / etc. To me, it wasn't at all obvious that this was what I should be doing, so it was strange to sort of stumble upon it when asking an adjacent question.<p>It would have been very useful to get an explicit instruction such as "hey, only spend 1/4 of your time on planned work" or similar.<p>I'm sure there are plenty of people out there who spent their entire career trying to avoid doing assigned work so it's an easier transition, but for rule followers it's a weird change.
I always include sprint points or at least some metrics to track, because even in areas that don't care about it, there is some chance a new CTO/manager/buyout or whatever jumps in. Day 1 asks for metrics and then retroactively judges people's output on it.<p>I've annoyed my team previously in demanding jiras and sprint points (and helping build it out as much as I could to not take too much of their time) because I could feel the turn happening to metrics.<p>Sure enough the only person in my team let go was because he outright refused to fill in his JIRAs and I could not get through to him the difference in what is logical and what plays well to management when they lose their minds.<p>Bit of a tangent, but even in the work you're describing, I treat sprint points and JIRAs as future CYA, not necessarily a work sheet.
In my experience (35+ years), it is the opposite now. It used to be massively top down, and now it is more and more bottom up, at least with the companies I have experience with.
> I wonder if the overall trend in tech is that engineers are experiencing less bottom-up autonomy and more top-down controlled environments<p>I've thought a little about this.
First: I don't believe that you can have bottom-up autonomy, without taking clear responsibility over outcomes.<p>Previously the main bottleneck in engineering orgs has been figuring out scaling and reliability. So you could own the outcome of "99.99%" and everyone was happy.
But I think the bottlenecks in the orgs have changed. Partly due to increased productivity, and lower barriers to solve previously hard problems (thanks to good old AI), and partly due to shift in focus from maintenance of a product, to feeling forced to think about "which AI-native company/product will eat us next quarter".
Some of this shift is towards product. Like... what does a great product in market x look like given the condition that we now have cheap and good AI models? Should it be different?
These aren't engineering questions... unless you want to dip your toes in the business/management/product side of things (which I 100% think engineers should do!).
But it requires you to go from owning the 99.99% outcome to owning "how do we create a product with y user retention curve and k number of users".
You can get to be a staff level engineer doing that. However, beware that to really make it up the corporate ladder, you actually have to reject that. Note that I didn't say reject doing the things assigned. I mean reject it as in you figure out the things that they should be assigning and get those done instead.<p>There are lots of different routes via staff and above level engineer. However, what they do have in common is working on really hard problems that take a lot of other people to work with. You will typically find your staff and higher level engineers rarely are actually writing code themselves. They are all management, but it's a technical management part.<p>The thing is, it's really hard to be there because management will constantly assign you various product-focused things and you end up being a widget. And so you have to figure out how to break out of that to say, no, this is the wrong widget and you have to show them that, look, I delivered this widget and when they see it, they should realize, wait, this guy was right. I assigned the wrong widget and he did it and so I need to trust this guy and give him more time to do things that give us the right widget.<p>Remember, the real goal is to make money for the company. As an engineer, you might say your salary is, say, $200,000 a year. But that is only a small part of it. For every dollar they spend on you, they need to spend $10 on other things to make it work. To pay your salary, you need to make not just enough product to bring enough to pay for your salary. You also have to pay for marketing, sales, product support, other managers, HR, and a bunch of other things I can't even think of off the top of my head. So the real question you should be asking is how do I earn, by actions I do, more than $2 million a year for my company. If you're earning your company $2 million a year as an engineer, they're breaking even on you at best, you should do widgets they trust will work. If they are earning $10 million, that's something that you should be putting on your resume and saying, look, this is why you need to give me a promotion. I am earning this $10 million every year. If you want to do even better than that, make it not $10 million that you're personally doing, but things that, because you're assigning other people to do them, are earning hundreds of millions. If you can earn the company hundreds of millions of dollars a year, you can justify a large salary for yourself, and you keep dozens of other engineers busy doing things.<p>Or you can take the lazy way out and just be a widget producing what they need you to do. That's good enough.
(author here) I really like your framing here! I think it captures the essence of my thinking in a really concise and coherent way.
Hard to feel motivated either way when both roads seem to ultimately lead to layoffs, regardless of performance. If you can even get to staff/principal level to begin with. That's more a matter of when you were born these days instead of what you know.
I think this is largely true. Theoretically it follows that mature industries would become this way more and more.<p>In my software engineering jobs there was always strong top down product direction. In my AI research jobs people are often staring at me blankly waiting for me to tell them what we can do.<p>A young industry the only people who really understand the potential of what the technology <i>can</i> do are the experts and practioners.<p>Overtime all the best ideas get picked off, and the general population who are non practitioners gain enough knowledge that they can understand what the technology can do better than the experts how can impliment it.
I've had about the same level over the years. Early on, before I had a nest egg, I had little real autonomy, despite outward protestations top-down asking for risks and ideas. Afterward, maximizing average outcomes rather than worst-case risk, I've had a ton of career success either proposing and executing good ideas or else just ignoring the product roadmap when necessary to make the company better. I encourage my team to do the same (ideally they have to resort to subterfuge less than I did since I highly value bottom-up input, but either way is fine). It's, again, risky, but if you consistently deliver above expectations then in many environments you'll get more promotions and raises than you know what to do with, despite the lack of predictability.<p>Lately, product and my boss have been on board, so it's been fantastic to actually have partners to discuss these "risky" ideas with and better fit them into the roadmap rather than guarantee things which would get us all promoted will be shot down instead. I personally have more bottom-up autonomy than I think I've ever had at $WORK.<p>That's only anecdata. Another aspect of that tech microcosm is that at various points I explicitly did not have permission to do the right thing and had to be careful with the politics. It only worked out because I was right and because I was okay with the consequences if I had been wrong. Maybe that means I had low autonomy in your definition?
I've spent ~20 years working either as a contract worker and in more recent years, full time work.<p>Every company I did substantial work for was bottom up from the perspective of my role, which is also related to infrastructure and developer tools / workflows.<p>Basically I'd work alongside the dev team and report to the CTO, VP of engineering or engineering manager depending on company size. Nothing really needed sign off beyond my manager and even then in most cases I was left to self-regulate 95% of it. That style makes a lot of sense for this type of role, it's much different than writing app code with feature requests coming from a product team.<p>Every substantial line of work was directly related to reducing friction, pain or instability as well as saving time. These could be workflows or technical implementations. Also a lot of times it is bringing order from chaos. These could be things that directly affected me or the dev team. Internally I treat the dev team as both peers and customers.
Most of my career has been spent in JavaScript and then MuleSoft. I have only ever seen top-down authority in about 20 years of doing this, except for when I was at Travelocity early in my career.<p>The general perception is that JavaScript work in the corporate world is for young people who have no idea what they are doing and lack the maturity to write original solutions. This perception is common from developers who do other work, management, and developers who primarily perform JavaScript work. If I want to be creative or have autonomy to do anything more ambitious than putting text to screen I have to save it for personal side projects or do unrelated work.<p>MuleSoft work was just more of the same with all decisions funneled to strict silos of a select few and everybody else was just a keyboard pressing stooge.<p>Yes, that does sound dreadful, but what's worse is that it amplifies the personalities of people who will throw others under the bus for attention and potential rock stars who perform their most diligent work at hiding from that attention.
All anecdata here too but I agree. I’ve been in the industry long enough to remember when companies weren’t _all_ tech and us tech folks were considered specialists with a niche who charted their own course.<p>These days tech is indispensable to most businesses so top down control has been asserted.
Its a good thing that the Author pointed out the caveat cause most companies/teams/people do not operate in this mode. Subtle in the details is a fact hidden that the author is able to manage what he wants to do, most people do not get that kind of luxury. This either means that the author has earned enough political reputation based on past work or they are aligned with their management chain.<p>tldr; this advice is probably impractical for a bigger chunk of industry.
This is my current world, at least. Bit of a shame. But they pay me well enough still and the work is interesting enough that I don’t mind too much.
Every step up in my career has, ironically, lead to less autonomy.
It's funny you highlighted the 'one caveat' line. I literally came here to post 'One caveat:' (and nothing else), as claude code seems cli to revel in adding an apparently obligatory 'one caveat' blurb at the end of every response. (viz. <a href="https://www.reddit.com/r/ClaudeCode/comments/1vbsr2m/one_caveat/" rel="nofollow">https://www.reddit.com/r/ClaudeCode/comments/1vbsr2m/one_cav...</a> )<p><pre><code> Struck me that the staff engineer 'finding problems to solve' might be (whether for better or worse) manifesting that same tendency.
</code></pre>
By the way, as Maganti's article has both the 'one caveat' structure and the reference to 'shape' , both being very common claude-isms, I treat the article as gen-AI. May still have something interesting/useful to say, may not, but I'd find the prompt series Maganti desired to employ to elicit producing the article prose more informative than anyything about the prose itself.
I confess that when I work at controlling places, I engage in conspiracies. But I can only pull the subterfuge off for about 3 years and then I have to move on before I get PIPed for making their entire engineering staff more efficient, and then they move the goalposts for 'meets expectations' and don't know exactly what it is I'm doing, but they know they don't like it and now they have some numbers that tell them what they want to hear.<p>Like a woodworker building his own jigs, I always build my own tools whether the company wants them built or not. When I'm in a supportive environment, I work on and share those tools loudly. When I'm not, it's over lunches, behind closed doors, pulled out during emergencies, or just snuck into the CI pipeline without comment.<p>Frankly, the fact that not everyone does this has always been a cultural disconnect for me. The whole point of our field is to take repeatable tasks and write code to replace them. The fact that only about one in six of us does this for the tedious or error-prone parts of our own work is just maddeningly bizarre to me.<p>Nevermind the overly large fraction of people who have to be dragged kicking and screaming into using tools written by others. That number has gotten smaller over the last couple of decades but it started too high and the slope of that line says something awful about the industry. I don't know what, but it's something I'm sure nobody wants to hear, so I haven't poked at that bear too much (I have plenty of other bears to poke.)
I think it was correlated with outsourcing and H1B replacements, because you can’t outsource the leadership required for bottom-up methods.<p>Further, foreign business culture is significantly more too-down than American business culture.
I think the autonomy was stripped not that long ago and it's making software products <i>far</i> worse.<p>It doesnt make sense that this would happen from an economic perspective at first glance - not unless you consider labor (devs), execs and investors to be three competing groups who are vying for power.
I noticed what you describe 5 years ago.<p>Since then, not only have we lost autonomy, but there <i>was no</i> top-down direction to begin with. And there is none now.<p>Nobody knows what the next incentive to chase is, so they're liquidating headcount and engaging in fraud to appear profitable.<p>(re: fraud, I'm learning the hard way why my own employer's stock price dramatically improved-- ever since they switched to stack ranking, they just make shit up to PIP and deny severance ahead of layoffs.)
It depends on company culture, and there's as many of those as there are kinds of people. I've worked at large, medium, and small companies, in many industries, and there's no common pattern. The people in charge set the tone, and the people are all different.<p>If there's a pattern in the people, it's that more people in charge are less capable of doing the job, because they've grown up in a culture of ignorance. The past 10 years has been dominated by "StackOverflow Engineers" promoted to management, and people who read HN clickbait blog posts and believe it's good advice (it's not). They never had the time, training, or mentorship to learn from decades of experience. And Dunning-Kruger keeps them confident that they don't need to change.<p>However, on this point:<p><i>"the overall engineering autonomy has decreased over the years as the culture of tech has (in my opinion) shifted away from tech focus to more business, management, product focus with engineers just as the widgets who are tasked with fulfilling the goals of business, management, product"</i><p>That's exactly what engineers are supposed to do: listen to and enable the business. A mechanical engineer does not dictate the shape of the car. The <i>designer</i> tells the mechanical engineer what the car will look like. It's up to the engineer to make it work. However, it's <i>also</i> up to the engineer to tell the business that you can't fit a 600hp engine in a Mazda Miata without seriously affecting handling. It's supposed to be a two-way street. Good management/leadership knows this and enables it.
> That's exactly what engineers are supposed to do: listen to and enable the business.<p>This may be the case if you're a junior engineer just crunching through individual tickets, but with the lower end of software engineering being automated away where even more junior engineers have to take more product/feature ownership, I don't think "churning widgets" is the right way to think about our job anymore.
this
Funny people should have that problem. I have spent most of my career in the startup space, and my experience has consistently been that the amount of problems to solve is <i>vastly</i> larger than what I can reasonably achieve in my waking hours.<p>So I don't <i>find</i> problems to solve, I try to assess which problems are most urgent, or which solution solves several of them at once. Learning to get that kind of prioritisation right to keep all teams and customers happy and productive is what I'm very proud of in my career.
Exactly. Everywhere I've worked had at least 3-4X more bugs than we had capacity to fix, and the bug count grew over time, net of any fixing happening. There was never difficulty finding problems to solve. Unfortunately most places don't give engineering the <i>autonomy</i> to solve critical issues. It's just feature cram and redesigns, over and over, and let the bugs pile up.
The challenge is finding problems that are “worth” solving as a staff engineer. General “bugs” are not staff worthy. Staff need to convince leadership to fix an architectural problem that removes a whole class of bug.
The amount of pushback I get when I do a refactor to make a certain class of bug never happen again is huge...<p>Fortunately this kind of refactor is a lot easier nowadays with LLMs, but the QA is not improved and often what takes the longest.
If a bugfix has big impact, even if it’s a one-liner fix, it’s still a staff problem
Sometimes the biggest impact you can make is just changing the spelling of T-E-H to T-H-E on a very visible page. Hopefully that's not a staff level problem in your company.<p>I get your point. Staff levl engineers should be working on really hard problems that will make a long-term impact, but they often aren't very visible at any one moment. It's only when you look over long-term and you realize that things have slowly gotten better that you realize the impact. At least I hope they've gotten better. I've made some decisions over the years that I wonder if they really made things better or not. And it's really hard to say since there's no control where you can say, well this is what it would have been a different way.
This has been my experience until the past 6-9 months, when AI got good enough that I can build rails to prevent more bugs while also hammering through critical issues, redesigns, etc.<p>It’s never been better to be a staff+ engineer, where you can knock shit out of the park and tee up your team to do the same all at once
I actually really appreciate the mindset this has given me towards life in general, and I consider it a superpower.<p>I find people get overwhelmed and go deer in the headlights when there is a huge amount of stuff to do.<p>I actually feel relaxed when I say “it’s not possible to do it all. There will always be more jobs than time. The only thing that matters is that we work on the most important things”<p>I also enjoy seeing the things that just perpetually sit at the bottom and never even get close to being looked at. Others stress and think it’s a huge problem. I like to look at them and see that in context, there are much bigger fish to fry, and we’re doing the right thing by frying the bigger ones and ignoring the little ones.
> “… the amount of problems to solve is vastly larger …”<p>Are those problems in your “assigned“ lane?<p>I’m curious if you’re saying something else—that your organization somehow permits, encourages, shares its tasks/problems. Or what % of your job is management?
There are a lot of known problems... but there are also a lot of unknown, or at least unrecognized problems. Some of those unrecognized problems are going to be more useful and higher-leverage than recognized problems. The same "being a sponge" approach still helps.
I think this is more relevant reality. At Staff and Principal you have visibility into a lot of fires going around you. What helps is understanding the relative importance of what fire to douse and be at peace with the ones that you cannot control.
You probably pivoted your career towards the startup space so you found it effortless. For others it is basically a castle with a 20m wall.
I am doing exactly same thing of creating a solution which can be applied to multiple problems at the same time.<p>Sometimes coworkers does not like that because they don't see me working on the problem, but on a tool which will resolve the problem and similar problems from our backlog.
He says: <i>That taught me to let potential problems pile up. Listening the way I do leaves me with far more of them than I could possibly solve, and not all deserve action. Most don’t need to turn into projects the first time I hear about them; waiting can be a superpower.</i>
Yes. He also says: <i>“How do you find problems worth working on?” a senior engineer I mentor asked me recently.</i> My point is that I'm working in a whole different environment, and the challenge - to me - is never <i>finding</i> interesting problems to solve, but identifying the most important problem out of a large pool of known problems.
That still sounds like it chimes with the quote you shared. The question the senior engineer was asking may have been exactly your last sentence. As in, among the “pool of known problems,” how do I find the ones worth working on? “Worth” may not mean “interesting” but “of lasting value”
“Can be a superpower” is so empty. What does that mean outside of trying to proliferate some cliche?
This is not distinct.<p>Even in a big corp there are always problems to solve. The point is to find problems that both:<p>1) are hard enough that someone junior won't be able to solve them alone, and<p>2) actually provide value to the company / users
It’s the same in a large corporate environment. I have a “personal projects” doc of ideas I’ve had to make development experiences better at my current role - it’s a couple hundred lines long.<p>I managed to get a couple of smaller tools out recently thanks to having copilot available to churn on them while I spend my time on prescribed work, but it would consume all of my time to even make a significant dent in it.
This is all very good advice, but I would caution anyone asking the question at the start of the essay that they probably shouldn't be a Staff Eng. Unless you're at a company where that title is simply a rung on the ladder that doesn't have differentiated responsibilities (there are lots of those out there).<p>Every person I've worked with who's been successful as a Staff+ Engineer, promoting them was normally more of a formality since they were already clearly doing the work. Every person I've seen 'rise to their level of incompetence' was striving to get the title/pay bump and looking to 'play the game' to get there.<p>If your motivation for solving people's problems is that it will get you a promotion, instead of the fact that you like solving problems, then it's probably not the right job for you.
I suspect this is partly a function of your organisation.<p>Some places, do not care terribly, about what you _could_ achieve, or they have garbage internal practices which prevent you from doing this work effectively no matter how much you _care_, or maybe they’re just a garbage workplace but you need the job. In these cases, you may as well ruthlessly go-for-the-title, because they’re not going to change, so you may as well get something beneficial while you’re stuck somewhere shitty.<p>Now, if it’s a decent org, which looks after its people, produces a product it cares about, has actual career progression, sure, you can afford to do the work first and earn it properly, but let’s not pretend that’s amazingly common, and attempting to do this, in some places will just get you exploited and burnt out, with no pay or title bump to show for it.
I suspect you might hear a lot of push back on this take, but I for one fully agree. I would go as far as to say that in my workplace, this a nearly inverse relationship between quality of work and how actively that person is thinking about / talking about / acting-as-if-they-are-owed a promotion.
I think almost all of tech is bloated and massive layoffs wouldn’t phase most companies (though it would be harmful to people’s lives so it seems cruel to do this). Fewer people per teams means less context switching and devs own more. They don’t have to look for work, it will be in front of their face. In so many of these big tech companies I’ve worked at I’ve seen too many not having enough work to do. They end up creating meetings and other wasteful things (doc writing) to occupy their time. Managers and directors seem to want big bloated teams, the larger their head count the more they can demand and push for a promo.
Inefficient allocation of work aside (where you end up with people doing nothing, despite I suspect a substantial amount of work in the backlog), I think the mindset of "just reduce devs so there's not so much context switching/they can own more" is short-sighted from a business perspective.<p>Even in projects that could objectively be owned by 1-2 people but are allocated to a 5-10 person team instead, I've encountered cases where velocity gets absolutely obliterated by a sub-domain "owner" dev being on vacation. Now imagine this is not a fairly small sub-domain but half the project, and instead of a vacation your one-of-two dev gets hit by a bus.
Isn't this just true for 90% of professional service industries?
yea this was the case even before ai. fighting for scope is 80% of the job now. Ppl like OP dont really need to "Act like a sponge" and figure out "problems to work on" if there is natural demand for stuff they are building work will present itself.<p>There is also crazy ladder climbing with all these titles and difference in payscale. So ppl like the author are trying to optimize what a role X is supposed to be doing. Everyone is just the same thing everywhere.<p>Everywhere you go its the same ppl, same ladder , same tools same sucking up to boss blah blah. Cant wait to get out of this shit.
I’m in my 4th dev job of the last 12 years and every one of them has been wildly different in terms of structure, culture, tooling, work style, etc.
The part I find challenging in the senior-staff twilight is that having deep technical knowledge means I can solve short term problems, just as requests, fast and effectively.
The author mentions that you should spend time understanding the frustrations from other teams, but that takes up loads of time and I don’t like being the person who talks and talks but doesn’t push code and ship features. I’d love to hear how others have experienced that
Like you, I dislike the "talker" role for people on IC ladders. I often encourage those people to switch to Director+ roles.<p>The flip side is people who get and stay too far into the weeds. Solving little problems here and there is a great way to keep your finger on the pulse of what's actually going on.<p>But if you get totally bogged down in details, you are probably avoiding your leadership responsibilities. You should be observing the structural or strategic opportunities, and then dragging the org(s) in that direction.<p>Sometimes you do that by writing some code to prove a point, other times you do it by getting the nearest VP to take something on as a commitment. For me, personally, I find that the style of work waxes and wanes. Sometimes I get almost no code committed in a month :(. Other times, I get to go off and do some work that nobody else would have done.<p>I <i>prefer</i> the latter, but I respect that my job requires the former. Many of the people who you see spending all their time talking believe that's the most responsible use of their time. They might not personally prefer it!
Once upon a time my grand-grand-boss explained that he had no problem hiring top-notch engineers - pick up the phone, call recruiters for new candidates, connect the incoming stream to the interview pipeline, two months later you get the requested quantity of engineers. OTOH there is no repeatable process to hire someone who will help identify the right problems and drive them to resolution. So if such person is found they will be pushed towards doing things that have no obvious success recipe and away from the things that do.<p>> I don’t like being the person who talks and talks but doesn’t push code and ship features<p>It was fun while it lasted, wasn’t it?
I’ve experienced this. The critical realization for me was that most of those problems which I know I can solve quickly, without even having to write a Jira ticket or groom them into a sprint or whatever, are <i>problems I should let someone else solve</i>.<p>Sure, I can do them faster than others and pretty well. But if they’re truly things I can knock out in a day or two, they’re things that other staff can knock out in a week or two, and learn from the experience, and at that size they likely don’t require the standard of quality that I delude myself that I hold myself to.<p>At the lead/staff level, it’s far better to look for the kind of problems described in TFA: problems that are complex to <i>identify</i>, and for which the appropriate solutions aren’t always the obvious ones. My time is spent much better looking for those than being a 10x-speed senior engineer or whatever. There are actual senior engineers for that; I’m paid for the kind of work that they don’t or can’t do (yet, and to help model and mentor and train them to be able to do it), not to do the kind of work they already can do—whether I would do it faster/better doesn’t matter.<p>It’s case-by-case of course; sometimes a simple issue is critical or obscure enough (or tempting enough to override my iffy-at-best self-discipline) that I’ll jump on it. But I generally try to remember that a lot of the stuff I could look heroic for fixing in a jiffy is probably both not worth my salary allocation in the eyes of my grandboss, not critical time-wise, and a potential learning/accomplishment opportunity for others.
Yep. Look for the problems that aren't going to get solved without you - either because nobody else sees the problem, nobody else is positioned to be the solution, or because your skills uniquely line up. That can't be all you do, but it's the highlight reel.
I think that's a completely natural source of frustration for someone who is used to being able to put hands to keyboard and solve problems quickly, but IMO the higher you climb the ladder, the more you have the opportunity and responsibility to take a longer view and to delegate - which often means that other people are pushing the code.
For non-engineering teams my playbook is:<p>1. Get in all their support or public slack channels, watch for acute moments of freak out or consistent schlep blindness.
2. Meet with the head of the team once a month for 45 mins and get them to list out what just sucks.<p>You can limit chit chat very well this way.<p>You’re only going to be able to do so much so broadly picking the problem that is closest to the business’s immediate pains can be a win. Or maybe that’s already being swarmed on so you knock out a bunch of random stuff and get broad recognition.<p>For technical teams, almost every single thing I ship:<p>1. cements a new pattern or contributes to a new one that my team can use
2. improves cicd speed or checks<p>You can usually knock out the non technical team work and pick off 1 from technical team work along the way<p>Everything I do (except specific bug fixes) force multiplies, otherwise I’m wasting my effort.<p>I don’t feel like I need to talk too much to my teammates about their engineering problems. I’m doing the same work ultimately, so I have a solid understanding of what moves the needle<p>Edit: convincing the organization that your work is important gets much much easier when you have metrics and charts that make the case for time well spent. It could be a buggy ass feature, or a meaty pipeline the business relies on. Prove that it’s hurting the customers and ultimately the bottom line. Battling over and convincing of scope becomes less important when you’re talking in the same language as non technicals
I find that I often tik-tok between organizational work and deep technical work. (I come close to the "solver" archtype on <a href="https://staffeng.com/guides/staff-archetypes/" rel="nofollow">https://staffeng.com/guides/staff-archetypes/</a>). There are weeks-months when I am not writing a ton of code. I'm still doing technical work, but it's architectural documentation, experimentation, or discussion where my contributions aren't directly visible in commits. Then there are weeks where I ship dozens of PRs.<p>I'm often thinking about 1-2 immediate term problems (what am I coding on <i>now</i>), 5+ medium term problems (what am I planning to work on next or moving such that someone else can work on it), and then a handful of long-term problems ("this is currently intractable, how do I convince leadership/this other team/etc. to make it possible for someone to actually address the technical problem I care about").
I worked at the Staff level for a while, I think the key is to report to a director who manages managers. Every time I did I had a good time, projects were easy to define and people were easy to convince. I had the same level with a few managers who were managing other ICs, and that never worked. Other ICs try to compete on tasks, people don't come to you with their needs, you learn about different projects often too late, other teams are territorial and don't really want you to intervene.
I wish our most senior staff eng/architects actually worked on stuff that is useful. They love playing around with new technology that has nothing to do with our current platform or where we're going. Sometimes they'll try to fix some thing the last architect started on before they too move on to another job.
It's interesting how engineer/developer levels are so meaningless across organizations. Where I am, somebody who can only do the work assigned to them isn't senior. That's borderline entry level. Doesn't mean they're a bad programmer or only have 3 hours of experience, just isn't at the higher level. Seems where this person works (Google?) that threshold is at staff
"Do the work assigned to them" has multiple levels of abstraction. You could say it's the task level which would be entry level. You could say it's the project level which would be mid level. You could say it's the a service or domain which would be senior. Staff should be tackling org wide and cross-team issues. The amount of scope and clarity needed for a "problem" changes and gets larger in expectation and more terse in explanation the further you go.
It depends on what you mean. There's lots of ways of looking at this, but I'd think of "entry level" as someone who is assigned individual tasks, and maybe needs help or oversight on completing them. Someone senior is assigned a project, or even a <i>problem</i> (and certainly has input on which projects they work on), and can handle the entire process of investigating, proposing, designing, and implementing the solution to that problem, which may involve oversight or tracking of other people.<p>Staff+ is additionally directly influencing which projects the org is prioritizing.
Not a staff engineer, but this sounds very much like what I do and then am not allowed to follow up on. One particular company where I've been several times as senior or lead developer, I just keep stumbling over problems I would love to take on. I'd love to be a staff engineer there with the freedom to take on these sort of problems, but that's apparently just not how they work.
I advise people to seek out small companies, ideally ones going through product/market fit. Like, they recently came up with something to sell and have begun selling it. Resource-constrained, good growth, not super explosive. You can find one (including mine!). In this environment you will quickly learn how to do more with less, identify the real problems, deliver quickly, work directly with customers, learn the domain (not just tech), and how to build good products. After this, go ahead and work for a big company if you want and you'll be amazed how well you do.
I understand the approach to wait until the same pattern shows up across multiple different problem domains, to build a good solution for all of them.<p>But sometimes it's a chicken-and-egg problem.<p>Teams most often don't have the patience to wait for your proper solution. If you don't have a ready solution to easily address their problem, they just build their own work-arounds, or give up the task if it's too hard. And those teams all have their own priorities to tackle on their plate for the quarter, so even if you eventually build a proper solution later, it's unlikely they'd migrate to your solution or restart their task.<p>So even if you have accumulated a lot of old use cases, when you build a proper solution you'd need new use cases to justify your effort, the ones where the owner teams are willing to build along with the iterations of your solution. That kind of new use cases may or may not come up when you have the bandwidth and resource to actually do this. And if you miss one opportunity, the constant shifts of organization priorities would likely mean there would not be another chance for you to do it. The end result is, every team either builds their workarounds, or just give up if it's too hard, without a proper solution.
I have tried this approach of finding problems and solved them.<p>I have done a massive code cleanup, abstracting out huge code that made it extremely readable and maintainable etc but such problems are never a problem to the upper management. For them these are red flags and a pain that they fear will cause regression and extra efforts to every other team.<p>So it entirely depends on the area that you solve the problem.<p>Also, it depends on the organization that you are working with. Especially the WITCH one's rarely care for code quality.
Question from a "Staff+" engineering/product IC/leader in startup-like companies...<p>> <i>[...] demonstrate their value by solving the hardest assigned problems. That can absolutely lead to promotion. But the projects that have made the biggest impression in my career were the ones where I found and solved an important problem my leaders did not yet realize existed.</i><p>This is framed in big-corporate worker motivation terms: being valued by the company, getting promotions, boosting career.<p>Is it generally possible to operate in big-corporate environments <i>focused only actual success of the company and customers</i>, and have all your needs (money, status, security, etc.) taken care of, without needing to think about them?<p>Or is playing to big-corporate reward mechanisms -- such as hitting known metrics, getting on high-profile projects, doing role performances, and getting credit with the right people -- the closest that you'll get to alignment and contributing positively?
It’s a cop out, but depends on the company and it’s somewhere in between. Even with <i>success-of-the-company</i> as your compass, other stuff always matters. Good work done invisibly can’t be rewarded. Working on the lowest-profile projects is often interchangeable with working on the least important projects to the company. And if you are building credit with the wrong people, maybe you aren’t working on the right problems.<p>There’s obviously the dysfunctional form of all this, but it’s also rare that there’s one simple and obvious <i>“do this thing and it’s best for the company and everyone will automatically understand what you did”</i>
I tend to judge my impact as a staff engineer by the things I stop other engineers from shipping, as much as the things I "fix".<p>It's one thing to make architecture changes and features that people need, but being in the right conversation to say "don't do X, Y will cover 80% of your requirements for no extra tech debt" is afaic more valuable.<p>You've just taken a feature from a 3mth chunk to a 6 week chunk and thats a big thing.
The best problems to solve aren't in architecture diagrams—they're the daily friction points killing dev velocity and team momentum. Fix the papercuts first.
> Users often ask for a particular solution instead of explaining their root issue. Rather than taking the request at face value, I keep digging until I understand what they are trying to accomplish and why existing products do not work for them.<p>Absolutely applies to product focus and customers too. Giving the customer exactly what they ask for with no analysis will result in crappy software.<p>Except that sometimes a company giving the customers exactly what they want does optimize for sales in the market (especially in "enterprise sales", government contracts, and anything involving RFPs etc)... it just always also results in crappy software. This is how we get crappy software that sells well.
“I start to see what’s really slowing people down and what my team or I can do about it.”<p>I often tell engineers that employees will never go to an “innovation center” in a company to say that their job could be made obsolete. And by definition the workplace is not 100% effective as long as there is employees. Still there is most likely always more that can be done, so think that the existing people can be automated away and be used in new positions.<p>A good way to find problem from top-down is to look for similar jobs done. Often a department with a lot of employees. 10% more efficient for 100 is better than 100% for two, unless those two indirectly slow the rest of the company down.<p>And I like to think that when companies expand rapidly it’s easy to spot problems, the contrary is slow growth, then problems is often someone’s job and they will not complain if it’s not stressful. The last part is often solved over time with even more people.
I'm surprised there was no comment here about asking the support team what is actually paper cutting the customer.
They tell you want tools they want and then do what you think is best. But don't understand why they really want tool x. Tool x does x and y but the case is made around x. You combine x request from different users and create your x solution never knowing about y and y is the main reason they want the tool.
What’s fun at the staff level is anticipating issues with the foresight that comes with experience. Going deep on a new tech so that when a situation arises, you are ready with the right tool and the depth to back it up. This is another way to deliver value the staff level.
Talk to the customers. Sit along with the sales team when presenting to the customers. Join sales calls. Ask them about their problems, their pain points, and their current solutions.
Also a staff engineer. This is pretty much exactly what I do.<p>Often it is a result of suggesting an improvement to some PR for a program or system that someone is doing some work on, and discovering that for whatever reason it doesn't quite work. This tends to lead to a deep dive of really analyzing and understanding the problem and how the piece of the system fits into the overall picture. This analysis often leads to a more structured approach to a problem, placing it in the context of wider industry or CS theory, thus enabling us to leverage prior art and other people who have grappled with similar problems.
The author and I think very much alike. I felt like I was reading a journal from myself. I work for a larger engineering company and often times feel misaligned. This read helped put into words exactly how I approach problems and helps me better articulate that misalignment. Thank you to the author, great read!
Great article and super relevant advice. As building becomes easier and easier in our career those with the agency to find problems worth solving become x10 more productive.<p>Like other people in this thread are also saying, the more you master this skill the more often you'll have people finding *you* to give them their problems, which only makes this easier.
The honest version of "find problems to solve" is usually "find the thing you keep complaining about in meetings, then realize you have the mandate to just go fix it." Half of my best work was annoyance I finally got sick of voicing.
Making life easier for yourself and your team is a big one for me, so I totally agree with you. Some times people don't complain about things they should be complaining about, because they don't know they can change them. I find that most big ticket items that unblock devs aren't code related but organizational which can in effect turn to coding issues.
Small business, small team, gets shit done.<p>Large corporation, more meetings about what to do than doing it, power trips, drama, backstabbing, you name it. Keep you head on a swivel at megacorp.<p>I've learned that twice when both startups I worked for were sold. They made millions, I was shown the door. Any business that talks about being "family" or any of that crap is a cult, stay away.<p>I stopped working to make shareholders rich, and started working for myself. I don't believe anyone will ever truly get what they want out of life working for someone else.
I'm staff+ too. I don't need to find problems, they find me, very quickly and it's mostly a triage operation on problems from then on. I always have a list as long as my arm of problems that are worth my time.
People ask XY problems and your job is to find what issue they are having, not try to help them with the attempted solution.<p>Basically a StackOverflow guidance on XY problem applies to the general problem solving as well.
One thing that isn't often mentioned in these discussions:<p>Making sure that the work was actually done.<p>I've been a Staff Engineer and managed engineers and it's pretty shocking what people consider to be "done".<p>A couple examples:<p>- Doing a migration to using Tailscale and an engineer claims it's done even though there is just one giant ACL for the whole firm<p>- Migrating from one monitoring system to another despite only 80% of the alerts have been migrated<p>- etc<p>Some of this is business folks creating bad incentives. Some of it is not creating good "success criteria" for projects. Either way, someone has to go through and make sure that both the details and the big picture deliverables landed correctly.<p>This being HN, I'm sure someone will say something like "just hire better engineers". I've seen phenomenal engineers make bad choices here due to poor incentive design.<p>A perfect example:<p>- you reward people for hitting delivery deadlines<p>- you punish people when there are outages<p>you might think you're pretty smart until you realize the odds of getting yelled at if you miss a deadline is 100% but the odds of an outage are <100%. The EV+ outcome then becomes to hit the deadline even if you know the code isn't ready.<p>Again, the job of senior engineers/engineering managers is to make sure these things don't happen by both double checking work and also pushing back on bad incentives.
It isn’t this how everyone finds what to work on?
> “How do you find problems worth working on?”<p>They usually find me.
I think the first problem may be fixing the broken mobile experience. I'm getting black text on a very dark gray background.
Thanks for letting me know; I cannot reproduce this myself on my mobile (it should be white text on a dark grey background) but I pushed a speculative fix which <i>might</i> improve things. Please let me know if it helps or, if not, I would love to know more details so I can fix this!<p>Thanks!
It’s difficult to see the difference between a solution looking for a problem and vice versa.
You guys have to find problems? The problems usually find me!
Worked at multiple startups as an early engineer. A few were successful. One wasn't. A "staff engineer" was not an available position or job title at any of them.
Listen more than you talk. Read more than you write. Don't ask people what they want, watch what they do.<p>This is one of my favourite blog posts of all time: <a href="https://javlaskitsystem.se/2012/02/whats-the-waiter-doing-with-the-computer-screen/" rel="nofollow">https://javlaskitsystem.se/2012/02/whats-the-waiter-doing-wi...</a> I sometimes tell this story to people. Many don't get it. A staff engineer needs to get it. A staff engineer will quietly watch and realise all the junior and seniors are merely churning away solving the wrong problems.
Listen to your customers but ignore what they say. “Treat your customers like a kindergarten class. If they’re all asking for a snack they’re hungry but perhaps they really need a nutritious lunch instead.”
I spent the early part of my career (mid 2000s) working on a registration system for sports tournaments.<p>I had two jobs:<p>1. Writing the actual software for the registration website<p>2. Going to the events and managing the registration tent where people actually checked in<p>Doing 2 gave me a VASTLY better understanding of who the users were and how they thought. e.g. I assumed it would be tech savvy, organized people like me in their mid 20s. It was actually a mix of 40 something team dads who weren't tech savvy at all (b/c mid 2000s) but very organized and teenagers who were the opposite.<p>It meant effectively managing two completely different customer bases in the same product.<p>Coupled with the fact that cable modems were a new thing but not evenly distributed meant that we had to design the site accordingly.<p>At the time, I remember Joe Spolsky mentioning that at Microsoft they did two way mirror usability testing and it totally made sense. I wish more firms did that today.
Eh, I'm not going to say this is wrong, but pretty much like all advice, it's kinda cheap without data. Like Dale Carnegie may be very famous and have a book and say "Use people's names all the times and your conversations will be great" but who actually knows if that makes a difference without some controlled outside study.<p>I see a lot of people really eager to tell other people how to staff, but a lot of them sure do seem to disagree, and most people I know get to staff anyways without any particular skill after a certain age (title inflation?) including myself.<p>My smell test for an engineer is -- are they trying to quantify the size of everything in terms of impact, or are they just reacting to whatever customer knocks on their door?
I have a different problem: I can find all the problems, but I can't solve them, because they aren't within my control. The people whose control they are within aren't interested in solving them (or letting others work on them). The political and psychological games required to get people to just let you solve problems seems like a second job.
Half of being a staff engineer is politics unfortunately, you need to build capital with "sponsors" in different areas of the business and use that to nudge change where you don't have direct control.<p>Quick coffee chats, trading favours and the like can get you pretty far in large orgs.
If you spent your whole career inside one corporate ecosystem...do not confuse your rank in that hierarchy, with your rank in the profession. By looking at the some comments here, many are doing that.<p><a href="https://www.youtube.com/shorts/FXPh2_BAZD8" rel="nofollow">https://www.youtube.com/shorts/FXPh2_BAZD8</a>
My advice as someone working at staff engineer role for 3 different employers remotely and the "let problems accumulate" resonates but different context:<p>- don't be too proactive in solving issues that signals you are not busy to your employers.<p>- you are not hired to sit around 9-5, what you ship and how it impacts the business bottom line is far more important.<p>Especially true when I have to juggle 3 different employers. I will be in a long standup meeting with company A while I am answering slack messages from company B or company C has a deadline that overlaps with another and I'd have to work on at the same time.<p>Previously without LLMs this was very difficult but now its manageable, especially with openclaw and hermes doing a lot of lifting. This let me discover a lot of what's discussed in the article naturally.
The biggest problem of a sTaFF eNGInEeR can be solved right away: stop writing about this crap. All of these titles are so meaningless where one organization's staff is another's junior is another's CEO, it doesn't matter because all of the organizational insanity that lead you to your coveted title means jack anywhere else. I should write a big ol' think piece from my perspective as a Senior Staff Distinguished Principal! I will get lots of clicks.<p>There’s literally no difference between writing about being a staff engineer versus someone writing about being a janitor. Honestly I’d rather read about the janitor, they actually make a measureable difference.<p>It's pathetic how hard people hold on to titles. What have you -done-? How much have you added to the bottom line?
Eh, it’s valuable advice to a lot of people. Titles are bullshit and all over the place, true, but “how to approach the changing responsibilities that come with growing out of the kind of roles you’re used to” is useful to people regardless of what the role is called.
> <i>How I find problems to solve as a staff engineer</i><p>For me, walking down the hallway where I work is usually sufficient...<p>Hell, what am I even saying? I have a large list of them to begin with, and it rarely gets shorter
“The shape” — smells like tokens.
Each paragraph is too perfect.
TL;DR is that its extremely hard to show staff level expertise if you work at a wrong company. And the amount of companies that still need this expertise is ever decreasing (big corpos with a lot of autonomy)<p>This is the real reason why we dont see natural path for more ppl to progress towards Staff level.<p>Interestingly noone talks about this. “Be first or bust”
[flagged]
[flagged]
[dead]
[flagged]