We will never have enough software developers (2020)
whoisnnamdi.com
whoisnnamdi.com
As for attributing burnout as the core issue here, I would strongly disagree with this idea. When teaching undergrads I noticed immediately that a good portion of each student cohort was basically there because they were interested in making money in the future rather than exploring the ideas of computer science. They were no doubt going to get frustrated or bored and move into management or some other profession rather than continue to expand as an engineer. This is totally fine, and they are probably richer for having learned what they did, but I don't know why we can't just see this and appreciate it for what it is rather than portraying it as the drama of burnout.
Now give me a new theoretical concept where I can expand my knowledge or integrate into my knowledge map and view of the world and I'm excited, there aren't enough hours in the day. Tell me about this all new concept I wasn't familiar with--I'll start thinking of ways I can use it, how I can leverage it, or how it may connect with other ideas and concepts I have.
Now give me a tight deadline which most business environments create and I agree with you, give me the boring stuff I can pump out, get my paycheck and go home to enjoy the rest of my day.
The entire industry focuses way too much on 'experience with tool X' as a proxy for 'technical skill Y'. It's a bit like asking a carpenter how many years of experience they have with DeWalt cordless nail guns rather than ask about their house framing skills.
When we recruit we ask "if we tell you no more Spring and we'll work on any language as long as there's a problem to solve, how do you feel". Most either say they d feel horribly sad, or dont even comprehend how it's possible. Some are indifferent because they need the job. Still looking for the guy that says "anything can be learned in a reasonable amount of time" so it s not that obvious I suppose :(
Beyond that, it's just making sure you do less stuff, and being really aggressive with profiling (what looks like it takes the most time in the code almost certainly isn't what's really taking the most time).
But most software aren't the linux kernel, they're small systems solving a class of specific problems as fast as possible with rotating teams, so it sometimes is just a matter of profiling this stupid hashcode function or asking why the mouse is freezing during high trading volume on the C# GUI :D
You wouldnt believe how common optimization problems are and are not related to GC, a belief I have to disprove very often (look 300ms of GC a day, but hey, you're checking an unindexed table each calculation for a trivial non essential decision, what if we fix it)
What I think is missing is there are serious diminishing returns with more experience in a specific language or framework. 10 years of experience split 3 in Java and 7 in C# is very similar to 7 in Java and 3 in C#.
Maybe the base "lawyering" or "nursing" does change but they'll have seen a lot more examples and be able to pattern match quicker.
Also I'd rather a 20 year nurse was the Charge Nurse rather than a 5 or 10 year one, I'd expect they'd know more how to lead others (although time served isn't always an indicator of a good leader).
They've also been burned out by being 20 years in the field. Motivation is a very very crucial thing for success and motivation often times declines due to burnout. Yes said lawyer saw more cases as mine than his younger colleague but he might not be super motivated to fight for me in court as he was 20 years ago, and in any case there are constant tiny changes to laws that make the 20 years experience worth less.
Btw I think 55 year old lawyers/accountants who look for a job face pretty much the same discrimination as software developers - they are expected to be director level or there's not that many jobs for them. This thing is definitely not unique to our profession...ageism is a thing everywhere.
It's what I do at work for fun, in between my "real" development / support tasks. I profile and optimize our internal application, its loading time, user interactions, etc.
Sometimes when it's a long term I make a proof of concept and ask for permissions later, so for a while optimization becomes my actual job. Just finished a couple of months of performance tuning, actually, which I did in parallel to other tasks.
TBH there are plenty of easy, low hanging fruits since the team who wrote it wouldn't recognize a performant code if it smacked them in the face. Or they concentrated on very minor optimizations in rarely executed parts of the code and tended to bikeshed them for hours instead of actually checking what the real problems were.
I actually almost never use an actual profiler when starting, I just run under the debugger and pause the application at random instances when it appears to be stuck.
In almost all cases I find it's executing some unnecessary batch of queries, or reading from a table using an unindexed column, or redrawing parts of the screen which shouldn't be updated, or throwing and catching exceptions that were used instead of if statements, or blocked when it could run in parallel to some other computation, or doing some other unnecessary O(n^2) loops instead of using a hash table. A combination of such improvements will sometimes gain up to 20%-40% speed or even more.
When I'm done with these simple cases I start using a profiler for the that extra optimizations for those extra percentages.
I can definitely see why some people might hate that situation, because it feels like nothing is working and you dont know anything at first. But if you aren't demoralized by that, and instead find joy in learning/figuring out all those new things on a regular basis, it all feels extremely rewarding. Like, why would I dislike being paid to essentially learn a bunch of new stuff regularly and solve actual real world impact problems using that new knowledge.
Because if the garbage collector is the bottleneck you need to fix your code to not produce so much garbage.
The code had some sizable chunks of JavaScript in Strings and looked at each authorization the user had. Its been awhile, but in dynamically generating that JavaScript (ICK!) it generated several megabytes of garbage Strings by doing `script = script + "little bit more";` way too many times. This was done for each page load. 8am and hundreds of people click the page to get their start of day stuff... and... server has problems.
That particular issue was fixed by changing it all to a StringBuilder.
I've yet to see any sloppy garbage creating that is on the same order of magnitude as that JSP was.
String foo = "foo";
foo += "bar";
That is under the covers... String foo = "foo";
foo = new StringBuilder(foo).append("bar");
But... if you do: String foo = "foo";
foo += "bar";
foo += "qux";
that becomes String foo = "foo";
foo = new StringBuilder(foo).append("bar");
foo = new StringBuilder(foo).append("qux");
So, you've still created the strings: "foo", "foobar", and "foobarqux" and also a pair of StringBuilders.The actual code was more complicated (and bigger strings), but the issue is that each statement is its own StringBuilder.
That prompted me to explore it and I looked at the byte code invocations at http://shagie.net/2014/08/17/what-goes-on-behind-the-scenes-...
I learned so much in that job, and probably would have kept it had they not relocated it to Santa Clara.
If you can work in an environment like this for a few years you definitely should, that's my advice to everyone. You'll learn so many things that will be useful over the rest of your career.
k8s surfaced and I tried to learn about it, but it's just too complicated. After I had spent 2 weeks of intensive mind bashing at it, I still wasn't able to manually set up a 3 node initial control cluster. I gave up on it, never looked back.
Spring boot time and again, medium difficulty picking up, mostly because of the exclusive Java community, if something like that even exists. Very arrogant bunch that speaks in implicit ways and assumes you just magically know stuff.
Android is similar, always in flux, despite the many resources offered by Google you don't know what to pick. New Jetpack compose or old, ancient seeming xml layouts and configuration and navigation configuration. It's a hot mess. I tried to use AppAuth OIDC client, has a few questions, asked, the response was "We assume some prior Java and Android knowledge". Well, ok thanks for nothing.
Angular, aside from rxjs, which was royal pain in the ass to learn, straightforward, albeit a bit overly complicated and typescript gets in the way more than it should.
Jumped to Vue. Oh dear god, it's so nice and easy. None of the rxjs stupidity, no forced typescript and a large ecosystem. I can be super productive with it and create SPA, PWA, SSR, Electron apps, browser plugins, even hybrid mobile apps with it.
Rust, my arch enemy. I tried to get into it, I was drawn by hype and the promise of more performance. But knowing Go, which is just good enough for the backend, and where things make sense, Rust doesn't make sense for me. For someone coming from C++ it must seem like the 2nd coming of Jesus, for me - the Go guy - it's an abomination. Yeah I get the basics, but imports don't make any sense, structure doesn't make any sense, erorrs don't make any sense. I feel like a freaking transporter always worrying about crates and boxes and who they belong to. Not fun at all. Handle with care, careful breakable. UGH.
Yeah anything can be picked up but it depends on me being interested in what's to be picked up, the willingness of others to teach and the justification of why I need this added complexity.
I write monoliths and I'm happy with that. Now all jobs postings require Microservices and EDA. I'm unhappy with that because I don't see the need for it in most cases. Now I have to learn expensive cloud on my own, which I have ZERO motivation for. I have to make everything extra complicated, it's hard enough as is getting a project done start to finish, client and server, the monolith way. If I'd have to go Microservices I'd never finish anything and even if, when launching until people actually use my service, 3 years later I'd be bancrupt. So where am I supposed to learn about this unless employed by those people who want Microservice EDA? But they won't employ me because I have no experience with that.
I routinely say something to this affect in jobs for which I a interviewing. I tell them I am not an expert in anything, but I feel I can learn anything given enough time. The caveat is in some businesses time is the limiting factor and the business doesn't have the time for me to learn.
But I'd love to work for your company or one like it.
One of the key things that self taught developers miss is the instruction and review of the code. You write code differently if you're going to be graded or if its a throw away script.
In theory, job code that is going to last for more than a run should be written closer to the rigor of the graded code while people who have self taught have never had their code reviewed in their instructional period and tend to (not always, but tend to) write code that wouldn't stand up as well to review.
There are plenty of graduates who don't write code that stands up to review either... but there is a "you have spent a few hundred hours writing code and had it graded, and changed how you write code to get a better grade."
For a person who comes into a CS degree program without experience at coding, and they do their homework, I tend to believe that they will have code that stands up better to review and fewer bad habits than someone who followed a self taught progression.
The quality of reviewable code from a cs student is not surprisingly not great but languages like python force some standards.
Neither prepare a student like a community college. Usually the most successful group in the job market.
To me that's noise and not much else.
Something I don't think a lot of folks realize is that there's two parallel industries (and pipelines to jobs in the industry). They almost never overlap.
One in which recruiting is largely done by non-technical folks who match keywords of frameworks, and where rote and learning whatever library is seen as the objective (bootcamps come to mind).
The other one where CS fundamentals are seen as the priority, and where hiring focusses on finding people who posses the skill of acquiring new knowledge.
You can guess in which one Google and FAANG or whatever the acronym is now and Stanford/MIT exists.
We routinely have & hire interns from top programs and many lesser known ones, or even non-CS degree holders.
Small aside. It describes Google and Facebook and the others several years ago. Speaking anecdotally, the impressive people at those firms are fewer and farther in between.
Strongly emphasizing this. This is HIGHY applicable to the analytics environment. As a business analyst who specialized in mostly ad-hoc development because it was the most value-add area at the companies I worked with.. I had a lot of trouble finding new work because I didnt use Tableau, or Power BI, or Looker, etc. I was some sort of fool for doing everything in SQL, Excel, and Python.
IMO the tools are great, and you need a much lower level understanding of analytical concepts to get value from them. But for some reason people kept getting the impression I would somehow be less effective with them because I dont use them. And I had trouble correcting them with the limited bandwidth that exists to communicate with a single applicant in the hiring process. If I tried to get right to the point, I felt myself appearing arrogant.
The carpentry analogy is very similar to how i described it. "I am currently using a ruler and screwdriver, and these tools provide lasers and power drills"
This kind of logic only works for tech organizations that already have enough in-house domain expertise to onboard new programmers. The other day somebody asked me how to find a programmer to implement something for them. From a programming standpoint there was very little to do, but it involved many obscure technologies that you couldn't pickup in a day (and no you can't pick different technologies). For a person who's already done something similar it'd be a quick and easy job, shouldn't cost too much. With a generic programmer it'd take much longer, cost much more and you couldn't be sure they'd actually deliver.
It is even harder if you don't even know how to verify that person really is experienced with specific tool set.
So it goes like "pick your poison", hire generic dev and account for learning curve or spend money on recruiting fees/time for finding an expert. Where I would not be so quick to say "expert shouldn't cost too much" - because I can imagine expert taking less time but costing orders of magnitude more than generic dev.
Give them six+ months to train up and I’m sure they’ll do fine.
And as music goes, you sound like the record companies that thought everyone should listen to disco for the next 50 years...
They tend to bike-shed details, take way too long to try to create sophisticated abstractions that never quite achieve the silver bullet they originally thought it would, and spend too much time dwelling on irrelevant details that ultimately leads no where and results in a kind of paralysis that can be very hard to break out from.
The ones who master a specific language or master a specific library/technology that focuses on doing a few things very well and in very concrete terms are able to deliver the most business value. Furthermore they absolutely have the ability to take their mastery of that and map it to new languages or new libraries. I mean I'm not talking about going from Java to Haskell or Haskell to Idris, but rather people who master C++ can fairly easily pick up Java or Python or TypeScript. People who have mastered Unity can easily pick up Unreal Engine. People who have mastered web development can easily pick up mobile development.
The idea that people who have a solid mastery of a technology and a programming language are somehow just stuck and unable to take those skills and apply them to other areas I think is overstated and just untrue, but those who treat software engineering as highly theoretical and focus on abstractions, design principles and get caught up on these high level details tend to not get much done and when they realize that software is not as clean and elegant as they would like it to be, they get burned out and give up.
I think going over any substantial codebase for products that are widely used and deliver solid business value on Github where most code is not at all reflective of the ideals often espoused on blog posts validates my point of view.
In short, people who treat software as just a tool to accomplish a concrete task are more productive than those who write software for the sake of writing software. They don't write the cleanest code, or the most elegant data structures and algorithms, but they produce the greatest amount of tangible business value.
There is a lot of people who learn just a surface without going deep into tool and think they know enough.
For me it seems that someone who would really go deep into learning language would get most of theoretical stuff on the way. Because there is no way to really master C++ or really master Java without learning about data structures and all kinds of "meta-level" concepts.
Maybe the difference is mostly approach to learning more practical/more theoretical.
> "meta-level" concepts
I'd say having a strong grasp of what you can achieve with just using files and folder, or understanding how SQL solves en entire problem space are meta level concepts. Its just that we take them for granted.
> business value
Is apparently something different than 'value', but still includes every software ever that was valuable to a business?
> high level details
...?
> software engineering
Building constraint solver for a compiler or ensuring a JS animation centers a div?
> highly theoretical and focus on abstractions, design principles
I'd recognize all these things. But out of context 'in the general case' they become meaningless.
---
I understand the picture you are trying to paint, but i don't think it tells anything beyond "I've noticed people make things overly complex". I agree.
However, keep in mind the 'get things done and provides value' software you've seen: is the software 'that survived', might have been set up by a very experienced person ( whose failures we're not seeing ), nobody might recognize it as being not-simple ( e.g. I've seen high value business software partial recreate 'regex'. Worked great, straightforward and easy to read function, just ~50 lines or so, could have been a single function call. ), how the requirements are presented is hugely important.
Some guys see a screw and reach for their trusty hammer. Some guys know to grab a screwdriver.
I had a project the last two weeks where the code was just going to fail about as often as it was going to succeed. I had to write a resource manager and an Erlang style supervisor and use an embedded key value store.
A better dev may have intuited what took me basically a midstream rewrite to figure out, a worse developer may still be grinding on the problem.
I think my solve is "robust enough" but there was no real way to power through that. You either found the right abstractions or you didn't.
The article showed the opposite effect though. Curious, life-long learners stop working in software development because they have to constantly learn new skills and believe they can get more bang for their buck when they can invest in skills that don’t lose their value over time.
The only skills that have really stood the test of time for me are C, PHP, unix shell stuff, and SQL.
After six months of this, ExtJS 4 came out, which was essentially a totally new framework. Everything I learned was not only not applicable, it had to be actively unlearned.
The lesson here is: become good and proficient at something, but don't focus on becoming a ninja in one particular transient tech. There is value in becoming a Jedi of Unix build-in tools, or more persistent technologies like Git, for example.
Also, this is a bigger problem in the Javascript echosystem, where the hype cycles are more intense than in, say, Python. I checked out my Flask project from seven years ago and it's ready to rock.
I get the thing about constant learning, but learning in this industry used to be cumulative. Now it's a hamster wheel. You are learning how to solve the same problems, in a different, presumably in a "new" way.
People seem to be spending more time coming up with catchy names for their projects than making sure this is all sustainable.
In my school, those who wanted to make money went straight to management or finance. Computer science was for the passionate ones and probably not the right path to make money for the brightest students.
well so do the recruiters, they’ll be fine
in fact, the better students are the ones wasting their time unless they prefer to be in academia, like you
so what metric are you really gauging for?
the “poor students” are pivoting for money and the name of the university to boost their employment prospects, maybe this shows in their academic performance and ability to understand, I saw the same in undergrad
- A younger engineer will have the same value to your employer as you do.
- A younger engineer will work harder than you are willing to.
These two items are inevitable given the current rate of change in the industry. While some engineers will find next level differentiated work to engage in such as leading a core piece of infrastructure which defines the changing field... Many will not. If the rug gets pulled on this core piece of infrastructure.. then it's often the case that the engineers are not particularly more skilled than others on brand new projects.
The truth is that the programmers in group (b) think about both. Who's designing a lot of the new languages, libraries, and frameworks? Chances are it was someone from group (a). If you're in group (b) then do you want to spend your whole career being forced by your bosses to constantly relearn and follow the latest vogue vision from group (a)? Of course not. So this might not apply to students, but everyone from group (b) will eventually get burned by fads enough times that they start caring about the politics of software. Namely, not wanting to depend on bloat that doesn't actually solve computer science and systems engineering problems. Group (b) might even create alternatives themselves. Go is great example. The guys who built the Fifth Bell System watched their vision behind their techniques decline over the decades and said, enough is enough. So they made Go and it was like a ray of sunshine when it came out.
However, these still don't invalidate the main point of the article, that a faster rate depreciation means that your max knowledge level, given your specific rate of learning, will be lower. I.e. your advantage over a less skilled, younger professional will be lower.
And you may say that learning a new 3D library shouldn't be counted as learning a new skill, but it doesn't make the problem go away. If anything, it underlines it: if you have to start working with a new 3D library then you will have to spend time and effort on learning it (to become efficient at using it) while if you were able to keep using it, you could spend that time and effort on learning something that we could count as a new skill.
Not true. I have met many developers who haven't learned anything new for 15+ years and are still doing just fine developing software. A lot of Java developers come to mind. They have pretty much done the same thing their whole career and have no need or desire to learn anything new.
I think many teams are unaware how much extra value is possible by retaining existing employees vs hiring new ones. Each year I'd try to make sure I was "making them an offer they couldn't refuse" with new interesting challenges, new tech, plenty of personal research time, as much pay increase as I could possibly give, etc. A lot of engineering managers think that it's no big deal to just hire new staff, but even going from average turnover of two years to three years is an massive improvement.
The main problem is how micromanage-y the current development processes are. Everything has to be a ticket/user story and has to be planned and approved by some people that never even wrote a single line of code. Everything has to have some immediate business impact. I even see scrum teams measuring for team utilization now. target is 90% atm and they wonder why productivity is down.
So, in order to say, upgrade packages or refactor difficult to read code, the work item needs to be approved by a non-tech PO.
Guess how much gets done outside of planned/micromanaged? Answer: next to nothing.
I've found compliance makes it harder to write good code. If you get a PR approval with optional suggestions you're heavily disincentivised from actually addressing those comments since if you push those changes you now need to wait for review again.
Like everything process and compliance it's designed by low-confidence managers with an inate distrust of their teams.
Read the underlying compliance requirements carefully. In the case of e.g. SOC2, the regulation requires visibility but does not say who may open tickets or who needs to approve them. You can do a lot by making processes more open, and so long as they are still visible, you can still pass.
If specific customers tell you how to run your business, either write process that isolates their requirements to a bare corner of the business (e.g. a completely separate environment for FedRAMP) or consider firing those customers.
In our product, a change has the potential to cost businesses lots of money and also bring our customers into legal trouble, potentially making us liable too.
That's why we have heavy-handed change control, code vetting and so on. Yes it makes things slower, but due to the risks involved.
I've also worked on embedded projects where field updates are HARD and costly. We had heavy-handed change control then.
When I put those controls/processes in place, it wasn't due to low confidence, it was due to confidence in two things: (a) even the best SWE makes mistakes and (b) work to control change risk pays off
Sure, it isn't appropriate in many chases, but to write-off process as being designed by "low-confidence managers" because you don't see the point, is a bit myopic.
Any SWE who thinks that a codebase doesn't benefit from review before merging is driving on ego.
> Sure, it isn't appropriate in many cases
I think where low-confidence management comes in is the application of the process without reference to whether the process is appropriate. It's easier to require all changes to be reviewed, every change to have a ticket and all post-approval changes to require re-approval even if the thing being edited is CSS for an internal tool than it is to build out process that accounts for the field and risk.
It feels like many places/management teams take an "off-the-shelf" compliance approach rather than constructing a process that works for the team.
New management took over (they finally realized they bought us out a few years ago), shoving "Agile" down our throats, we've missed multiple deadlines, every deployment has been a disaster, and there are still outstanding bugs that won't be fixed Any Time Soon because they're not on the release schedule.
Oh, and the new mandatory code reviews before checking in code hasn't helped since bugs still got through (and I've lost code because it wasn't checked in---it's not helping matters that we're still stuck on SVN, and half the team can't access the master SVN server).
Yeah, the overhead sure is doing great for us.
Edit: fixed typo.
Unless company does not want to have any devs working on that project in the future. But it would be just like not wanting customers to use that project.
Worst case, you get criticized for doing unauthorized work.
Best case, you spend your time on a task that gets unnoticed, and now you have to do overtime to do stuff that you are assigned to and actually supposed to do.
Why would I do it? Bit of a rebel I guess.
Exactly the same where I work. The pace of getting things done is absolutely glacial compared to what you know you could achieve if you had any agency. I think the only reason this organization I'm temporarily a part of can even compete is that all its competitors must be equally inefficient.
I wouldn't want to be accountable in that situation.
Every change carries risk.
You can do the change work in a feature branch and propose the idea after the fact. If there's interest "I've already done it." Stakeholders get a bit of instant gratification like their request just materialized into thin air. If they're not interested, don't mention it and let the work go unused, rack it up as professional development time and work.
I do this fairly often. If a decision has a bunch of real risk associated with it I make sure to get sign off and create an appropriate evidence trail to pass risk back up when it's passed down. Much of work is just passing risk and liability around to PYA.
I'm not sure I'd keep someone on the team who did a branch AWOL and proposed the idea after the fact. Doesn't show much respect for the team, that time could've been spent working towards goals agreed by the whole team.
If you don't have a lead or management environment with ears open to exploratory change, tech debt payoff or "do it better" tasks or whatever... and you have to manage up so much... that sounds like an issue to me.
There's also an assumption buried in there that any time spent working is somehow owned by you, your leadership, or the organization and not your team or teammates time. I've personally spent plenty of hours "off the clock" investing in directions I think are correct in an IC environment and it's paid off many times (I've also wasted my time on occasion but it's my own time and my choice). If you have slack in your schedule or want to push something out by taking initiative, then the type of management philosophy describe loathes initiative, creativity, and innovation in engineering. It's a great way to drive those abilities out of your teams and organizations.
It's good to foster teamwork and target goals but you also have to give your teams some degree of autonomy, otherwise just as the article describes, they will leave from the drudgery. The allure of technology is the tangibility of innovation. If you rip that off development, for many, the work becomes unenjoyable, tedious, repetitive, etc.
What issue? My projects are delivered on time, on budget and to the customers expectations without undue risk or unpredictability. That's my job.
Nobody on my teams would say I micromanage them, everyone has a large degree of autonomy within a framework of shared goals and shared values that keeps efforts working towards cohesive results.
With autonomy comes responsibility to the team, business, customer and every stakeholder ... so yes, i'd consider it AWOL to undertake work that doesn't respect the input of everyone else by getting agreement beforehand.
Perhaps that's b/c you are apparently in a position to get rid of people who "go AWOL" despite maintaining "a large degree of autonomy".
If autonomy is prefixed on "within a framework of shared goals and shared values" then why do you think individuals can't do work based on their own conception of those shared goals/values, rather than requiring signoff first? Autonomy is being able to make (and execute) decisions on your own (possibly based on shared information/value/etc) - requiring signoff is not autonomy, it's merely the ability to participate in decision making.
If you're working for the benefit of the product/team I don't see why you would need to, or have an issue with this.
Strange.
You don't always need a ticket for this, if it applies at all. I'm not unaware of these benefits, but the burden lies with you to demonstrate devs cannot be trusted to be autonomous, or choose the appropriate mode of collaboration.
> getting work approved
Why is this always needed?
> If you're working for the benefit
This is a strawman, you can do this without the overhead.
Who do the approvers seek approval from, for the same reason(s), and who do they seek approval from?
> visible to the whole team
This is what standup / status updates are for. It takes all of a few seconds, no approvals needed.
In regard to refactors, people tend to just squash them into another change they are making. This makes the git log a bit harder to follow at times, but people did this back when we just used to push to trunk too so I don't think the story is the deciding factor.
I would say for non-tech companies with a strict set of IT guidelines, this is mostly true. Please ignore non-tech companies with weak or zero IT culture. It will be the 'Wild West' at those places! Nothing will be maintainable beyond a certain size because there will be so much key person dependency.
For pure tech or tech heavy (banking, insurance, oil & gas, etc.), there is frequently more flexiblity, including "dummy Jiras" just to track a non-QA'able code change like upgrade C++ / DotNet / Java / Python library, or refactor some code. In my experience, 'Jira-per-commit' rule isn't awful, as long as tech debt does not require non-tech approval, and the ticket is just a tracking device. (A few different vendors offer very nice total integration between issue ticket, bug ticket, pull request, code review, etc.) Just a one liner in the Jira should be enough. In my experience, the best teams try hard to "do what works for us", instead of be a slave to the Jira process. Yes, I realise this is highly dependent upon team and corporate culture!
Finally, I would be curious to hear from people who work in embedded programming -- like automotive, aeronautical, other transport, and consumer electronics. I have no experience in those areas, but there is a huge number of embedded programmers in the world! Do you also have a very strict 'Jira-per-commit' rule?
But the actual ticketing/PR system? Change requires control.
The actual issue is not _using_ that control tool to get the right things done. If basic technical debt issues are not an easy sell in your org, that's the real problem and one that should be handled by senior/dev manager.
A big red flag for me is any org that doesn't recognise and service technical debt and empower engineers to make a win.
I also wouldn't say tech debt pay-off should be without its justification in some cases. If an engineer can't measure the positive impact of doing something, it can make it a hard sell. Why should an engineer spend 2 weeks doing something if we can't describe the payoff?
Of course, in some cases, it is right to say "Here's the problem, and what could go wrong if we don't fix it. You need to accept the risk".
It's a sad fact of life that technical problems need to be sold to non-technical people as they're often the ones shouldering the risk.
Part of my day-to-day is selling tech debt pay-off work to clients who have to pay for it. They rightly ask "why should we pay for this?".
I think in 99% of cases (like your package upgrade example) the systemic failure is elsewhere and the approval is often meaningless and inefficient.
But code, unit tests, git commit messages and merge requests are already providing 4x documentation of code changes. Adding Jira tickets and production deployment documentation gets you to 6x documentation.
In my experience, if your company's problems weren't solved with 4x documentation, they won't be solved by going to 6x documentation.
- Ticket: Description of the requirement
- Code: How it was done
- Review: Peer-learning, change evolution
- Unit test: Testing of implementation as understood by SWE
- QA: Did the change match the requirement, did the SWE understand it? Is the outcome the right one?
Each "item" should serve a distinct purpose, have distinct value and be justified. If they seem like duplicates, then that probably points at issues elsewhere.
- Code change: MAXIMUM_PAGE_SIZE -500 +1000
- Unit test: assert len(request[0:2000]) == 1000
- Commit message: Increase the API maximum page size from 500 to 1000
- Merge request: Increase the API maximum page size from 500 to 1000. For AB-123
- Daily scrum update: I've increased the API maximum page size from 500 to 1000, if someone could have a look at my merge request.
- Deployment request: Increase the API maximum page size from 500 to 1000, for AB-123
- Post-deployment test plan: AB-123, ensure maximum API page size is now 1000
- Stakeholder demo: When an API request is made, the page size is now 1000.
As a reviewer of such a pull request, I'd go over all the places in the code where this page size constant is used.
I'd also like to see a rough assessment of the impact of this change. Does it affect a lot of code? Some code? What percentage of users are to be affected by this change?
Also, who asked for it? It's ok if no user asked for it and it's your own initiative. But if users did ask for it (or rather complained something like "the app rejects our API requests" or "the app is effin slow, please fix"), then it'd be nice to connect to their tickets / mails / chat logs. This could serve as a proof to management if someone decides to question this change.
Deployment: If this change is in an API called by many functions (so, big impact), but it can bring with it a big benefit to many users, I'd like to see a rollout plan - as simple as putting it into a beta version, or (if we have them) using feature flags to enable it, and a plan (can be an automated script) that tracks crashes during this rollout. If the change doesn't have a big impact then that's not necessary.
Ideally I'd like to see coverage results that proves that all those functions which use this constant and all code paths leading to them have coverage. It's perfectly ok if they don't, perfect is the enemy of the good, but at least the major ones. I would also go over carefully at least over some of the code which uses this constant directly and indirectly to ensure no funny business like too many threads allocating this bigger buffer, no funny out of bounds issues due to code assuming size is of a certain length (if it's C/C++/C#) etc.
So really, what is the user-visible impact of this change? If it has no user-visible impact, then why was it made? The ticket as it was specified here doesn't answer this question and therefore reflects a somewhat broken organization/team, where engineers are disconnected from their users and/or lack the eloquence or willingness or time to explain their changes. I bet the person who wrote this doesn't even bother writing comments about non-obvious changes (such as this one!), making their code harder to maintain.
The ticket system isn't for engineers. If it were for the engineers, they wouldn't be continually forced to use it. The ticket system is for the legibility of management or sometimes compliance (other flavors of management). This visibility is at the expense of the productivity of the engineers themselves.
> Change requires control
No, fundamentally, change is gated by control. The more control, the less the change, with sufficient levels of "control" leading to no change.
If a developer on our team things something should be done and can do it quickly, they are encouraged to create a ticket and do it. It gets code-reviewed and accepted. If it is not a quick change, they need to bring up the ticket at a planning meeting to make sure it is balanced against other priorities.
If your PO is sensible then a couple of paragraphs explaining why refactoring is important with a closing line that says spending a week catching up on refactoring now will save 4 sprints of work in a year's time will get you the time. People aren't stupid. Once they understand why something is necessary they've very receptive.
Also, add refactoring time in to your estimates in the future and you won't end up in this situation, plus the code that's committed will be better.
What looks like a small change to a developer is never actually a small change.
I really hope there aren't that many people impacted when you go for a piss.
Not every change affect other people, but isn't that my call to decide? Also "simple" in quotes implies it isn't i.e. you aren't trusting what you are told.
> What looks like a small change to a developer is never actually a small change.
Not true, this is hyperbole. If the lawyers need to be consulted to change dependencies this is something a developer should know and account for. Why keep devs out of the loop?
I consult with other devs, QAs (if needed) & external teams, perhaps with a ticket if deemed necessary, other times just a PR. I run the (CI) regression, I schedule/announce and perform deployment (we have platform team, not "devops" which is generally done by the app devs), I write the app docs, we have no legal documentation that lists the licenses for the dependencies.
I do this as a dev - why should I not be able to recognise if a change is small or not? let alone never being able to.
One of my friends is a technical writer and she is amazed we put up with this on the engineering side. No one would ask it of other professionals.
From my experience, this is more a cop-out than anything else. At some point I'd expect you understand children with a track record of doing as they are told and informing you of important details do not need to be strictly parented around every corner. To expect that very thing from adults with way bigger incentives to behave feels off.
In my experience that’s very rarely if ever the case. Managers will always favor features over fixes in the kind of company that ends up with a crippling tech debt problem. They got there by not listening to engineers and having salesmen managers. These companies never change and no manager wants to be the one who’s fixing things for the next manager after they get promoted. People are idiots (maybe) but they respond to incentives. And very often the incentive is that problems that may arise in a year or two are someone else’s problems so not worth fixing now.
Your tedious tasks are important. But some of your research/autonomous work is important as well. But both are sometimes hugely wasteful as well. I'm regularly reminded that someone more senior can ascribe "business value" to something and push that to the top of your priority list even when that thing isn't valuable.
To me, as a manager, it's worth thinking about it from the perspective of praise. People might feel better if you're reminding them that the tedious stuff IS actually important, IS actually valuable (and why), and etc. And it's important to tell folks to share their side/research efforts as well. I've neglected to share so many of these little efforts over the years, but feel that they're almost always well received.
Last part said a different way. Share something, get the response, and then do what you can to connect and make it more relevant to a real problem or issue if it's not already.
So yes, we have happy developers that have good morale. But we also have probably twice the number we need because nobody put their foot down and said "this is work, not play".
I've tried to stress to managers in the past that developers feel the pain of code debt. It makes us slower! Enable us to spend time sharpening our tools and managing our codebase.
One problem of course is, not all SWE can do this well. I wouldn't necessarily trust a junior hire to recognize and execute a proper refactor.
Other refactors and systemic expansions, like a slot-based system for advertisement placement, worked a lot better, because I'd learned a little about how to dig into what problems actually existed and how they were causing aggravation to people.
There's got to be a limit to this line of justification though. Lots of people have just plain wrong ideas about 'web development', so catering to their ideas doesn't serve anyone well (except, perhaps, those people, who in the short term don't have to learn anything correctly).
A colleague shares stories of his team who don't grasp the difference between GET and POST, don't understand the term idempotency, believe that 'web dev' testing only means 1 thing, etc. There's... 5 of 6 of them, and only one of him, so... much stuff ends up staying 'wrong', and the 'wrongness' in each section of the code ends up compounding 'wrongness' in other systems/features as they're being added. This matches how this team thinks about web/software development. But it's not in any way beneficial.
The question becomes--where?
This company was incredibly successful up until COVID and is still ticking along, so it's hard to argue. I gather they've done significant work to rebuild the universe in that time, though. I might've just been early.
The problem I hadn't fully understood was a mix of the last point you suggested--tedium's just how it is--and a set of libraries built up as coping mechanisms that were intrinsically tied to the servlets process. Not really written to be able to be shimmed into a better world without dragging the whole thing there, and not enough appetite to try for it.
My company at the time laid off my entire division. I decided it was time, needed a job of course, and so applied for and landed a job as a "senior SWE".
Once you finish meeting minimum requirements, should you have that margin padding, you can then refine what's been created. Fix issues or shortcuts you may have taken, improve or optimize some portion that'll give significant improvement in experience, add some additional functionality you think would be nice to have where permitted (while the context of everything is fresh in your mind).
Ultimately what's delivered will more often than not meet minimum requirements so whomever requested the work will be satisfied. They may even be incredibly pleased and consider you a wizard for some of the improvements (they also may not want the improvements so be sure to keep those modular you can very easily slice them off if they're undesired).
This keeps everyone happy really. When you start trying to optimize on the estimates so they reach actual time or a little under actual time to pressure developers to do OT, that's when you get into toxic environments. If you give a little error margin developers will likely reinvest it in your application where it sparks joy in them meaning you're about to get the highest quality work, the stuff the engineer wants to do.
Where I work we have 1 'maintenance day' each sprint where the devs choose what to work on. That can be fixing annoying issues, improving the code, learning something, trying something out, etc. It works well when other things aren't taking priority (which is far too often tbh).
The modern office seems hellbent on killing every last bit of slack in their workers, then wondering why they leave or get burned out.
I realized the other day that a big part of my drive to move towards self-employment is really just a way to carve out time to take adequate care of myself. I have significant doubts that it is possible to continue to advance in tech to staff+ levels, be a good spouse, parent, and friend, and not run myself into the ground with physical/mental issues. And that is sad on multiple levels.
So I respond by easing up on advancing my career, because it gives back to me the least.
There's a book to hunt up...
Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency
It's written by Tom DeMarco of Peopleware fame.
I always wondered why people complained about how much time certain aspects took up they could automate away and my question was always: well, once you automate away that nice simple task, what do you do with the extra time? You created more slack and someone's going to come looking to fill that void the second they're aware. And the new task is going to be more difficult until you get to sets of tasks so cognitively intense and complex you can't simply automate them away. Then your day is filled with incredibly challenging stressful work.
I have no issue with doing complex work, I've spent my career doing it. What I have issue with is the amount of such work I can do in any given time span. At some point I need a break where I do something simple and mundane. Continous complex problem solving is the road to burnout. You'll be greeted by more and more failure and lack of visible progress combined with ever increasing stress levels.
If you're an entrepreneur, small business owner, or manager looking to optimize your labor force then you may want the opposite. You want more time to focus on the complex and the more simple you can automate, the better or if you have a workforce, you want your highest comped individuals focusing on the most optimally complex tasks they're capable of handling. You don't want your Fellow level engineer refilling the coffee maker because it's empty or implementing some basic features on some UI, go back to inventing new algorithms, math, or building new technology... but people need those nice relaxing breaks and slack, they can't run at their best constantly.
Software Engineers will still be pulling 100k+ in Europe with those 2 hour days.
I can easily imagine how it goes - because pushing tickets over takes time, bunch of meetings during the day takes time, explaining stuff to junior devs takes time, reviewing pull requests and answering to comments takes time, clarifying things with QA/BA/PO, figuring out which libraries to use by googling takes time.
I saw devs that think these things that I have listed don't feel like "real work" but it is. There is also no way to automate meetings or discussions over PRs.
It's heartbreaking how much human suffering is entirely avoidable in a post scarcity society where it is still artificially enforced to avoid the "moral hazard" of commoners daring not to toil or worry every waking hour
It gets worse, too - as long as I've worked as a software developer there's been some sort of time tracking system in place, and it has to be planned up-front, and has to work out to at least 40 hours (after they "negotiate" your estimates down). Which leaves no time for the unplanned stuff that inevitably comes up. This always goes in a cycle like this:
1. Management demands that every bit of work be associated with a ticket
2. devs just open tickets for the unplanned stuff so that it shows up in the ticket tracking system
3. management complains about devs opening "their own" tickets and prohibits self-opened tickets
4. devs do the unplanned (always "super high priority!") stuff without any ticket tracking and fall behind on their "planned" tickets (that nobody really cares about any more, but are still on their board)
1. management demands that every bit of work be associated with a ticket...
Single line tickets from the CEO that turn into months long projects with no guidance on the functionality. Engineers that burn down entire features because "it's bad code." Secret projects where you get berated for asking stakeholders to to clear up requirements because "you're scaring them."
It's easy to look at a rigid structure and assume it sprang wholecloth from Zeus's head - but most of the time it's an overcorrection. Being burned by a company where Freedom is just an excuse to make employees to work overtime will make anyone go a little overboard.
I hate this. An estimate is an estimate, there is no negotiation, negotiation an estimate is simply interfering with it, making it less objective. It can also be a trick to put pressure on developers.
This has been huge for me at my current job. I saw some unused equipment in a lab and started asking questions why. Turns out the thing worked, but not great, so no one used it. What started as just fixing bugs and adding features became my own line item in the budget and requests for the (new and improved) equipment from other departments. It's something I look forward to working on.
And yeah, it's definitely not just the best ones. I am mediocre and am so bored and so done with dev.
* the downtime is there because I am waiting for planning, UX, and UI for a different high priority task.
This was after they encouraged a certain "cool culture" for a couple of months due to the lack of direction. It was pretty funny that I did not only get micromanaged, but was told I did the wrong thing, and then asked to do a third job that was not my responsibility.
Or more specifically, explainable business impact.
But it's hard to explain how the code has become horrible and needs a refactor to makes it easier on devs, reducing stress, reducing likelihood of both bugs, and developers leaving.
The thing is, executives measure themselves by how quickly they get promoted into the next role, so no one cares that good management might reduce turnover in the next 2-3 years--in fact, the executive mindset is that it could just as easily increase turnover (what if we invest in their careers, and they leave?)
Or a reorg happens and you land a shitty manager.
To be fair, almost all my managers were amazing, people who truly cared about their staff: at professional level as well as a personal level.
I've only had one absolute psychopath as a manager ... but I should thank him because he was the last straw and gave me enough courage (and anger) to leave AWS and start my journey as a solo entrepreneur.
Is that the premise? Seems to be saying that constantly changing skills exhausts developers to the point that it becomes more lucrative to work in another profession.
Although, I suppose learning new things just to tread water can be boring too.
Doesn’t have to do with boredom so much as maximizing potential.
It may not be a matter of "the best". I have taken a personality test that had an item on it that covered product lifecycle. If 1 is initial conception, 2 is prototype, 3 is initial release, 4 is major enhancement, and 5 is maintenance, my personality is that I prefer 2 or 3. By 4 (major enhancement) I start to get bored, and by 5 (maintenance) I'm definitely bored.
It's not that I'm one of "the best" (though I like to think that I am). I have a personality clash with the later stages of product lifecycle.
Now, if I really have to spend that much time prepping to interview at your unprofitable company (that most likely will go under) don’t you think that I would try my best to work at faang instead ?
As matter of fact, I was rejected at plenty of these small insignificant companies, but end up having offers as L6 at FAANG.
Be humble and you will find plenty of good engineers out there.
I know tons of good swe that don’t want to interview/ work at mega FAANG, and if I was running a business I would definitely try to attract those talents by being different. Offering a “normal and reasonable” interview process along with better perks, flexibility and wfh.
Instead, they all want to run bizzilion of micro services in k8s
The backlash against leetcode is the same as backlash against other types of tests: most people are going to fail and most people don't like failing, so they blame the test.
I interview many candidates at FAANG, I can easily tell the ones that have prep by just doing leetcode and the ones that knows the shit.
I couldn't care less if you can solve all kinds of complex dynamic programming challenges.
I ask coding questions that you won't find in leetcode and requires problem solving skill and good craft.
And this is because I do like working with smart people and not with people good at memorizing patterns.
I think it is easier to know the shit to do LC interviews than somehow memorizing the question bank. I haven't seen many people succeed who were unskilled but managed to just memorize the questions.
I think LC style interview have ruined the interview process in the tech industry.
Note: I do ask candidates to code during the interview, but I ask things that are related to real problem, some of which, I had to solve in my day-to-day.
In addition, I put a lot of emphasis on how well they articulate their thought process, and the quality of their craft.
Also, I would not discount `past experience talk` that easily. Actually I use that to drill down in their resume to better understand their real contribution. More often than not, people just lie. They are very easy to spot. At that point is game over. I don't care if you nailed the coding. If you lie and oversell yourself you are done.
Another thing that I find very annoying is that very often interview are conducted by junior engineer, and they don't have imo the maturity and experience to properly assess candidate skills and potential. You either do well according to what their expected solution is, or you are out.
Interviewing is not just a binary process coding well yes/not. It is a little more involved.
I passed candidates that did not do well on coding, but I was convinced they had potential. Whereas I did not pass candidate that did very well on coding, but did not show any interest or passion at all.
You put the bar wherever you want. A company can decide to set it lower than what you would expect or like, but it could still make business sense, e.g. if 99%+ of hires still perform well with this bar and the company would like to hire faster.
This is related to:
> and barely get anything done. Plus the quality of their work (generally speaking) is very low
That's a problem of the performance review process. If everybody considers that someone is not delivering, that could be for multiple reasons, and even with a very high hiring bar that could still happen, so you can't rely solely on interviews.
If you don't have a good performance review process, you'll end up with worse hiring because you can't measure the impact of your changes.
> I passed candidates that did not do well on coding, but I was convinced they had potential. Whereas I did not pass candidate that did very well on coding, but did not show any interest or passion at all.
Can you do that objectively? It's very easy to introduce bias if you try to evaluate whether candidates show passion.
It’s good you like that I suppose, but it sounds absolutely bonkers to me.
The mold being answering questions about their supposed area of expertise.
I think people really like to claim that they are misunderstood geniuses who just don't fit the mold of being able to answer questions about the things they know. I have no doubt that such people exist, but I would not want to scrap an evaluation system simply because it doesn't catch every possible person, more important to me is keeping bad people out.
you seem very confident about that. In my experience LC/FAANG style interview don't keep bad people out.
But I have never encountered a company that doesn't have a on-the-spot technical interview (involving coding or math) that has had more success keeping bad engineers out than FAANG.
I am arguing that LC/FAANG interview does not do a better job at filtering them out.
The solution: accept that you will do bad hiring, but that you will let them go as well.
Instead, everyone want to be politically correct and the play safe. So people are hardly let go.
Also working at FAANG implying you are a stellar swe is a big time BS.
it's fascinating how these playbooks can recycle themselves in any number of scenarios. yes, conditioning on being an engineer at FAANG you are much more likely to get a better engineer, I'm not going to apologize for saying the truth.
e: not going to keep replying, I seem to recall getting in previous fruitless arguments with you when you suggested banning renting was the way out of California's housing crisis.
You're talking of gigantic tech companies that actually have a business interest in getting that right and you just assume that haven't done any studies about that. If you want to argue they're wrong, fine, but the money is against you on this, so more proof and arguments would be welcome.
I think we all agree that no interview process is perfect, but you're basically claiming that they're all equally bad.
I am constantly interviewing candidates for roles at my company. It seems like CVs are a complete gamble. Either some are lies, or wildy understated, and everything in between -- at all levels of experience! "[J]ust to prove..." and yet so many can not do the 2022 version of FizzBuzz. I am stunned how many senior (well, so they say!) hands-on technical applicants cannot do basic things like write a very simple linked list class, or explain to me how a hash map works. For get about explaining the finer points of sorting algorithms (honestly, very low value in my line of work).
There is no reasonable alternative to testing of some kind for hands-on techincal roles -- I am flexible about method: (1) white board coding (ugh in 2022), (2) IDE/text editor on shared PC / video chat (meh / eh in 2022), or (3) take home (the best in 2022, even if there are drawbacks for people with families).
Joel Spolsky said it best about hiring: The goal is to avoid bad hires. Average and above are fine.
I've been in software development for 15 years and being able to explain either of these things has never come up and I probably wouldn't be able to give a decent answer without reviewing the topics specifically.
I would expect most people I hire to be able to explain how a hash map works.
I'd care more about an applicant understanding the concept of a hash; or hashing in general. If an applicant shows that he understands that a hash is a magical and fascinating mathematical concept; and it can have uses in Information/Computers, that would be more interesting (to me) than someone who memorized a hash map definition.
He can always learn about a particular application of hashing (hash map, for example). But the latter shows aptitude and capacity to learn these later on the job.
Although I would probably ask them to specify the level of detail they want before trying to comply, and then not get the job because I ask a lot of unnecessary questions or something.
an in-depth definition would be that, followed by how you implement a hash map (thus if your language of choice already has a hash map, don't use that but show us how you would implement this classic data structure), how do you avoid collisions, maybe discuss some various ways that you could implement it and what the tradeoffs are. This would be you 'understand!!' what a hashmap is, like deeply. (I hope my tone makes clear I do not advocate for this)
on edit: I think it seems you might actually be advocating for this deep definition? If so, probably you are working at relatively low level?
on edit 2: for example if you were using Python you might say a hash map is a dict, and talk about how to use dict, the in-depth definition would not allow this. Which I think is what the other posters were worried about, being asked not to use your language's implementation of the concept but go lower and show you can make the whole thing.
I work as an ML engineer, so very high level.
If you ask for the in-depth understanding for positions that would never need it, it follows that you will be disadvantaging many applicants who might be great for the position and advantaging applicants who know at least one non-relevant thing.
Because a hash map is:
1) a pretty basic concept in data structures
2) Variations on hash maps are used all the time in the real world. If you use objects in javascript, dictionaries in python, or maps in C++, then you are using things that essentially implement hash maps.
Point number 1 is like if I went to an orthopedic surgeon and they couldn't tell me what the liver does. You can say "well the liver has nothing to do with my finger that got smashed in a car crash, so what do I care." Or you can say, "that seems like a red flag. Maybe I'd be safer choosing a different doctor."
* Note: I have no idea how often the liver comes up in orthopedic finger surgery and for all I know it's a lot. But I think you get the point.
Yes, you use them. You don't build them. To torture your analogy it's like asking the surgeon to explain how their bone saw works. Why should they know? All they care is that it cuts bone.
Analogies aside, hashmaps (in one implementation or another), arrays, vectors/lists, strings and arguably sets are very very common data structures in most modern languages. I don’t expect someone to be able to build a hashmap from scratch but I do expect an experienced engineer to have some basic idea of the pieces that go into building it as well as it’s properties (not necessarily ordered, O(1)ish sets/gets, collisions, etc). Knowing this kind of thing helps you understand when to use an object in JavaScript vs a map. Or how dictionaries differ between python 2 and 3. If you understand the underlying data structure, then you know what questions to ask.
* in python 2, a dictionary’s keys are not guaranteed to have consistent order. In more recent versions of python 3, they ARE guaranteed to have consistent ordering. This has ramifications for the code you write, and it’s especially confusing if you don’t understand hashmaps because 99% of the time, the order will be maintained in python 2 even though it isn’t guaranteed. But relying on things that are true most of the time is a very bad way to write production code :)
Yeah, I'd say this is all in knowing how to use a hash. How to build one would go into the underlying data structure.
Oh I wasn't trying to say that this knowledge was valuable or not. I was just pointing out that you seem surprised that experienced people wouldn't be able to provide a good answer to that question. And the answer is that in many jobs, its not useful knowledge.
What has burned me, however, cannot be tested adequately in an interview. Bad attitude and laziness. Anyone can behave well in interviews, so we've hired a few people who turned out to have a passive aggressive streak or condescending attitude that interferes with the rest of the team. We've also hired people who are really great developers ... when they work. But they're really lazy and getting them interested enough to do the work is the hard part.
Hiring is hard. I doubt I need to tell you that. There is a reason we gravitate towards hiring people we've worked with in the past, or come recommended by someone we trust.
If you can point me to extensive open-source experience on projects that roughly approximate professional coding, then fine, I'd be happy to walk through your code with you instead of doing an algorithmic problem. The issue is that that's a minority of developers... most people don't have the time or desire to do extensive open-source work outside of work hours and I don't blame them for it [2]! But given that resumes are unreliable, I need to test you somehow.
[1] No, I don't ever have to reverse strings at work. But I do have to write efficient code. And if you can't conceptualize how to reverse a string then you probably won't stand a chance at more difficult algorithmic issues I often come across.
[2] I don't recall who it was, but I once heard a very well-regarded chef say that he's tired after work and so he doesn't like to cook much at home. I have zero problem with a developer doing the same with coding! Go home and work on a hobby, spend time with your family, or smoke pot and watch netflix... I care about what you are capable of at work, not what you do with your free time.
In my experience people know these things, they just don't realize that what they're doing can be described generically.
An example: If you're in an iOS interview and ask the person to describe a graph, they will get very angry and complain that this is useless knowledge and they don't need it to get the job. But if you ask the same person to describe an UIView hierarchy, they often have no problem doing so. So they _know_ what a graph is, they just didn't know it had that name.
With that in mind, my tests shows that generic algorithm questions suck and questions themed around actual features of the product are the best. If you word the question in a way that feels relevant and is familiar to developers, they will be more likely to know the answer even if deep down the solution is exactly the same as the generic ones.
It depends on the job. I have had interviews that broke the mold here and were panel discussions or more job-talk experience, and I found the interviews uniquely exhausting because they required their own set of skills to study for that were different from the “leet code” style. At the extreme end were the take home projects, which I simply didn’t have time to do for every company and were extremely unattractive to me for that reason. I actually find doing leetcode style interviews for me required the least amount of prep and was the most straightforward, especially when they were structured to leave me with time to ask and talk to real engineers at the company.
> Now, if I really have to spend that much time prepping to interview at your unprofitable company (that most likely will go under) don’t you think that I would try my best to work at faang instead ?
I feel the same way.
That said, my company and many others make the interview process much easier but still find it difficult to hire. I know this is a common problem, because I get bombarded with good job postings by recruiters and they are usually still there months later when I finally get around to responding.
This is not the only reason for the quick learner -> high dropout thing. By the article's definition, I'd be a "fast learner". Most of the industry expects me to come in already knowing what they want me to know, while most ways to obtain said knowledge are blocked by barriers difficult to bypass for non-corporates. Meanwhile, almost every corporate I get in expects me to do the same things for several months and gives me a few learning opportunities every year. At the same time, university primed me to absorb knowledge like a sponge and never get stuck on a single perspective, while corporates are complaining why graduates don't know Spring after graduating.
So somehow you're expecting me to stay while my knowledge deteriorates unless I keep it up in my own time, all the while giving lowball raises and not satisfying my desire for challenges. Yes, I get it, grunt work has to be done. But you really can't tell me you're in need of software developers when you actively push people to do the very thing you claim you don't want them to do.
That's not really the expectation... the expectation is that you'll be replaced by someone younger who's already learned all that.
The expectation for more senior people is that they'll go in to management or architecture.. or maybe burn out.. it doesn't really matter to most corporations, as their workers are replaceable.
And even as an engineering manager, I do not feel safe. I think only once you reach director level, you are protected from market hype and newest frameworks trends.
I was actually surprised because I heard so much about crazy new materials like carbon fibers, graphene, technologies like 3D-printing,... but apparently what makes a machine break are still the same things: mechanical stress, heat dissipation, friction,... new materials and processes might change the coefficients, but not the (mostly Newtonian) physics (my interpretation btw, not his words).
One could say the same thing about software engineering - true fundamental advances in algorithms and data structures are sufficiently rare that it wouldn't be a nuisance to keep up with them. But the %-age of how important those basics are relative to the extremely fast-changing landscape of tools and frameworks is much smaller (plus, one could argue that even the fundamentals see a lot of shifting ground in CS, with neural architectures, differentiable programming, not to mention quantum computing).
I don't really see the difference between that an programming. Writing code is still a bunch of "if" statements, the same underlying data structures, same algorithms, etc. There's some new technology being added on the top akin to carbon fiber and the other things you mentioned but it's fundamentally the same.
For example, SQL & Unix have been around since the 1970s.
Linux since late 1991.
Javascript: The end of 1995. NodeJS: 2009.
Sure, there's a ton of churn in the JS Ecosystem, but all it takes is a bit of wisdom, skepticism, and patience to avoid the hype-cycle.
Also, once you learn to build certain things with a programming language you learn the paradigms of the system you build.
For example-- Web Servers. Looking at ExpressJS vs Python Flask documentation, there are many analogous pieces, because they follow the same standards for protocols.
Another example-- data engineering / statistical computing: Checking out R vs Python packages, there are a lot of the same concepts, just in a slightly different format/language.
HTTP/1.0: 1996 (RFC 1945)
TCP: 1974 "In May 1974, Vint Cerf and Bob Kahn described an internetworking protocol for sharing resources using packet switching among network nodes."
"TLS is a proposed Internet Engineering Task Force (IETF) standard, first defined in 1999"
Considering all of this... I don't think most major things actually change that much. Sometimes a popular new framework takes the world by storm, but that's pretty rare compared to the output and churn of the ecosystem.
Especially if you’re a full stack eng who is constantly swimming over the entire stack and they keep pushing new DBs, new logging tools, etc.
There are commonalities but it is a lot of learning as you go. I used to know Angular pretty well but now I don’t remember it at all. I haven’t even gotten to really ramp on React as much because my company uses it in such a terrible way that it’s clearly not fit for.
After the first ten years software development becomes quite intuitive and you internalize all those best practices. You can be trusted to start a new service from an empty git repository. Later it gets incremental, there's a lot of path dependency in languages and frameworks and few things come out of the blue. Those that do are frequently intellectually stimulating to learn.
But interviews have been steadily getting strange and difficult (in a way not related to real life software development), at least in the last 10 years.
But doing the same to workers with 10 years of real world experience doesn't make nearly as much sense. Like hiring medical doctors by quizzing them on organic chemistry problems. Google and Facebook do it because they can and they don't know what else to do, but I don't understand how it became a universal practice.
The only attraction in software development is the relatively good pay. The job itself sucks. You'll spent your life sitting in a chair looking at a text editor, and that's the best part of your day as about 50% of it is distractions. You're quite unlikely to work on something truly creative or thrilling, so it's mostly a boring grind.
Then, as the article mentions, it turns out the grind was for nothing and the rug is pulled every few years and you have to start over again. The job is cognitively taxing so you'll turn into an absent person that lives in their heads, it drains your life energy.
If I would be young now, I'd say fuck it and go install solar panels or heat pumps. It's outside, physical but not too physical, thus healthy. You get to meet lots of people and you see the direct result of your work. There's no office politics and you're contributing to a tangible good thing for the world. Skill requirements don't change much.
You might come home somewhat physically tired (but over time it normalizes), with a clear head and not a care in the world. There's no overflow between work and personal life.
Chose wisely, young ones.
You go to different places and different people, every single day. That's 100% less repetitive compared to sitting at home or going to the office to see the same people.
As for the tasks themselves, it was merely an example, but even for this example I disagree. My brother-in-law basically does all of these things, both for private citizens and industry and comes across a wide array of different situations.
I'm not saying it's absolute perfection, no job is. But I stand by my point that it has a series of very meaningful advantages: far healthier, more social, direct impact of your work, no cognitive overload, no politics.
Amen. For me the advice I give the young—-go for a trade. HVAC (especially if you live where it’s hot) and plumbing to me are the most future and recession proof jobs there are. Literally by the time other folks are graduating with CS degrees and massive college debt, you have been making 70k a year for 3 years and are about to clip 6 figures for the rest of the time you want to work.
One day a computer will be able to write its own code (and that’s not that far off now), but no robot or computer in this world will be able to come to your house and fix a clogged toilet, or replace a blown capacitor in your heat pump and people will always be willing to pay nearly anything to get those two problems replaced.
As all the mid level white collar jobs keep getting automated away, there's going to be a glut of people in need of income who are more than capable of learning a trade if their ego can handle it.
Why is this “unfortunate”?
Also, sitting and staring at a text editor should not sound that awful for anyone who likes to create via writing code. Because that's how you do it. But that's not what you experience, obviously. It's about what goes on in your head.
I remember the feeling after taking a new job as a fresh graduate. It felt ridiculous that I know get paid for doing the thing I've wanted to do most of the time in the past ~12 years but I was told that you can't do that all day because you have duties. (Now the pay was actually pretty bad, even for local standards, as my first job was in an academic research institute.)
Which is btw one of the depressing thing for a lot of data engineers: we used to play with those cool distributed processing frameworks, and now? We are mostly writing some terraform to deploy cloud resources, most of the distributed part being handled by those cloud providers.
Sounds to me like switching one provider/tool by another - or are data engineers feeling bummed because the job has become too trivial / less fun?
In short, 5-10 years ago, writing mapreduce / spark jobs (or even debugging / optimizing hive jobs) was complex enough that it was often the job of the data engineer (and not the data analyst / scientist). And I do not only mean writing the data processing logic, but more importantly, properly configuring it so that the resource footprint was acceptable. This required a good understanding of the underlying framework, analyzing the job execution plan, tweaking the resource configuration, etc.
Now, writing distributed jobs is pretty trivial with most cloud providers, hence it is now purely done by data analysts and scientists. And the data engineers have switched to doing more of a devops kind of work, doing the plumbing between the various cloud components and the IaC required to provide those cloud resources to other data users. In short, you can be a data engineer and have absolutely no clue on how distributed systems are actually working, this will not be an issue in your daily job.
Here, this rando website says that 46% of software engineers are 40+
https://www.zippia.com/software-engineer-jobs/demographics/
Now I'm curious, this stack overflow survey paints a grimmer picture:
https://insights.stackoverflow.com/survey/2018
That's a survey though, I'm curious what biases are going to exist in the data. We might assume that older software developers move around less? May be less likely to respond to surveys? May be less likely to visit stack overflow, especially if they do less hands on coding?
40 is definitely not that old anymore for tech I think. Well I'm 38 I'll find out soon.
I think the overall premise of the article makes sense, but where I differ from the writer is in how I view the need for constant learning and self-development. The author writes,
> Like a fast, expensive car that quickly loses value as it's driven around town, the skills and human capital of software engineers fall apart without constant, expensive maintenance.
What the author is talking about, however, is not a material object with transient importance to one's life (i.e. a vehicle), it is your mind. Learning new things doesn't just mean you retain your relevance as a software developer, it also helps stave off cognitive decline. It keeps you sharp, relevant, mentally agile. That may not be the case in every job, but the field as a whole certainly has that attribute.
It's not that learning is an unattractive aspect (I agree, it's a great feature!). Instead it's that it levels the playing field between those entering the profession and those that have been in it for many years. Yes, you still have "experience" as an advantage, but you can't say you've worked with LATEST_TECH for many more years than someone coming out of college.
Contrast that with other professions, like law, or medicine. Where it's not just "experience" working in your favor. But actual knowledge of the existing laws and medical practices.
In my experience knowledge decreases very fast if you work in a programming job (exception: if you use an insane amount of your free time to avoid this decrease).
I've never seen them at home reading a law, bylaw or a "teach yourself how to design a bridge in 30 days". Whenever something changed in their profession (very rarely) be it law or similar they went to seminars about it. Some of the time they (or their "guild") were even consulted so that stuff ended in the law itself. Something really new in the industry (say some software tool or whatever), the company paid for the trip, and the training. The older they were, the more compounding experience and knowledge they had. With each year they were worth more to their respective companies.
Contrast this to my current company (previous were even worse), where my boss proclaimed that all new infrastructure is going to be in Terraform (I had no problem with that, but zero experience), hired a new guy almost straight out of school with 1.5 years of TF experience (and absolutely nothing else from what I've found out later) with much better pay than the rest of the team. Oh, and he said he'll expense us any TF book we want to buy. So here I am, on my 2 week "long" vacation reading a fat book about some technology X which we'll be abandoned in couple of years time.
The bug is in our brains. After two decades, you are not the fast learner you were, especially after you manage to fill your clothes with keys traded for responsibilities.
Realizing that is a source of mid-life crisis. Trust me, I've been there.
I found that excitement/motivation is pretty important in actually learning new things. I'm close to 40 now and don't find it's harder to pick up new things when I'm motivated. If anything, I find it easier as I have a broader background knowledge and spend my time more effectively – I didn't believe my teachers when they told me that taking notes helps you remember stuff but they were right and I was a stubborn idiot. All of that offsets the undoubtedly decreased ability of my brain compared to when I was 21. It's just that I've done a lot of things before and find it hard to motivate myself for "$new_thing that's fundamentally just like $old_thing building $new_app that's not really any different from $old_app".
I do not worry about agism or work at all.
Lets just say that when we were studing, most ppl were not the brightest tool in the shed. Now its supposedly many many times worse.
In the past CS (if there even was a CS degree/course offered) would me mainly populated by "the nerds" who were really into it, money be damned.
Arguably this could be why the educational requirements around other well-known lucrative positions became so difficult.
Not that these people automatically lack the ability to do these things well – some do, some don't – it's just that they're different fields with different training, mindsets, interests, etc.
In chemistry, they worry about the properties of individual atoms, and how those atoms combine to form molecules, and how much energy that takes or gives off, and where the electrons distribute themselves in the molecule, and how that affects the properties of the molecule. In chemical engineering, they worry about how to efficiently make this stuff in multi-ton quantities without blowing up the city, and cost of raw materials, and disposal of waste products, and things like pipe bursting strength. Yeah, they'd better know some chemistry, but they need to know a lot more than that.
In the same way, computer engineering or software engineering is about the efficient construction of larger-scale programs that adequately meet the need they are written to address. Let me unpack parts of that definition.
"Efficient": Well, that's actually a bit of a lie. What I should have said is "somewhat less inefficient", but my description was already long enough. But large scale software construction is inefficient, and the larger it is, the more inefficient it is. The fundamental reason is that brain-to-brain transfer of information is lossy. The bigger the program, the more brain-to-brain transfers involved.
"Larger scale": There's something called the "rule of 10", that says that for every factor of 10 larger the program gets, a new set of problems comes to predominate. You still have at least 10 times as many of the old problems, but you also come to have new problems. On truly large programs, the biggest problems may be transfer of knowledge between generations of workers.
"Adequately meet the need": I didn't say "bug-free". Larger programs have bugs. They have databases just to keep track of the bugs, and steps to reproduce them, and to decide which ones to bother fixing, and to figure out who (or at least which team) should fix them.
I'm not sure that many CS degrees to much at all to prepare people for any of this. But I suspect that 90% or more of people with a CS degree are going to wind up working as computer/software engineers rather than as computer scientists, and so I suspect that there's a mismatch between education and career here.
Because by hiring masters degree interns you're not exactly scraping the cream off the top...
Masters degrees in Computer Science -- unless used as an immigration thing -- make no sense.
The make no sense for the research route -- in CS in the USA, you go straight to a (zero tuition + living wage stipend) PhD from undergraduate. No reason to pay for a master's degree.
The make no sense for the SWE route either.
Masters students are mostly in it for either a domestic degree or because they couldn't find a (good enough) job out of undergraduate.
Most departments know this and treat their MS program as a total cash cow.
Is a software developer someone willing to learn new languages and uses software to solve problems? Or is a software developer someone who knows latest.js and writes front end code or someone who writes C code to makes the LEDs on the machine blink.
There are two opposing hiring methods: * hire for positional skills * hire people not positions.
At a smaller scale, maybe you need to to just be a flexible person who can do anything. But how many start ups are going to hire a 35 year old C programmer to do js front end, or type coffee script? Yes that's 35 year old may have learned a lot of lessons along the way, but at their stage in life they're also going to likely cost you more and in all likelihood have more responsibilities outside of work.
Myself, I'm a generalist. I have programmed all levels of the stack. Consequently though, I can't claim deep mastery of many specific areas that a lot of "skill" positions require. On the hire "people" not positions, perhaps I can fulfill those roles but in doing so, as I become more senior I leave a lot of my skills sitting in the toolbelt to do a narrow software task (at a mega corp) and my lifestyle isn't well suited for the grind of startups (many many hours). Sometimes feels a bit of a catch-22
Yes. A software developer is someone who develops software.
I got the impression that there is much less of this in lower level languages. It seems like there is a fairly stable foundation of C, Cpp that everything else is built on top of. I wonder if embedded programmers have this problem.
We have been trying to use Rust for some new projects but cross-compiling is still much more hit-and-miss with Rust (i.e. third-party libraries) than it is with C. I imagine it would be worse for proper embedded projects.
But the language does bring benefits. In my experience modern strongly typed languages with large standard libraries and nice tooling are more productive than C (and probably more than C++, although writing idiomatic modern C++ is quite nice). C's simplicity is nice, but it still exists in a world where your only option for 3rd party libraries are zips downloaded from some random Sourceforge. Trying to write a C program with effective string handling is an absolute nightmare. All those things are solved many times over in other languages.
As a tool for writing very low level routines handling fixed length data, C is pretty good. But embedded development is moving away from that - every project seems to have some sort of web API, and that's when the downsides of C really start to show themselves.
Not only the lower level languages, but fundamental skills in general, I think. Undertanding the computer from the hardware level, OS level as well network protocols, filesystems etc tend to continue to provide benefits even if one fashionable technology is replaced by another.
Similarly, fully undertanding algorithms, data structures, design patterns and architectural patterns also generalize, provided you DO understand these concepts with their strengths, weaknesses, and when to use them and not use them.
If you have the skills above (+ some math and general troubleshooting ability), you are able to approach most software/compute problems from first principles. If so, you may find that you are able to take up senior roles even involving technology you have not used before, as long as the tech introduces few new fundamental ideas. (And if there are new fundamental ideas, you need to learn those to keep up, but such ideas arrive much more rarely than new tech).
People who do not learn these things from first principles, but instead are memorizing patterns they learn from other people, have to do a lot of new memorization when new tech becomes fashionable.
Not only does that take a lot of effort, it also makes it unlikely that they will be able to identify antipatterns by themselves, and it may cause them to end up trying to use the new and fashionable tech in ways it is not suitable for.
But will you be hired for those roles? Not that many companies will do that I think.
Also, some of the companies that hire look precisely for such abilities.
I think market pressures make this a difficult fit in the workplace. High turnover (~2yrs) and larger systems encourage shorter term results with a shallower understanding.
This isn’t a criticism (I have so so much to learn still, I’m in no position to judge, nor do I want to be), but more of an observation. Balancing learning churn(frameworks/languages) vs fundamentals(theory, concepts) is a struggle I think I will have for the rest of my life.
The turnover problems saying that relative wage advantage declines? Their chart on a log scale shows that the wages are still really high compared to non-CS jobs. A more likely interpretation is that junior programmers are for whatever reason highly paid in their sample. Those error bars are suspiciously tight, so there's a good chance their sample is biased.
The selection problem data? First, they're missing a plot that shows that the same correlation (higher AFQT scoring individuals are slightly more likely to leave the field) doesn't hold for other majors/fields as well. Second, is the AFQT psychometrically valid when compared across different age groups? Third, is their sample valid here at all? It wouldn't take much bias to make these correlations disappear. The super bright principle engineer is probably not going to take the time to sit an AFQT and be part of this.
Then we have weird assertions without citation like "Some workers, endowed with superior ability, learn faster than others, picking up skills at a quicker pace. Those workers will tend to sort into high-skilled, fast-changing professions initially, maximizing their early career earnings. Less impressive workers will sort into low-skilled, slower-changing professions."
A quick glance through the original paper the data is from does not fill me with confidence. The idea that maybe conventions for job postings in different fields might be different and thus mess up their data doesn't seem to have occurred to them to start with. The NLSY data they work from for AFQT scores can't be used naively. People drop out steadily after the initial tracking period.
So: bad academic research, bad interpretation of it by a layman.
[^1]: http://psychology.okstate.edu/faculty/jgrice/psyc5314/Freedm...
[^2]: Sadly really hard to find. We need a cheap reprint of this.
"The goal of software development is to automate things. So, in principle, with time there should be less demand for software development skills because most of the hard work has already been done, and we have better, more high level tools. The only reason we see demand for software developers growing is because we let the bad developers in :) Bad developer can easily generate 2 FTEs per year, by introducing subtle bugs in code that someone has to find and fix. "
Anyone here has the actual source ?
I guess the underlying reason is that engineers wont be promoted to (real) chief engineers with agency. Being a boss requires reports for some reason. So experienced people leave sweetshops to escape the grind when they get fed up.
Sadly, this is absolutely true. Manage or be managed. Capitalism invariably becomes corporate (if unchecked, monopoly) capitalism which invariably becomes managerial capitalism, in which people are assessed by their position in the tree structure rather than anything they do, and 0 reports |= loser.
Unfortunately, if you think you can take on a middle-management role and also do technical work, you're probably wrong. Middle management isn't hard but it's super time-consuming, if you do it right (that is, if you care at all about the people you're managing, although you won't have much ability to protect them as you might hope for, because PMs). You'll barely know what the people under you are doing (most managers'll admit this in private) because so much of your time will be spent on meetings and political bullshit.
Big tech that I work at generally doesn't have MBA type managers and it is good.
True, but there are fundamental patterns that remain the same. And if we are talking about the level-of-abstraction type of change, then having experience in the underlying techs certainly helps.
I'm 26 years old. I have no idea what my future looks like. Neither do other people my age.
Curious where some HN users have gone when they left software dev, especially if it is something other than management of some type.
If we assume one version every 12-24 months, GPT 42 would arrive some time between 2060 and 2100.
Maybe a decade or two from now, they will hire psychologists to make sure the AGI's remain sane or at least safe, and not at all software developers.
That’s assuming that corporation are all about delivering the product they sell, and that the "side effect" of social bounds it generates is insignificant.
And the human review process is primarily aimed at ensuring that human extinction is still covered by the loss function?
Medical and scientific fields have continuous learning via papers, conferences, even courses that update peoples skills. Also, there’s new ideas and methods coming in with new people who then get involved in the skill exchange once hired (latest synthesis ideas vs. Picking up medchem).
And it seems to be panic buying and selling in this field - inhaling anything with a pulse 5-7 weeks ago and now trying to lay off half the staff today or next week. Same problems, same market issues.
And if the damned SWE’s we’re valuable they’d give them proper working conditions. As somebody wrote, lawyers don’t do jira tickets.
There's a reason I still strongly prefer candidates with a computer science degree to someone with 9 months at a bootcamp for some roles. New tools, frameworks, programming languages, and libraries constantly enter this industry. I believe knowing the fundamentals and having a deep understanding of how computers work allows you to more quickly pick up new things.
I understand there are curious graduates that come out of bootcamp programs who will dive deep and fill in the gaps and there are universities with subpar computer science departments. I still prefer the latter in general cases.
We Will Never Have Enough Software Developers - https://news.ycombinator.com/item?id=24910949 - Oct 2020 (10 comments)
I might not be the best developer, and France might be a bad job market that always requires a degree, but that's my reality.
Prime sieve is almost definitely in the top 10 of most written and published programs ever.
Interestingly enough at the end of the video he asks the AI to write some code that makes money. And it responds with "maybe try investing or not spending money". This is much more in line with the type of questions I get asked in my career and somehow I doubt I would still be working if I had answered the same way seriously.
These things are basically a glorified hashtable (with compression).
Much like what a google query does when it leads you to a chunk of code in stack overflow.
Luckily, there's much more to what SWE does, and it's high time people stop believing that AI is at the level where it can do the job of a SWE, it's ridiculous.
Or to put it in a way that's perhaps more clear: Go ask OpenAI to rewrite to GUI of FreeCAD to be usable, see what it comes up with.
I have not tested AI myself for producing code, but I toy a little (ok, more than a little) with various GPT instances to write prose. Sometimes it's great, sometimes it's poor, but:
1/ It never gets anywhere: there is never any resolution
2/ Sometimes it just loops, takes up a clue from itself and produces the same set of words indefinitely.
What I do is generate, survey, and then edit. It's a great tool to get new ideas. But how could this work for code that's supposed to accomplish something?
Code is famously much harder to read than to write; that's why people always prefer rewriting than refactoring. With code-generating AI, all that's left for humans to do is the reading, understanding, and monitoring parts.
It's a difficult job, and if done by incompetent youngsters, I think pretty dangerous too.
I've been quite happy with Github Copilot but it is not remotely useful to a non-programmer.
This frames it as a one-way cause and effect ("unless"). I wonder if the "dropout of fast learners" that _causes_ the labor shortage will in turn _cause_ the pace of change to slow!
I think it follows that an industry full of slow learners might have a lower propensity for introducing change (i.e. developing new frameworks) and adopting change (choosing a new framework over one I'm already comfortable with).
We Will Never Have Enough Teachers
Backend Devs have to teach themselves as the techniques and languages and tools dramatically change over time.
Front end Devs have it twice as hard as we have to teach ourselves while at the same time use design to teach the app end user.
We are in one of the professions where teaching is the core of the profession.
The lack of geographic barriers is going to change this curve for a lot of "dark matter" devs in the hinterlands.
The industry should better evolve to empower everyone to "code" tools for themselves.
People leave because the job sucks. I don't mean that programming sucks; I quite enjoy it. Computer science is still an engaging field worth studying, and research programming isn't bad at all. Corporate SWE is pretty awful, though; you get paid far too little and treated far too shabbily to justify spending hours dealing with bugs and bad decisions that exist not because you're working on hard problems (after all, I've generated my share of bugs and bad decisions) but because of inadequate processes, mindless cost-cutting, generic incompetence, and an overall lack of care, especially at the top. All of this, to make a barely middle-class salary while people who are already rich and connected make millions off my work? No thanks. 2.25/5, would not do again.
That's certainly not the case in the UK. I'd be surprised if it were in the US
If you could get a loan of the same amount and yolo it into the stock market, I am not sure buying a home would come out better.
I don't recommend it, but many people do.
* by ensuring that others cannot build, increasing value of your investment
* by leveraging the deduction for mortgage interest
The system is working as designed.
I am currently a senior engineer earning less than a SV graduate. My pay has been largely comparable to a plumber for my whole career. Not for lack of trying.
I suspect if whatever red tape os preventing US companies from remote hires world wide happening en masse, then non-MAGMA employees will see deflation in their wages.
Similarly if more people are let in on unrestricted working visas that last a while.
I live in London and graduated from a reputable university (so most of my friends have decent jobs). I make considerably more money than any of my peers except for those in a few select careers such as finance and law. I make a lot more than those in other technical career paths like mechanical engineering. And certainly compared with "generic graduate jobs" such as consulting companies or the civil service.
My first job wasn't well paid either (about £19k), but that quickly increased over 2-3 years in a way that salaries in other careers didn't seem to.
For instance, I'm sure there are plenty of HR managers in various companies that are secretly furious about all the young young mostly males, mostly white or asian, still in their 20s, join the company and make more than they do.
Infact I'd say it's their profession.
Recruiter is the high-risk equivalent.
So not only do you compete with a lot of people for the job, the pay structure does not depend on performance.
We effectively didn't have an HR department at my previous job, at a company of 500+ people. And they did when I first started, about a dozen people.
Either way, I'd think twice about putting HR managers as victims here when they are the main perpetrators of low raise budgets and high hiring budgets.
Whether its justified or not, varies with circumstances and what ethical system people have.
When black people in the 50's felt that way about white people and their privileges, most people today would see those concerns as justified.
When German people in 1922 became angry because most jews had enough money for food, while many Germans went hungry, and started believing in conspiracy theories, like the Protocols of the Elders of Zion, most people today would say they were not justified. (though there are still some who secrely believe those things)
And when Hutu's wanted to "cut down the tall trees" in 1994, most people in the west only read the headlines, and didn't care that much.
In the case of HR managers being unhappy that software developer make more than them, some will blame some generic "wage gap", others will explicitly believe in some kind of Patriarchy conspiracy theory. (And a lot of HR managers, of course, are simply fine with things as they are.)
There are, I would say, two main forms of racism. One is directed at those people see as inferior. Typically, that is right-wing racism. That one is created when some other group, on average, performs worse (or appears to do so) than the group the racist identifies with. Such a racist may see the hated group as sub-human. They may not feel threatened outright, but may be concerned if the population of that hated group grows too quickly.
The other group, is resentment racism (or sexism or other similar identity-group-ism), which is triggered when confronted with groups that do better than the group the racist person identifies with. This is more common on the left*. This kind of racist will see the hated group as outright evil. And if they feel sufficiently threatened by the hated group, may attempt outright genocide, since they may feel they are fighting for their life.
* Nazies were full of both kinds of racism. They saw Roma people as virmin, Slavic people as merely inferior, while they were accusing Jews of attempting to seek world domination. In other words, Roma and Slavic people were sub-human while Jews were seen as Evil, inferior only for moral reasons. And as we know, the hatred against to Jews was by far the strongest. Mein Kampf describes this in detail.
Even if this were true, and it isn’t, people didn’t start believing in anti-Jewish propaganda because the Jews had more to eat than the average German. People always believed in crazy anti-Jewish propaganda since, at least, the first crusade.
Absolutely they did. However, even at that time, it seems (if wikipedia is to be trusted) that the Jew's roles as bankers was part of the reason for the massacres:
"Many crusaders had to go into debt in order to purchase weaponry and equipment for the expedition; as Western Catholicism strictly forbade usury, many crusaders inevitably found themselves indebted to Jewish moneylenders. Having armed themselves by assuming the debt, the crusaders rationalized the killing of Jews as an extension of their Catholic mission"
https://en.wikipedia.org/wiki/Rhineland_massacres
You are absolutely right that antisemmitism didn't suddenly pop up in 1922, or even with the creation of the "Protocols" conspiracy. But prior to 1922, antisemitism probably wasn't worse in Germany than most other western countries.
But as we consider the inflation we are seeing today, try to imagine how it would be if the inflation is not 5-10% but 29500%, as it was at the peak in 1923. In other words, it would take 3.7 days for your paycheck to go to half value. When you got your salary, you had to run to the bakery and buy as much bread as you could. Old poeple and people on a fixed salary would lose everything in an instant.
Even in the present age, especially after 2008, conspiracy theories involving the banking sector is everywhere, and there are still whispers implicating a Jewish conspiracy, if you listen. Now imagine standing at a corner in Munich on a day where the factory didn't need your work, too afraid to go home to your abusive wife who would beat and scorn you for not bringing food to the hungry family.
Imagine some small man with a mustache telling a very convincing story that comletely rationalizes your troubles. He reminds you about the Goldmann banker up the street, and the Ruben gem store at the corner. Their families are not hungry, yet they didnt "work" (meaning physically) a single day of their lives, they are simply collecting usury. Imagine being told this, while hungry, while worried about being beaten by your wife when you come home, in a world where anti-semmitism is still seen as acceptable, in a world where usury is still seen as a sin, in a country where the interest rates on loans have 5 digits.
What I'm saying is that those germans were just like us, just under different circumstances. To them, the jews were the socially accepted "bad guys", just as nazis and facists, and where people can label people as nazi or facist with not much more evidence than not liking that person.
The person that would say today, that "It's ok to punch a nazi." (meaning MAGA-republican), might very will be the person in 1923 thinking that "It's ok to punch a jew.". The reasoning is very similar. And it's not restricted to the left. People on the right are currently generating massive amounts of resentment against "the elites". And in some cases, the anti-semmitism is once again coming out into the open.
> But as we consider the inflation we are seeing today, try to imagine how it would be if the inflation is not 5-10% but 29500%
Hitler took power 10 years after the hyperinflation. People didn’t vote for the NSDAP because of hyperinflation, nor they started hating the Jews more than before because of it.
> You are absolutely right that antisemmitism didn't suddenly pop up in 1922, or even with the creation of the "Protocols" conspiracy. But prior to 1922, antisemitism probably wasn't worse in Germany than most other western countries.
Antisemitism was rampant everywhere in the West, the Germans only took it to its inevitable consequences and only after 1933. Of course, this doesn’t change the fact that nazis were criminals, but the Shoah has much deeper roots that the hyperinflation or some temporary unemployment.
For instance, only in 1870 Roman Jews became full citizens, before then they couldn’t own property and, among other things, once a year they were forced to run naked during the Roman carnival. This was only 60 years before Hitler seized power.
You can find similar stories about all cities that had a large Jewish community.
> The person that would say today, that "It's ok to punch a nazi." (meaning MAGA-republican), might very will be the person in 1923 thinking that "It's ok to punch a jew.".
No, it’s not the same thing because no MAGA-republican has been punched and arrested and they even elected a president.
Hitler started planning a coup in late 1922, during the hyperinflation. It was attempted in late 1923, around the time the hyperinflation was stopped. It failed, and he ended up in prison. In 1924, during his time in prison, he wrote Mein Kampf, which lays out the plan he followed (or tried to) thereafter.
Before 1922, NSDAP (aka Nazi party) was very tiny. During the hyperinflation, it grew to 20000, mostly in Munich. Still small on a national basis, but enough to give it a solid basis as an organization.
Between 1925 and 1929, it grew slowly, but exploded after 1929, as the Great Depression hit Germany hard.
As for the role of hyperinflation in this, it is relatively well documented. Here is one quote from wikipedia:
"The Nazis' strongest appeal was to the lower middle-classes—farmers, public servants, teachers and small businessmen—who had suffered most from the inflation of the 1920s, so who feared Bolshevism more than anything else."
https://en.wikipedia.org/wiki/Nazi_Party
> Antisemitism was rampant everywhere in the West
At least very widespread. Still, the situation of jews in the West, including in Germany was much better at the time than it was for Blacks in the USA.
In Germany, there were many highly respected German leaders and intellectuals, such as Einstein, Freud and (less known today) Rudolf Hilferding. Hilferding is, quoting wikipedia again "almost universally recognized as the SPD's foremost theoretician of this (20th) century."
> the Germans only took it to its inevitable consequences and only after 1933.
I don't agree that it was inevitable. The Nazis were a marginal force up until 1929. By 1929, most Germans may have gotten over the terrors of 1922-23, but in 1929 the wounds were torn open, and the messages of the "little man with the funny mustache" didn't seem so crazy, after all.
It didn't help that Hilferding was Minister of Finance at the time the Depression started.
"Of course, this doesn’t change the fact that nazis were criminals, but the Shoah has much deeper roots that the hyperinflation or some temporary unemployment."
I'm not claiming that the hyperinflation was the root. I'm claiming it was one of the main sources of energy, and a great inspiration for Hitler himself, direcly before writing Mein Kampf. (Even though he was already an antisemite before 1922, I'm sure the things he saw during those two years reinforced his convitions. Hitler was known to tailor his speechest according to what ressonated with the audience.).
> You can find similar stories about all cities that had a large Jewish community.
Yes, I know. Being a minority comes with a lot of risks and problems. I fully understand why some jews prefer to have at least one state where they can be the majority. (Though it might have been better for world peace had they been given Köningsberg/East Preussia in 1945 instead of being supported in becoming the majority in Israel/Palestine).
Oh, and about this part, I think you underestimate the hyperinflation in 22-23 in Germany. Over a period of about 2-3 years, people who had been comfortably part of the upper middle class would lose EVERYTHING, and in many cases end up starving to death. That's not "temporary unemployment".
Read this quote:
- One particularly arresting story is that of Maximilian Bern, a man of literary education exemplary of Germany’s formerly middle-class Bildungsbürgertum. In 1923, writes Taylor
- "[he] withdrew all his savings—100,000 marks, formerly sufficient to support a modestly comfortable retirement—and purchased all it would buy by that time: a subway ticket. The old gentleman took a last ride around the city, then went back to his apartment and locked himself in."
- If you are like me, you probably assumed the next sentence would conclude with suicide. No. “There he died of hunger.” I had to linger over that sentence to fully grasp the reality: starvation in a society that had recently been among the most technologically and commercially advanced of any on earth.
https://fee.org/articles/how-hyperinflation-shattered-german...
For the Germans, this left an impression that resembled the Shoah for the jews.
Imagine seeing former affluent tech workers starving to death in San Francisco in 2029, looking like the corpses of Bergen-Belson prisoners. What would that do to the survivors?
They say that, of all causes of death, hunger is the most horrible.
The upper middle class own non-monetary assets, they are probably the least affected by inflation.
> For the Germans, this left an impression that resembled the Shoah for the jews.
No, not really and not even close. At least because the Weimar hyperinflation hasn’t caused mass starvation. Second because losing your savings is not even close to being stripped naked and beaten once a week and then being put on a cattle wagon to be slaughtered 1000 kilometres from home.
> The upper middle class own non-monetary assets, they are probably the least affected by inflation.
First of all, don't confuse hyperinflation with regular inflation. Regular inflation is an indication of a rebalancing of an economy, with some mismanagement on top. Hyperinflation happens when the economic system collapses completely.
One difference is that during normal inflation, non-monetary assets often retain much of their value, while in hyperinflation only assets that help produce food and other essentials really matter (such as owning a farm, a factory, etc).
Middle class workers pre-inflation may have a house, a "save" job with a fixed income and some savings in the bank. When hyperinflation struck, they may have been able to sell the house, but the cash gained would be gone in a couple of weeks. The savings were also gone quickly, and many such jobs would either have salaries lagging behind inflation or people might get fired, unable to find similar work.
Meanwhile, workers in factories and on farms were more like "essential workers" during covid.
>> .... this left an impression ....
> No, not really and not even close.
If you read what you quoted, I was not referring to the effects on those that died, only those who remained. In other words, I was comparing the effect on the German people with the SURVIVORS of the holocaust, as well as on jews that were not directly affected.
These effects are primarily cultural. To this day, the German nation remains fiscally conservative due to the events of 2022-23, very reluctant to allow inflationary actions by the ECB, for instance (as experienced by Greece, 10 years ago).
You are right, of course, that the Holocaust was a larger event, even in terms of the cultural effects. But even if the wound of the hyperinflation was smaller, it was still many times greater than the scars after the 2008 crash in the West.
Maybe the number of actual deaths by starvation was limited, it did occur, especially with people unable to work a job (retired people). Also, even for those who did not die from lack of calories, many were left undernourished or malnourished, causing an uptick in deaths from infections, etc.
But as stated above, my main point is what effect it had on the survivors. Those who saw the previously affluent widdowed aunt fall from grace, having to beg her nephews and nieces for bread. Maybe having to refuse to giver her that bread, because your children were hungry, too.
Experiencing (either directly or through some newspaper) the humiliation when French soldiers entered Germany to confiscate assets when Germany could not (or would not) pay the reparations that was demanded, including seeing the Germans that were either shot or turned into refugees.
Seeing how rich were able to (and smart enough to) shifts their assets that would continue to be productive even during hyperinflation. While you, who were used to thinking that money in the Bank was the safest way to save, kept your money there.
And even if you did manage to secure just enough bread for your familiy to make it into 1924, you would hear stories or see pictures of those who did not, and feel the fear that something happened to you that would prevent you from showing up at the factory that, on most days, would pay you to work.
Such experiences leave deep mental scars, and will tend to harden a person and make them more tribal and aggressive. Make them perfect raw materials to be molded by demagoues like Hitler and Goebbels.
In the end, some did become evil monsters. Maybe some were even born that way. But to the extent that is was environmental, it was certainly not born from privilege. It was, just like in most other cases where the result is genocide, born from hardship and humiliation, combined with a strong feeling of resentment towards those who were seen as responsible.
Sure, but it doesn’t mean some or all of them are not right, especially when the unequal distribution of wealth is well known and documented to evolve for the worst.
https://en.wikipedia.org/wiki/Distribution_of_wealth#Global_...
I mean, some are, yes, but … I'm not, and I know many SWEs who aren't.
> According to the 2018 Global Wealth Report from Credit Suisse Research Institute, you need a net worth of $871,320
(https://www.cnbc.com/2018/11/01/how-much-money-you-need-to-b...)
I miss that cutoff. But if you narrow to my country, the requirement for being in the top 1% jumps to $11M.
Even successful lawyers need to be senior partners to achieve that kind of wealth ($11M), and don't forget that for each such lawyer, there may be many people who end up as some clerk or generic legal representative in some organization, who may have salaries much closer to a SWE.
Maybe they even think that intelligence is a social construct invented by the Patriarchy for the purpose of oppressing people who are not "cis white males"?
Who knows, maybe for some, these ideas may even have been part of their education....
Have you ever interacted with HR? I'm pretty sure they are trained to be cold and uncaring, and to apply business rules without exception. Never heard an ounce of empathy from any of them, it always feels like interacting with an automaton that was somehow annoyed with you.
Plenty of times. Some that are really smart, some that are not. Some that are cold and "corporate", some that are getting way too personal. (As in a "metoo" moment.)
Politically, I've met at least one that was secretly a eugenicist and others that are pretty far left.
All of them individuals, but several of them collectivists.
> Maybe they even think that intelligence is a social construct invented by the Patriarchy for the purpose of oppressing people who are not "cis white males"?
Are you agreeing or disagreeing with the person you replied to?
HR is a bit like IT support. Some companies will have a lower standard when hiring for such roles, others will have as high or possibly higher standards when hiring SRE's than when hiring developers.
And even if it should be correct that SWE's score a few points higher, on average, than HR managers, I see no utility in making a fuss about that. To the extent that it has a market value, salaries will reflect that.
Now, should HR staff start to act unprofessionally themselves, things change. For instance, if individuals within HR start to advocate for lower wages to or other actions against individuals or groups they feel resentment against, then that is a problem.
I'm not sure why anyone 50+ would want to work at the vast majority of startups...
"Requires 20 years experience in the Affordable Care Act" - Said no law firm ever
Every field has to deal with change. In law, you've got politicians changing the rules, in the corporate area, you've got Office Politicians changing the rules.
It's not the 6 minutes I heard lawyers do, but I definitely have been asked to track intervals of 15 minutes.
The school is laughably expensive for something that should in reality be rather cheap. Read books, listen to lecturers? No laboratory work or practical experience and so on, clearly overpriced. And the studying to get approval of cartel? And then end up working for rather poor compensation for quite a long bit in career... As the pay is bi-modal, yes partners rake in money, but they also need to get the clients. But the people doing bulk of the work aren't that well paid.
Nurses are professionals too, and they will never see anything close to $300k/year.
LOL, a lawyer in my family does. He actually meets with a whole group of lawyers every month or so and they all do a retrospective to figure out how well applying agile/lean/whatever principles to their firms has been working. He actually feels it gives them a real edge.
I'm not denying the field is changing fast, it is. But there's other reasons why 50 year olds are pushed away besides some imagined inability to keep up.
If you think unreasonable deadlines are a big issue, then you're in for a rough awakening if you spend any time with the rest of the workforce that doesn't sit in front of a computer all day.
Most of the world lives in severe poverty, therefor software developers should accept any amount that the owner class feel like paying them and be thankful.
"The pay isn't great", "treated far too shabbily", "dealing with bugs and bad decisions", "inadequate processes" and so on, sucks when development is the only thing you've dealt with, but you have no idea how it is to actually have a blue collar job if you're actually complaining about those things.
I think cs137 and others like them should try to have a part-time job at McDonalds (or whatever that is not in front of a screen), because it will make you love your software engineering job again.
I could say McDonalds workers don’t know how easy they have it. They should try picking fruit as a seasonal immigrant, because it will make them love working at McDonalds.
And those seasonal immigrant fruit pickers don't know how easy the have it. They should try being kidnapping victims chained in a basement, waiting to be tortured to death by an axe-wielding maniac.
That's the problem with "you can't complain, somebody else has it worse" - I can always think of somebody who has it worse.
I've had a colleague who was paid worse as a software engineer than his previous job as a McDonald's burger flipper. I also have software engineer friends who were paid minimum wage as software engineers.
I learned from that that having a high-value skill means nothing if you're not willing to take action to extract that value.
There's stress, but it ends at the end of the breakfast/lunch/dinner rush, not a constant low-grade stress over the whole day and often lingering into the night from unfinished JIRA tickets.
Then there's mostly chatting and hanging out with interesting people, either kids with dreams or adults with off-the-beaten-path lives (not an endless stream of white collar adults who only have stories about how they went to a bbq or just had another kid) while cleaning or prepping food, helping a customer here and there. Some customers were assholes but they'd be gone a few minutes later and you'd go back to other things. And because it's a public facility sometimes my friends would stop by just to say hi and shoot the shit for a few minutes.
And I was much healthier then too, despite working fast food. Mainly because I spent my day moving instead of being stuck in a chair.
I also worked a retail, a warehouse, and a factory job. The retail job was even better because you didn't have to deal with the grease or cleaning bathrooms, and the customers were somewhat nicer. If it paid remotely near what I make now I'd probably switch to that tomorrow.
Factory job was probably the toughest. More isolating, no A/C in the summer, more constant stress, more physically demanding, mandatory 10 hour days for weeks sometimes, and there was an incident where a drunk forklift driver almost knocked a tower of heavy steel racks on top of me. I quit the next week.
Easiest is also highly subjective, if your job is making wordpress templates/sites then sure. If you're working on complexer systems then this statement is horseshit. I've done physical and service jobs that were both easier than the software development I do, only difference was that the physical job was also physically exhausting.
It’s probably the most privileged position possible.
And especially not true after 2020, when so many more companies are willing to hire people remotely, often for close-to-US-levels of pay.
In short: I'm privileged AF
You are not getting that much in net salary above certain amount.
Europe is a hellhole if you are a young ambitious individual.
IMHO it's the culture and the VC environment. There's simply not that much money around to throw at moonshot projects, therefore you don't have many unicorns that lose a few billion euros a year paying extravagant salaries for talent. Obviously EU is a very rich place but people with money invest their money in stuff that are profitable right away, likely to be profitable in short term because a giant company is behind it or invest in the US companies if they are more adventurous.
How does one identify a well paying non-union employer? Noname companies in almost all cases pay much less than union employers.
All I know is a lot of great engineers at my company are internationally refusing more pay to non union jobs. I.have no idea if it applies to other companies, or what the benifits are
Anecdotally, I've observed (over a 30-year career) that less than half of the people who have the qualifications can actually produce halfway decent code (as in code that doesn't crash the first time it's used or introduce new problems).
Nope this is an outdated opinion. You can do just as well or better in trades (source: my electrician buddy). If you’re referring to the FAANG salaries (sub 1%) you’re comparing to doctors, lawyers, entrepreneurs in terms of opportunity cost. Your average joe programmer isn’t killing it like you seem to think, and they’d do just as well in trades or middle management.
The cynic in me thinks this is an opinion promoted by employers, just like the BS “labour shortage” headline.
[1] https://money.usnews.com/careers/best-jobs/electrician/salar...
[2] https://money.usnews.com/careers/best-jobs/software-develope...
I have no idea how that comparison would shake out, or if the rise of WFH for tech people would/will change it, though.
The trades can be a good life, especially since you have much more freedom in where you can be located, but to pretend they average as high as FAANG is silly.
Who said this anywhere in this thread?
They all have some combination of: odd posture, odd gait, a dry cough, or bad skin. You can talk about ageism in the Tech world, but I've worked as a tradesman for a bit of time when I was young, and there were not many past 50 much less 50 and healthy. Over lunch they each all recounted their health issues, which made me quit that summer and get an office job.
I'm absolutely sure that lawyers and doctors only work 20 hours a week.
I technically work 12 hours as well as a developer, but actual work might be 6 hours or less, and it's way less stressful than a doctor.
Also sitting in a chair in an office all day has a lot of health issues And they’re insidious in that your body doesn’t immediately tell you how badly your damaging it.
This race to the bottom is how software devs will become the new "teacher shortage", and how wealth will continue to funnel to the upper classes with those on the lower end unable to climb up.
In my opinion comparing SWE to blue collar work like construction is apples to oranges. Ofc the blue collar work is harder and more demanding physically.
It’s better to think about whether software engineers are being compensated fairly relative to other professions like lawyers.
I think they are given that wages seem to be governed with supply and demand. On one hand I don’t make as much as my sister, who is a doctor. On the other hand, I make enough/comfortable money and don’t have to deal with the liability/responsibilities/obligations of being a doctor or lawyer, and I can work from bed naked should I choose to do so.
So, yes, you might not have to do the full specialty training and residency but it can still be quite competitive and expensive.
You’re only earning surgeon money when you’ve made staff level at FAANG. Which usually means you’re near the same age as surgeons and there was a lot of risk and grind getting there. If anyone thinks getting to staff at FAANG is trivial - I’d suggest they’ve been very lucky in life and aren’t a representative person of how hard it is.
People who could do either often go into software because of the nearly unlimited earnings cap. Theoretically you could start your own company and be ultra rich. That’s what I see often as the source. Less common with doctors afaict.
FAANG hires way too many people to hire exclusively (or even primarily) from Ivy League schools. Jointly they employ probably 5% of the software engineers in the country! Master's degrees are likewise totally unnecessary; I almost never see anyone who isn't here on a visa getting a Master's. (PhDs are a different story, but I know people without even undergrad degrees working at FAANG too.)
Surgeon money is generally $500-700k/yr (this might be my sampling bias - looking at stats online, it varies a lot - this is like tech incomes, there's a wide distribution). The nice thing about surgeon money is that you can make that in a lot of places - not just in SV. The same cannot be said of FAANG. You're gonna have a hard time getting remotely hired in BFE making $400k+/yr. Yet, the local hospital always needs a surgeon and most surgeons don't want to live in BFE... So, you're gonna be fine.
Even then if you assume you're making $450k/yr at 27 - you're not gonna have $5m by 40 unless you somehow are beating the market or save every penny and live like scrooge. (Which - again - why bother saving $5m if you're gonna live like a peasant?)
If you assume you're gonna live like you would on a safe withdrawal rate (let's say the more optimistic 4% - $200k/yr at $5m) then you're gonna only have $250k/yr gross income to save - which turns out to be ~$150k/yr net. (You can play with the numbers however you see fit but the point will come around) If you decide to save $12.5k every month for 13 years at 6% return rate (just a simple return - we assume same value dollars) then after those 13 years you have $2.9m. It would take 19 years until you crossed $5m. So, you'd be 45-46 assuming you saved every penny, never went above a $200k/yr income lifestyle (LOL at that in the bay area - you're a renter for life!), and you somehow made $450k/yr starting at 27. Which - is again - uncommon. It has happened due to wild stock appreciation but it isn't the norm offer people receive for senior level - levels backs this up.
It sounds nice until you do the math and realize $200k/yr is shit to live on here. God forbid you marry someone who isn't in tech/law/finance/$400k+ income.
- 450k is not, actually, top-of-band for senior engineers right now. There are some companies where that's approximately true (i.e. Google) and some where the number is much higher (Netflix goes without saying, Amazon routinely breaks 500k, Uber is hitting 480-500k, Cruise breaks 500k, Snapchat hits 550-600k at L5, etc).
- Well, since I'm looking at annualized compensation, I am considering stacked refreshers. I don't think job-hopping ~3 times is an enormous ask.
- I certainly wasn't assuming market-beating returns, or living on ramen. But I certainly wasn't running the numbers such that one would be spending the equivalent of one's safe withdrawal rate pre-FIRE. I live unconstrained by budget concerns and don't even come close to spending half that. At 450k pre-tax I was assuming one would be saving ~200k/year, with 7% returns.
- I was also not assuming that one was starting from 0 at 27, since it's not like pre-senior one would be making barely enough to live on. Having something in the neighborhood of 500-600k saved up by then is something like the default outcome, given a typical single person's lifestyle (absent extravagantly expensive hobbies).
- Ok, sure, this gets you to 4m, adjusted for inflation (oops). Guess you gotta hit that third decade (barely).
- You aren't limited to SV; many companies in that tier support remote work and those that don't have a bunch of hubs across the US.
I'm genuinely not sure why you think that 450k is an outlier level of compensation for senior FAANG/adjacent engineers. One possible source of confusion - if you're just looking at the "Average Total Compensation" levels lists for those companies, those numbers are very low. Filter by "New Offers Only", and then remember that those offers don't include refreshers (which, over the course of the first 4 years at a company, will add something like 360k = 90k/year, assuming totally average performance and no multipliers). It might be in the top 50th percentile, though even that may be pessimistic.
As for 200k/year being shit to live on... I assume you're talking about living in Silicon Valley, which, shrug? I don't live in Silicon Valley and before I decided to substantially change my career direction, I was on-track (and that despite not even hitting 6-figure comp until a few years into my career).
Can confirm. Just did an onboarding in my underwear. (Although mostly because I forgot time conversion when on business travel was a thing, because COVID)
You don't need to do this forever. Usually you can just focus on a stack and related technologies and do well. Once you have experience and a clearly defined need, ad-hoc research is good enough.
The thesis of the linked article is that you do. For the most part, it matches my experience. I'm 30 years in and already wondering how useful the Hadoop/Spark/Scala stuff I spent the last few years mastering is going to be in the next 5 years.
* Scala introduced us old Java hands to a whole different world of modern languages. If you know it you get Kotlin or the latest Java changes for free (probably TypeScript-like other ecosystems too).
* Spark introduced a generation of backend developers to distributed query engine technology (my generation is unlikely to delve into postgress codebase in comparison) and made ETL trivial in real life systems
Hadoop clearly died in the last few years or so (outside of EMR where it's mostly invisible anyway). But it's a perfect example of a complete technology lifecycle - it had a good run for a decade starting around 2010 which in our line of business is incredibly long time. Not to mention how many things about distributed systems people like me learned from that stack over time.
I do understand the issue. Humans are prone to complain about any slight whether real or imagined. Millionaires will complain about not having enough money, A-list celebrities will complain about not having enough visibility, sports stars will complain about every foul play.
Money just does not lead to life satisfaction, only craving. I just have to accept that this is the human condition.
The compensation can be high if you work in Silicon Valley (even though the cost of living is high there). The standard corporate programming job is already paid much worse. Also in a lot of countries that are not the USA, software development is not such a well-paying job.
I looked for software development jobs in Spain, and they pay even less than in my native Uruguay.
And forget about six figures unless you're in the US, England, Switzerland or Australia or a top company in Europe.
Most of the people I once worked with in the service industry had degrees though. Sure, not compsci, but something.
Also most construction workers I've know made way more than that average, often close to 6 figures if not above it. Of course I'm in a big city, may skew things.
Data for this? Does not match my experience whatsoever.
We take ourselves so seriously we cannot afford the time for someone to be polite!
> Do still be polite, and feel free to have social conversations!
Given that, I don't really see what's impolite about it, especially in an async conversations, where the other person is not expected to be on their feet, waiting for incoming messages.
Office politics, skills evaporating, high work pressure, ageism, boredom, physical inactivity, an indoor life, over-consumption of information...all of these factors have their effect on one's mental state as well as body.
Pay does not fix that.
This. People don't feel sorry for people who are in the top 20% in terms of salaries, when they complain about not being in the top 5%.
About a decade ago, or a bit more, I noticed that the the crowd over at slashdot started complaining in similar ways, either that some MBA was compensated better, or that H1B holders were suppressing salaries.
Maybe I'm prejudiced, but it seems to me that this kind of thinking is common in mediocre developers who are disappointed that they are stuck in an average-or-below paying programming job from around the age of 35-40 on. Maybe their salary even went down a bit, in real terms, after the latest downturn.
I simply have trouble empathizing with people who have it better than most other poeple, but still complain like that. If they were industrial workers that started out low (at least for the country), but still lost their job to outsourcing to Asia, and were unable to get another, I would empathize a bit more.
I don't think it's the job of governments to protect top 20% earners from competition from abroad, and get fed up when entitled people demand such protectionism.
I stopped following slashdot because the discussions often turned into something I would expect in a labor union forum, instead focusing on fresh perspectives in tech an science.
But if it is a generational sort of thing, I suppose that is why it is becoming more common on HN about now.
I agree that being a SWE is certainly not the worst thing in the world but it has also a lot of bad properties that often are overlooked and the most positions do not have moon salaries, that we see on HN regularly.
Also to do whatever lower income job you don't need to study for 5+ years (master). You need to compare with jobs that have similar requirements to your education.
You also have the ability to get a standing desk and take breaks to walk around.
A standing desk is better than no standing desk but won't correct everything by itself. Taking a break and walking around is fine but I still need to get back to staring into the computer screen to do my work.
I don't know your age but for me it started with about ~35 that I realized that this has negative effects on my body.
One of the things I’m glad of is the flex time and working from home so I can crank out workouts whenever it suits me.
On the other hand, saying that the majority of the population is grinding in tough physical labour is just not true. Most other jobs are generic office jobs that don't need to be done (just like 80%+ of software engineering jobs don't need to be done).
Most of us are just doing things for money. Are most people working hard? Not usually, because it mostly doesn't matter. Spreadsheets idle in inboxes, meetings lead nowhere and achieve nothing, brown-nosers and family members get promoted into jobs they're incompetent at. And the world continues to spin regardless.
* Time spent on finding a job
* Time spent on studying in order to attain a job
* Actual amount of hours worked (hard to get accurate data on it)
* Actual amount of effort per hour (hard to operationalize)
It's a very tough discussion to have, but I have a gut feeling that you're simplifying too much and are partially wrong. But I can't even give evidence that you might be wrong because I don't have data. So at best I feel we're both blind and we don't have a one-eyed king that can see! ;-)
Qualitative evidence is just fine. We might want to stop exclusively fetishizing numbers, and instead of complaining how hard it is to find data, do something to fix the problems right in front of our face.
Well, that's all dandy. But when someone actually shares something it's "cry me a river". Their contribution is summarily dismissed because it's not the Right Evidence from the Right People.
> On the other hand, saying that the majority of the population is grinding in tough physical labour is just not true.
10.3% of US jobs are classified as "physically demanding". [1] (I didn't see parent said "labour" until after my research, but I expect figures in the UK are similar). Assertion is TRUE, the majority is not doing "grinding" labor.
> Most other jobs are generic office jobs that don't need to be done (just like 80%+ of software engineering jobs don't need to be done).
Hard to say about the parenthetical, and it is impossible to say if the jobs don't need to be done without running an experiment, but some research has been done on whether people think their job needs to be done. A study of the European Work Commission Survey [2] showed that in 2005 only 7.8% of people responded that they were not doing useful work. In 2015 even fewer, 4.8% felt they where not doing useful work. (The UK reported slightly higher at 5.6%). A "recent poll" from an article dated 2017 which links to a 404 for the poll claims that poll said that 37% of Brits felt their jobs were useless. [3] Even the originator of the "bullshit jobs" book thought that 20 - 50%--maybe as high as 60%--were useless. Assertion is probably FALSE, most jobs have some utility.
> Most of us are just doing things for money.
Yes, and so what? Does that make it not worthwhile?
According to a Pew study from 2016, 49% of Americans are "very satisfied" with their job (59% of people whose family incomes were over $75k), and about half said they viewed their job as a career. 51% said their job gave them some sense of identity (higher percent as with more education), while 47% percent say the job is just what they do for a living. However, those working in non-profits, government, or self-employed were about 62% likely to say their job gives them a sense of identity, while only 44% of those working at a company said the same) Assertion is PROBABLY FALSE, depending on the definition of "most" and the intent of the claim, but the statistics certainly do not make it a definition-true assertion.
[1] https://dc.citybizlist.com/article/639055/dc-has-the-2nd-sma... (scroll to the bottom for the US figures)
[2] https://phys.org/news/2021-06-workers-useless-jobs-previousl...
[3] https://www.weforum.org/agenda/2017/04/why-its-time-to-rethi...
[4] https://www.pewresearch.org/social-trends/2016/10/06/3-how-a...
My guess (and it would only be a guess, as I don’t see how it would be possible to really know either way) is that for many of the respondents they could well be kidding themselves about how necessary their job actually is.
As an example, Bob might feel his job really matters, and it might within his company, but his whole company could be an also-ran or a quango that the world wouldn’t miss if it didn’t exist.
All of the above aside, how would you feel about coming to my house while I watch the news and subtly letting me know when I’m being fed alternative facts?
I’ll provide unlimited tea and biscuits. Don’t keep your gifts to yourself!
Compare that to physics, chemistry, bio or mechanical engineering.
When I see SWE saying they know 10 different languages I see someone who is bragging that they know how to sum 1+1 1+2 1+3 (...) 1+10
No wonder people with no degree can learn how to code in a few months and get a nice paying job. Try that with any of the others I mentioned and you get nothing. Not with 1 year. Not with 2 years. Maybe with 3 years of studying.
Doctors require lots of qualifications which is a barrier to entry into the career. This significantly drives up compensation.
Are most doctors really more than human frontends to webmd? Probably not.
Source: my doctor told me this (really).
Extending this to SWE. A degree may not be necessary to enter the field anymore, but I don't see how it should be less of a requirement than for a regular consulting GP. Both are expected to understand fundamentals well, and both can cause harm if they do their job badly - I'd argue the SWE can cause a lot more harm to be honest.
If it seems like I'm suggesting qualifications should be mandatory for SWEs, I'm not. I'm saying other professions are revered in a way that we aren't - and I don't see the evidence it's especially warranted.
In the last two years I've worked with hundreds of bootcamp students who have reached the end of their rope with 20th century career paths that no longer make any f-ing sense. From teachers to construction workers to bartenders to graphic designers. Not all of them have a deep love for writing software, but all of them recognize that its one of the only viable paths available if you don't want to have roommates into your 40s.
As my best friend told me in an abandoned bay area parking lot before I switched careers to swe, there just doesn't seem to be any other reliable way for people in our generation to make a living. Maybe it only applies to california, maybe it only applies to millennials, but having been on both sides of that fence now I 100% agree.
There were people from Tourism, Law, (non-software) Engineering, Biologists, Chemists, Philosophy, among others.
Most of the people in those areas were burned out of REALLY being overworked, underpaid and being treated like trash (you should see how Law firms treat their interns).
I suspect this may be exaggerated, in that there is still demand in other career paths, they just aren't as appealing for various reasons, e.g. manual/technical trades with reasonable pay but some physical labor involved or a long apprenticeship period
I do worry we might be flooding the field and siphoning talent from sectors that matter, even as the proportion of software jobs that don't really need to exist balloons
this seems like a recipe for a lot of disappointed people in need of retraining once we realize code can't eat the entire world, and in the meantime it feeds the bubble cycle, pointless or abusive "innovation", and speculative nonsense software is plagued by
I really don't think this is true. Maybe in the US, but worldwide I would charecterize most job environments as closer to sweatshop than office.
I joked with a girl yesterday when she asked me what I did. I told her: "I'm a dude that's paid way to much to sit in his living room and make websites and apps".
Not everyone will make $300k per year, but you'll probably still make way more than most other professions. Teachers make like $70k in good places, often times much less. Here we are sitting in our pajamas at home changing the background color of a button and making twice as much.
Any engineer who has enough EQ and people skills to give some demos on Zoom is going to find that Sales Engineering/Solutions Engineering is an easier job with more earning potential, all with no on-call rotation.
On top of that, the company treats you like you're valuable rather than a cost center (especially relevant to people doing infrastructure and IT engineering). Sales teams go on vacation to team-build, engineers are shoved in a conference room with some lukewarm sandwiches.
In US for sure. But there are many other places where you get a better balance between learning/working/salary in other jobs.
Not to mention the notoriously higher rate of burnout in the industry, even in the US.
The people in this threads making huge overgeneralizations might be indeed overpaid.
What about escaping corporate swe and working for oneself?
The comparison to other lawyers is weak because becoming a lawyer requires a hell of a lot more education. You can become a software developer without even a having a college degree.
You are also ignoring other professions like nursing. Nurses make far less than software developers and work a hell of a lot harder. Same with teachers.
As far as barely making a middle-class salary while rich people get richer off your work? Welcome to capitalism.
You want to represent a murderer, rapist or a Bernie Madoff? Lawyers deal with an order of magnitude more BS. You may feel bad when you work on a dead end feature. Imagine if your representation let a rapist walk.
As a civil engineer: I assure you my studies were QUITE rigorous. The job is very demanding, and I assure you the complexity can be very high, the consequences of mistakes are severe and occur over a massive variety of time scales. I had to work for four years apprenticing under licensed engineers after school and pass no fewer than four examinations, and get 4 licensed engineers to personally vouch for my work before getting licensed myself as a civil engineer. I am personally liable, in perpetuity, for loss of life injury or property which occurs as a result of work that I put my stamp on.
As a licensed P.E (who is, dare I say, fairly talented amongst my peers even) with a total of 8 years experience, do you know what I get paid to deal with that complexity and liability? About $80k in medium cost of living area for 45 hours/week. That's not atypical. Does that "control for the intelligence" required of the job?
I agree with everything you say. Software engineers (most should not even be called engineers, they’re coders or developers and on the same level as a lab technician to me) are prima donnas whose mathematical and scientific backgrounds are (on average) at least one level of education behind any actual licensed engineer/professional making half as much. And their degree of liability is infinitely lower, as you note. I’ll probably get sued or be involved in a lawsuit for my work another half dozen times before 2032 even though I haven’t stamped anything in 3 years.
I'm a programmer and I 100% agree with this statement. I never tell anyone that I'm a software engineer even though that is my job title, I am a programmer. It annoys me to no end that we keep diluting language like this and devaluing the meaning of these terms. An engineer is held to a much higher standard than any web developer ever will be.
I call myself a senior software developer (I'm not an engineer, I did went to university but didn't graduate from that career, switched to an Information Systems degree instead).
Yes, I more or less think they do. Unless they are a headliner or founder of their own firm.
Lets say you are a lawyer at glob corp, and they get sued. Do you really think you can say "Eh, the other guy has a point. I am not going to defend this one."? You either work the case defending glob corp, or you are no longer glob corp's lawyer.
Probably not, but instead they get to bill their working hours in 6 minute increments. And they have to bill a high number of hours a day. Praise yourself lucky if you don't have to do that!
Except for almost all of them. Aside from a few exceptions (doctors, laywers), everyone else makes significantly less. A structural engineer with a master's degree for exemple will makes less than half (closer to 3 - 4x in my region).
You don't have to make 300k for the pay to be great. Even if you fall short of that and land at a company that only pays you $120k, you're still making a killing compared to most other professions.
> Corporate SWE is pretty awful
Then get out of Corporate. I work for an SMB, make about as much as I used to in Corporate, but the stress level and workload makes is much easier. Everyone want's one of those SWE jobs for a company that is in the news, but in fact you want the exact opposite. You want a low profile job at a company no one outside your niche has heard of. The pay is about the same, work is 10x less crazy, and if you disagree with a decision, usually you know the person that made it because the company is only about 200 employees.
I think the signal:noise ratio isn’t great in this sector. Although corporate is 100% guaranteed misery, I have yet to come up with a reliable way to find SMBs where IT (because that’s how they call it, a SWE is the same as the help desk in their view) isn’t considered as “the geeks working the cost center in the basement”.
Do you have a method or did you rely on blind luck like the rest of us?
The lawyers who didn't go to top schools became public defenders etc and make about 70k a year and are saddled with a quarter million dollars in law school debt.
LOL Jira has nothing on billing in 15 minute increments.