I recall seeing talks on "Staff Engineer" and thinking that this was going to be the next version of "Architect". Engineers who's primary job is to write code often dislike working with people in such roles.
I recall seeing talks on "Staff Engineer" and thinking that this was going to be the next version of "Architect". Engineers who's primary job is to write code often dislike working with people in such roles.
That depends. If they are actively involved and the architectural decisions are sound, it's fine.
If they are "drive-by architects", showing up, dropping a bunch of useless boxes they read on some book, and then leaving before the consequences of their 'architecture' are known, you are right we don't like working with them.
At many companies, however, staff engineers are still engineers.
The majority of Architects I've brushed against in the last decade have been exclusively an additional marketing force for AWS with very little ability to objectively reason from first principles or assist with knowledge of anything outside of the AWS ecosystem.
These are the first principles in question, now from there your architecture is mostly determined, you can fall back on known patterns and decades of research. The axioms are the architecture.
"First principles" in this context is not just reaching for the nearest/newest AWS service that seems to do what you want. ie. if you want a webserver, don't just run magic lambdas that abstract everything away from you, go and provision a vps and install your dependencies on it so you fully understand and control how the stack works.
None of the 12 engineers at my current company had written a test that actually wrote rows to a database when I arrived, they didn't know how. In fact none of them knew anything about how to run our databases on their own dev machines at all, they all shared one RDS PG instance.
Again, "first principles" here is: running a process, connecting to a service, asserting the whole thing did what you expected. To do that effectively you have to actually control the whole system, and to do that you have to know how the whole system works together. A lot of developers now just delegate the provisioning and maintenance of everything to a provider, even in development setups.
First principles to me is the basic foundations of an idea.
Abstractions are used but; any given abstraction is not owned by a single vendor and are based on agreed upon standardised abstractions as they relate to to operating systems and databases etc.
The bad ones took what they read as gospel and the good ones took what they read in context.
I've found those roles to be:
* Technical Leadership (driving major technical initiatives)
* Technical Contributor (shipping stuff, with technical mastery beyond what would normally be expected from senior engineer)
* Architect (planning stuff)
* Team Management (mentorship + taking load off an engineering manager's plate if the team is big)
Biggest mistake I see orgs make when hiring staff engineers is hiring someone whose strength is in mentorship and technical contributors and decide their new role is architecture and driving major technical initiatives at a high level. Some are best "in the weeds" and others are better planners. Know their strengths!
I might be doing same thing over and over. Time to make a radical change :/.
That’s basically what a staff engineer does in addition to making large design decisions.
The type of work I'm doing has been the same, manage a team or more of engineers, do some architecture, some coding, help and mentor other engineers.
Pay went up.
A doctor can't help but work at the world's best hospital, because it probably will still be the world's best hospital next year. A jet engine designer can't help but work at Boeing. A fresh college grad can start a tech business tomorrow.
It is much easier to teach someone how to code than to teach them how to manage. Management is two parts: (1) making sure people produce a good product for a little expenditures as possible, and (2) manage liability from employees. Particularly now, the second part is very difficult to teach.
Most people do not have great judgement when it comes to managing people and it's a really hard skill to teach. You can make someone watch training videos all day that tell them explicitly what NOT to do and they will still do exactly that. Everyone wants to believe they are good at management—very few people actually are. Most fail upwards into it.
I have met other architects that claim they "don't code" and honesty don't understand how they can make decisions and reduce risk without that background. Most of the time I have a solution because I've been there and done that.
I view my role as one that has the expertise to bring the engineering team to the next level, because if I did all the work - it would just be one person instead of many. I constantly try to unblock, solve hard problems, and reduce entropy - and let the creativity flow to the rest of the team.
This has worked for me, as a software architect, for almost a decade.
I am not sure I would say saturated, but yeah, the Sr. SWE market is definitely not as tight as it was a year ago for most role types. However, it does depend on qualifications and company type. Seniors for R&D positions (so, PhD with 5+ years in product-focused R&D) are still basically impossible to hire. Friends tell me that hiring seniors at mid-pay or low-pay companies is still pretty hard.
The more important dichotomy is between mid-career/late-career and junior. The entry level positions are absolutely saturated. CS programs are definitely over-producing at this point.
Here big companies are taking kids straight out of uni and boot camping them because decent juniors are hard to find.
It’s not the students fault, but the education system is constantly behind the times, and sometimes even teach bad engineering patterns that cause problems and create technical debt.
Yes/no/maybe. The schools got pressured by the bootcamps that were teaching the "flask app talking to a mysql db" .. they simplified their classes and stop teaching some things. It sucks, the people who come out of that don't have the theory/flexiblity/skills coming out that you would expect before.
Also, universities do offer courses in cloud computing. I was helping our interns with their cloud computing courses back in like 2016, so it's not a recent addition either.
This doesn't ring right. It might (maybe) be educational to do this, but I'd say that any "development job" that is about software development is not trivial like you say.
An "endpoint-to-database" job doesn't exist [1] - I think you're making a simplification here and the real argument is if its educational.
[1] find a job description that says REST or GQL endpoint directly to database, and doesn't have a long wishlist of other skills, experience, or design - I'll gladly take 100 of those and be on my merry way (!)
This was my entire career pre-phd, and it was a pretty excellent career. Oh how the times change.
I did say, "simplified too." Yes, there's other things you might have to learn, but being able to, "take data from some place, then stick it into a database"; and "take data from a database, and send it to some other place" is a fundamental skill set for a lot of dev jobs.
You might be working at a FAANG and get to do fancy cutting edge development that never touches a database. But a lot of us at banks, insurance companies, etc are piping data into/out of a databases or other endpoints all day long.
> An "endpoint-to-database" job doesn't exist
9 of the 10 dev jobs I've ever had amounted to this, including my current one. Half of my job is maintaining a Go-backend bolted to a Postgres DB, and the other half is piping data from various APIs into BigQuery or vice versa.
I've seen the bootcamp crowd more often than not in these situations coming through, not many with actual 4 year CS degrees, though I've seen many of those too, but not nearly as much, by an order of magnitude.
EDIT: could be a difference in what part of the industry we work in too. I do more frontend / "design engineer" work.