| ▲ | prinny_ 5 hours ago |
| I believe there are some programming jobs in which the code is absolutely the easier part. Not all of us work in signal processing, integrated systems or have to push upstream to Linux kernel because the company we work for really needs a memory allocation optimization for its data centers. Navigating customer requirements and building something that satisfies both market's needs and company strategy can be an incredibly difficult and frustrating problem to solve. Especially if you need to also oversee the execution of the strategy. So not only you have to predict what they want or know the domain deeply enough to understand what they say they want is not what they really want, you also have to come up with a plan for executing your solution in a corporate environment. There is a reason that books like "the staff engineer's path" cover topics such as local maximums, communication, establishing support for executing a plan or creating alignment on big efforts. In large corporate environments with multiple international customers, code is most of the time not the hardest problem. |
|
| ▲ | rockemsockem 3 hours ago | parent | next [-] |
| IDK, a sufficiently complex consumer or enterprise app winds up having big performance problems if people don't know what they're doing w.r.t. the code they write and how they connect systems together with that code. Those performance problems start out not mattering much, first it impacts one seldom-used part of the site, then another, but that chips away at users and can eventually tank the product. That doesn't even get into writing code such that it can be well-understood and modified easily later. It also says nothing about reducing/fixing bugs. If you have a site whose performance steadily gets worse and the rate of new features steadily declines and the rate of bugs steadily goes up, then your site/app will probably not have a great future. All of those things depend on solid code. If staff engineers who are too busy talking and building consensus such that they aren't connected with the actual programming and situation on the ground, then all the talking and consensus-building won't matter. |
| |
| ▲ | buran77 an hour ago | parent | next [-] | | > a sufficiently complex consumer or enterprise app winds up having big performance problems if people don't know what they're doing w.r.t. the code they write and how they connect systems together with that code. On those complex systems in particular the problems start long before any code is written. A software engineer can create and understand the specs, requirements, design the system, architectural decisions, define everything about that software and data, model everything, failure, performance, operational topics, documents everything, etc. before a single line of code is written, and of course they can write good code. Then there are the coders who patch together chunks of code from Stack Overflow or whatever boilerplate they have in the company's repository. I know every coder likes to call themselves a "software engineer" but there's a world of difference between the two types. For the first group code was never the hardest part. For the second group there was never any other part. | | |
| ▲ | blub an hour ago | parent [-] | | No they can’t do everything before writing a line of code. The design and requirements feed into the code and vice-versa over and over through the lifecycle of a piece of software. Some architecture work and design will be done beforehand, but many details will fall into place as the code is being written, thrown away, adapted, etc. The idea that code is mere transcription - which I see a lot in these AI discussions - is completely false. Code is a form of low-level design and is where the rubber hits the road. The best requirements, designs, marketing, etc are worth jack if one fucks up the code. The code is the actual product. | | |
| ▲ | buran77 41 minutes ago | parent [-] | | > but many details Which part of my list was just "a detail" to be dealt with at some point in the lifecycle (but only if you're not too busy shipping features) for you? You're laying bricks before knowing if the wall's supposed to be concrete. > Code is a form of low-level design and is where the rubber hits the road. Sure but in keeping with your analogy tires are fungible across most cars and it takes minutes to change one if you picked the wrong compound. It takes years to properly design a tire, not to speak of everything that sits on top of those tires. By the time you actually "meet the road" you already defined to a tee what you want to achieve from every perspective and everything you do is to meet that goal, even if you have to make tweaks. You don't find out if it's a scooter or a roadster tire while working on it. > The best requirements, designs, marketing, etc are worth jack if one fucks up the code. Why are you mixing some fundamental things which are essential and can't be changed along the way without massive effort and risk, if at all, with things like marketing? Do you want to aimlessly write code while chasing a target that moves randomly and conflicting because your plan was to define things "at some point"? You're really making my point with your insistence that it's all about code and every other fundamental thing is "a detail" that just comes along the way. |
|
| |
| ▲ | chasd00 an hour ago | parent | prev | next [-] | | I would counter with it's easier to fix bugs, improve performance, pay down technical debt than it is to fix consensus, stakeholder buy-in, and strategic direction. So even though good code, design, and architecture isn't easy it's still the easy part in a relative sense. | | |
| ▲ | manphone an hour ago | parent [-] | | That’s because fundamentally you need those strategic items to have space to do those particular detail items. If you have the best strategy and no execution, you can probably hire for that. If you have no strategy and decent execution, you are driving the Titanic into the iceberg. |
| |
| ▲ | TeMPOraL 3 hours ago | parent | prev | next [-] | | Yup. And performance problems don't just bleed the user base, they also slow down development and testing internally, both directly and by nudging developers away from attempting some tests or use cases in the first place. | |
| ▲ | zormino an hour ago | parent | prev | next [-] | | I can understand when people say the code was the way part, but under the assumption that the system design and architecture are clean, code is high quality or the project is greenfield, and there is proper testing and validation. Then, sure, the lines of code aren't the hardest but that's only because that hardest work was front loaded and given a different name. Even then it's still not always easy. | |
| ▲ | tayo42 2 hours ago | parent | prev [-] | | You've really seen a web software product die because of performance issues? | | |
| ▲ | prmoustache 10 minutes ago | parent | next [-] | | Web software I don't know but there are many "modern software" that were meant to replace COBOL code running on AS400 that ended up never making it to production because they were running so badly and projects ended up being money pits. | |
| ▲ | Plasmoid an hour ago | parent | prev | next [-] | | Healthcare.gov was a national scandal due to poor performance related to bad requirements gathering. | |
| ▲ | crazysim 2 hours ago | parent | prev | next [-] | | Wave waves at you from the grave. | |
| ▲ | sscaryterry 2 hours ago | parent | prev | next [-] | | Yes, it is hardly ever the web-side of it though. | |
| ▲ | saulpw 2 hours ago | parent | prev [-] | | Friendster |
|
|
|
| ▲ | ivanjermakov 2 hours ago | parent | prev | next [-] |
| I'm yet to work on an enterprise project where programming is beyond simple validation, simple SQL, simple sheduling, simple mapping, simple error handling. Might be more about web backend than the whole field, but the challenge always comes from formulating requirements in a rigid form with all edge cases considered. This might be the reason why many personal projects are so technical and impressive - it's the itch that's not scratched at work. |
| |
| ▲ | bayindirh 2 hours ago | parent | next [-] | | This is one of my theories why AI is well-suited for these kinds of projects. It's mostly CRUD, written in well-known patterns. This not to discount the programmer or the job in general, it's what the task calls for. Scientific programming, hardware interfacing, embedded, demoscene, game engines, HFT or HPC calls for much different breed of code, and generally way harder to formulate in code w.r.t. these enterprise projects. Trying to make hardware go faster with more efficient code is much harder than optimizing an SQL query and safeguarding it, and these are well understood problems, in general. | | |
| ▲ | ivanjermakov an hour ago | parent [-] | | Yep, LLMs excel here because most of the time analogous solution is already in the codebase. Most of my initial promtps include "look how it's done in X and do the same". |
| |
| ▲ | zero_shift 2 hours ago | parent | prev | next [-] | | It depends what you mean by enterprise project? If you just mean a large company, I would say they absolutely exist - if you go looking for them. For me, these have included embedded systems for factories, UIs for specialist hardware, VR when that was a thing. I would call my current project relatively systems-level too, as it's a network proxy. Not quite kernel level but definitely not trivial "if this then that" style coding. It does exist if you have the urge to find it. My perspective is that application programming - CRUD, forms, IO orchestration - was always vulnerable, even before AI. Think about APIs for payments, APIs for subscriptions. E-commerce in a box type solutions. That's why I always pushed to do more systems level work, on more exotic or weird technologies. It's not because I think I'm a better programmer, than someone slinging Spring code or React forms. But because in this industry it's better to be a goat than a cow. | |
| ▲ | zabzonk an hour ago | parent | prev | next [-] | | Trading systems? Most complex things I've worked on. | |
| ▲ | dsego 2 hours ago | parent | prev | next [-] | | [dead] | |
| ▲ | jibal 2 hours ago | parent | prev [-] | | [dead] |
|
|
| ▲ | haswell 23 minutes ago | parent | prev | next [-] |
| About halfway through my career, I spent about 10 years working in the enterprise SaaS/PaaS space. 6 as a developer, ~4 as a product manager. Both sides of that coin are difficult. Trying to create a product strategy that meets the needs of hundreds of large companies is a special kind of hell. And on the dev side, even "simple" things are not simple when they have to be implemented at scale, software updates cannot break existing customer code/configurations, and customers must have a hundreds knobs and dials and scripted escape hatches to implement their own business logic. Even when code was not the hardest problem, it was still a hard problem. |
|
| ▲ | gosolozero 4 hours ago | parent | prev | next [-] |
| Yes, I resonate with this and the article above. I think 80% of a SWE's job is to communicate with the XFN partners (either gathering requirements, pushing back, managing up, collaborations, etc) and then plan out the actual coding (gather code pointers, look at past code, plan architecture, talk to the team). The last 10% is the coding. And then the other 10% is the maintenance of that and past code (which honestly should be a lot more but incentives are not aligned well). It's hard for people to understand jobs they don't do. They imagine we spend 8 hours a day clacking at the keyboard. |
| |
| ▲ | pjio 4 hours ago | parent | next [-] | | > They imagine we spend 8 hours a day clacking at the keyboard. I do, but the order of the keys makes a difference somewhat. | |
| ▲ | avilay 3 hours ago | parent | prev | next [-] | | The percentages are different for different types of SWEs, not all SWEs spend 80% of their time on XFN comms. I agree with your larger point that a non-trivial amount of a SWE's time is spent on XFN comms and team alignment. My argument is that if an individual contributor is not spending a majority of their time on problem solving and implementation (including maintenance of legacy code), they are not maximizing their potential. If they are spending 80% of their time on non-coding activity they are better suited for an Manager role (Engineering or Product). At the end of the day, coding is not hard only if you are a good coder to begin with. If you are a good EM/PM then people issues will not be hard (which coders often complain about). | |
| ▲ | mupuff1234 2 hours ago | parent | prev [-] | | I feel like almost every standout product in the world was a result of someone with good instincts and not the results of XFN communication. Unfortunately it is still the job... |
|
|
| ▲ | aleph_minus_one an hour ago | parent | prev | next [-] |
| > Navigating customer requirements and building something that satisfies both market's needs and company strategy can be an incredibly difficult and frustrating problem to solve. Especially if you need to also oversee the execution of the strategy. So not only you have to predict what they want or know the domain deeply enough to understand what they say they want is not what they really want, you also have to come up with a plan for executing your solution in a corporate environment. The really hard part of this does in my opinion not so much lie in the aspects that you describe, but rather in doing this without leaving scorched earth with most/all of the stakeholders involved. In other words: Doing what you described is in my opinion something that can be learned, and in my opinion a central reason why many programmers consider this to be difficult is that they never learned it, and/or (related to this) were never given the opportunity to be responsible for all of this, so they lack experience. On the other hand, navigating the whole office politics, and running the political gauntlet that is collateral to it is hell on earth. The only way to survive this is to give a big "fuck you" to everyone, which I more politely described with "leaving scorched earth with most/all the stakeholders involved" above. |
|
| ▲ | rudnevr 2 hours ago | parent | prev | next [-] |
| IDK, I worked like in ~20 enterprises and I didn't really see what you describe. "Navigating customer requirements" is mostly everyone speculating on customer needs and pushing the part they own, and whoever happens to get closer to the higher management's ear, wins. Then market decides if that's is a good thing or bad thing. If it's good, normally the person who pushed this doesn't even receive credit for it, because either the command chain too long or the stakeholder's memory too short and postfactum everyone pretends they authored good decisions and opposed bad ones. It might be tiresome and exhausting, like all intense politics, but it's not hard in any technical sense. Most mediocre people can do it and do it. For something to be hard and complex you need rules and professionals on all levels who understand and follow the rules and driven by meritocracy alone. That's simply never the case. |
|
| ▲ | hintymad 3 hours ago | parent | prev | next [-] |
| > Navigating customer requirements and building something that satisfies both market's needs and company strategy can be an incredibly difficult and frustrating problem to solve True. And there is another angle: ownership. The author also said “having clarity on the priorities” boils down to “just tell me what to do and don't switch it up every two days”. This is like saying that a programming language designer does not own the spec of the language itself but just wants to write hte compiler. I find such altitude counterproductive. Case in point, many companies hire PMs for their internal infra org. I mean, shouldn't the engineers in the infra org know exactly what they design to build? If you don't want to own what to build, you end up letting someone else tell you what to do, except that the person is neither an expert nor even your user. |
| |
| ▲ | wbl 3 hours ago | parent [-] | | The infra org has to also understand their internal customer! | | |
| ▲ | hintymad 3 hours ago | parent [-] | | And that should be the engineers' job instead of outsourcing it to PMs who do not even use any of the infra services -- I'm not insulting the PMs, of course, but to state a fact. Infra is used to serve the internal engineering teams, and the PMs don't code, so they don't have a need to use the infra. | | |
|
|
|
| ▲ | qurren 2 hours ago | parent | prev | next [-] |
| > In large corporate environments with multiple international customers, code is most of the time not the hardest problem. This is true, and this is the thing that makes me want to not be part of this dumb system anymore. If leadership on the same company can't align, that shouldn't be my problem, and I hope they get replaced by AIs that can. Humans suck. |
| |
| ▲ | ToucanLoucan 2 hours ago | parent [-] | | Would add this is not exclusive to large corporations either. My smaller employer is also struggling hard because leadership simply cannot prioritize. Everything is either not being worked on or is the highest priority which in practice just means nothing is the priority, and no matter what myself and my team work on always seems to be the wrong thing. It's absolutely devastating to team morale. We never feel like we're contributing. | | |
| ▲ | qurren an hour ago | parent [-] | | I'm already unfazed at that part and don't care. What devastated me this week is that I was slogging so hard for the past several months trying to deliver on what I was asked to deliver on, only took 1 week of PTO out of the 4 weeks I have saved up, spent nights and weekends trying to honestly solve multiple high priority yet HARD problems that 500 other engineers in the company couldn't solve, I'm making good progress on a couple of them single-handedly, yet my manager, who just came back from 3 weeks of vacation just gave me a performance review saying I am not meeting the "bar" for my level and need to do more cross-functional work and amplify my "impact". He's going on vacation again next week to watch the eclipse. Fuck this. I want to travel, I want to enjoy life. I used to chase eclipses, too. I tried my best, all I ever get is "what you are doing is not enough". What the hell IS enough then? I already don't take vacation and don't exercise, I've put on 7kg of weight since I joined, yet you told me THAT is "not enough". Should I stop sleeping and eating? Change priorities all you want, honestly I really don't care, and I've dealt with customers too, it happens. Just don't tell me I didn't get anything done. Recognize the fact that I tried hard every time you changed your priority, and I only had 2 months out of 8 to work on your latest priority, and calibrate your expectations to 2 months of work, not 8. |
|
|
|
| ▲ | mikojan 4 hours ago | parent | prev | next [-] |
| > There is a reason that books like "the staff engineer's path" cover topics such as local maximums, communication, [...] Why would they cover programming? That's what all the books on programming are for. Also I see no need for signal processing to make programming a hard problem. Writing correct code is hard. Writing code that makes incorrect code easy to spot and hard to write is hard. You can be great at local maximums, communication, establishing support for executing a plan or creating alignment on big efforts, and proceeded to still create a ball of mud. Bug ridden, hard to read, hard to debug. |
| |
| ▲ | rcxdude 4 hours ago | parent [-] | | A buggy big ball of mud that does mostly the right thing is still going to beat a high-quality, carefully architected solution that reliably does the wrong thing, though. And for a huge amount of code, it's not very hard to make it good enough, because the requirements, once understood, are pretty straightforward and perfect correctness often matters much less than you would think. | | |
| ▲ | avilay 3 hours ago | parent [-] | | "carefully architected solution" is not what they are saying. A "buggy big ball of mud" will not generally "do the right thing", if it did, it would not be a "buggy big ball of mud". Straightforward requirements do not imply straightforward solutions. In the early 2000s Facebook wanted a quick way to search for friends updates, a straightforward requirement. Turned out they had to build a full graph DB inside MySQL, not straightforward code at all. |
|
|
|
| ▲ | mempko 3 hours ago | parent | prev | next [-] |
| I've been programming for 30 years and "Code was never the hard part" does not offend me. It's something i've been saying for a long time. You can teach anyone the mechanics of coding well in like 6 months. Programming is the hard part! I want to make this distinction because to me programming is about solving problems and coding is a way to express the solution. Designing algorithms, architectures, etc can be done without a programming language. Coding is putting it down into some language. |
| |
| ▲ | cassianoleal 14 minutes ago | parent | next [-] | | I like Dave Farley's classification of Coders, Developers and Software Engineers. https://www.youtube.com/watch?v=fcjBfSiyI0k | |
| ▲ | Izkata 2 hours ago | parent | prev | next [-] | | Sometime in the past 10-20 years there was a prestige shift where people started using the term "developer" for what you're describing as "programmer", relegating "programmer" to what you're describing as "coder", and "coder" to "hobbyist programmer/developer" (while weirdly "coding" remained colloquially the thing programmers do). Advice to job seekers I remember in the 2010s was to not call yourself a programmer because that was where the bad "code monkey" jobs were, but it hadn't yet been much of a thing when I first started looking at the end of the 2000s. | | |
| ▲ | heisenbit an hour ago | parent | next [-] | | These waves where someone found a new way to focus on the valuable part and leave the grunt work to lowly others comes again and again. As always the truth remains that each step in the process is relatively trivial and is is the overall complexity e2e and scale and handling edge cases that are where value is created. But that won‘t stop groups trying to differentiate themselves by looking down on others even when it is clearly failing. As long as there is a benefit to the group driving it. | |
| ▲ | SoftTalker an hour ago | parent | prev [-] | | I have called myself a programmer for most of my career. I have no concern about prestige. | | |
| ▲ | Izkata an hour ago | parent [-] | | I think some people are talking past each other because programmer/programming means different things to different people. |
|
| |
| ▲ | gardenhedge an hour ago | parent | prev | next [-] | | > You can teach anyone the mechanics of coding well in like 6 months. You can absolutely not do this | |
| ▲ | michaelrpeskin 2 hours ago | parent | prev | next [-] | | I've also been doing this professionally for about 30 years, plus another 10 as a hobby/learning before then, so I think I have much of the same experience as you, and I do agree. Although, I think with the advent of LLMs, programming is no longer the hard part. The hard part of programming is the convergence of context management for humans while also presenting it to a computer to do something. Much of data structures and algorithms "best practices" are ways to efficiently get your work done as well as keeping it so that a human has context. For example, one guy I used to work with wrote this really awesome algorithm about 25 years ago, and I'm responsible for maintaining it since he long retired. I can't go into details, but this is the core algorithm in moving billions of dollars between institutions overnight. It's about 10 screenfuls of c that had been converted from the original FORTRAN 77 with dozens of gotos and weird branching statements and about 20 parallel arrays that store indices for pointer chasing. It's almost impossible for a human to follow (I've actually fed it to an LLM and said rewrite this with for loops and no gotos so I can understand it - and it worked!) but it's blindingly fast. The actual problem it solves can be stated in about three sentences, but programming it was hard because of the context management. The reason that my company keeps getting royalties on this is that it's so hard that they'd rather pay us than write it themselves. But I bet an LLM could write it from scratch now. So maybe programming is no longer the hard part, or at least context management is no longer the hard part and that humans should move up the chain to help manage the context for LLMs so they can get more done efficiently. Switching topics a little...much of what I think makes coding the hard part was the tension between big-design-up-front and you're-not-going-to-need-it philosophies. Early in my career I worked in health care and that was BDUF and the coding was easy because program managers spent years defining every screen that would be shown to the users, what queries were needed to fill the screen, all of that. We just took the spec and coded it. Coding was easy. But the failure of BDUF was that it still didn't really match what the customer wanted. Then enter agile and YAGNI, in that limit, coding is easy, just write what the user story says. But then you have to refactor from what was left behind on yesterday's user story. So smart engineers would cheat a little with YAGNI and say, yes we will put an abstraction in because the next user story. I would say that "good engineers" or "good coders" found that balance in abstraction to move fast but make abstractions not overkill. And I think that's what all the wailing and gnashing of teeth is right now: the good engineers aren't needed anymore. I can tell an LLM to code something, and as I add complexity it's happy to refactor and manage the context so we don't need to worry about "clean code" or "quality code". As long as what the LLM writes meets the spec, then we're happy. Ah, sorry long rant and ramble. But I just think the "hard part" has been managing context, and the context we're managing context is just changing. Those good at managing context will be good at coding with LLMs, and those that weren't won't be. | | |
| ▲ | chasd00 an hour ago | parent [-] | | This is a very good comment, one of the best i've read here. > I would say that "good engineers" or "good coders" found that balance in abstraction to move fast but make abstractions not overkill. i think this is spot on and could be where the concept of "llm's have no taste" comes from. There is art (and science) in determining the right level of abstraction that satisfies the user story in a performant way while leaving the door open for extension. > As long as what the LLM writes meets the spec, then we're happy. going back to just meeting the spec vs the art of perfect abstraction is a bitter pill to swallow and I imagine removes a lot of the joy some found in software development. |
| |
| ▲ | retinaros 3 hours ago | parent | prev | next [-] | | the article means code as a whole not just the moment you input some if else in a screen but the whole act from thinking about it to make it live in prod. | |
| ▲ | ErroneousBosh 3 hours ago | parent | prev [-] | | I don't even sit in front of a computer to write programs, I do that in the car. I type them in when I'm in front of the computer. All the actual work though? That gets done in a space where there's no phone, no people walking up and talking to me, no distracting social media, no screens, just quiet-ish and a couple of hours to think. |
|
|
| ▲ | ls-a 3 hours ago | parent | prev | next [-] |
| The fact the everyone is fighting just to define what AI is doing to coding is a sign that most developers are just terrible at their skill. |
|
| ▲ | PunchyHamster 3 hours ago | parent | prev | next [-] |
| I think it could be summed up with "it being easy part of the problem doesn't mean it is easy, just *easier than the rest" |
|
| ▲ | gxs 4 hours ago | parent | prev | next [-] |
| What a grounded take on this and wished more people saw it this way Just yet another case of people seeing only the extremes and not the entire spectrum You nailed it: in a corporate setting, code is definitely not the hardest part and it’s why companies can sometimes make do with a skeleton crew of offshore engineers who make $20-$30 bucks an hour The way harder part is building the right thing and just designing the thing soundly to begin with This type of software is where AI absolutely kills it - problems with tons of forum posts, writing code for systems with a ton of various kinds of quality developer documentation On the other hand, if you’re doing something novel or sending a $10bn machine to mars, you probably don’t want to yolo it with AI |
|
| ▲ | jibal 2 hours ago | parent | prev [-] |
| "easy" and "easier" have very different meanings. I've read through these comments and, as is typical of HN, virtually none of them refute or even address the points made by TFA. |