[HN Gopher] Imaginary problems are the root of bad software
       ___________________________________________________________________
        
       Imaginary problems are the root of bad software
        
       Author : deofoo
       Score  : 500 points
       Date   : 2023-06-18 14:42 UTC (8 hours ago)
        
 (HTM) web link (cerebralab.com)
 (TXT) w3m dump (cerebralab.com)
        
       | avgcorrection wrote:
       | I gave up on this article when I found out that the first
       | hypothetical scenario has no relation to reality.
       | 
       | Implementing something else "because if they implemented the real
       | spec they would get bored" is too much psychology.
        
       | legulere wrote:
       | The article rests on the idea that the management knows what
       | needs to get built, but my experience so far was that they are
       | usually even worse at that.
        
       | danielovichdk wrote:
       | I dont want to get paid and have fun.
       | 
       | I want to get paid to solve real fucking problems which has a
       | factual validated need from real people.
       | 
       | Most people are terrible professionals. Writes code to have fun
       | and expects to be paid too. And even blogs about it too.
       | 
       | I want to be in the trenches. Hard work. Real work. Not some
       | glamorous bullshit that lasts nowhere. Quality long lived
       | treasure is what I strive for.
       | 
       | And I dont want to progress by applying popculture technologies
       | because some punks subjective opinion wants to have fun. One has
       | to be a prick and tell these people off because they shovel shit
       | and pad their own backs when the re-shovels it with a new fad.
       | 
       | I want to progress by making slow surgery like precision work. I
       | want to make sure that what I do sticks and is sound quality, no
       | code is written for fun. Code is a fucking liability.
       | 
       | Between the scams and the hustle, the number runners and the pick
       | pockets, real people with real quality minds do real good work.
       | Those are the only programmers worth being around and hire.
       | Everything else is just a waste of time and mental capacity.
       | 
       | So many morons in this business. It's really too much.
        
       | hinkley wrote:
       | I spend a lot of time saying "I told you so" to people who were
       | sure my problems were imaginary. When you don't stay somewhere
       | long or you have a short time horizon it's hard to connect cause
       | and effect. Also pretending uncomfortable things don't exist is a
       | very popular character trait.
       | 
       | It's not impossible that some of the problems I see others
       | manufacture have a genesis in past traumas they are trying to
       | avoid (some coping mechanisms are healthier than others).
        
       | arpinum wrote:
       | Author gets it half right. Too many developers trying to have fun
       | by doing new things. Affordable initial software development
       | tends to come from places that have boring templated solutions
       | using 1-2 tools.
       | 
       | But the main argument is off - What some classify as imaginary
       | problems is actually building in the wrong types of affordances.
       | The only way to know the difference is by knowing your tools and
       | the problem domain.
       | 
       | The root of bad software is leaders lacking practiced learning.
        
       | daguar wrote:
       | This is why I truly love support-driven development.
       | 
       | While it's possible to prioritize problems that don't affect most
       | people (squeaky wheels) it's a hell of a lot more effective than
       | most of the methods I know to have a very low barrier to
       | contacting you for users, and fixing the things that come up.
        
       | vinyl7 wrote:
       | Developers have a lot in common with Rube Goldberg
        
       | HellDunkel wrote:
       | In the imaginary case of the merch selling android app i dont
       | think it is justified to solely blame the developers for the bad
       | product. The root cause for a bad outcome lies in the simple fact
       | that nobody wanted to tell the client that there was already a
       | solution for 20 bucks and absolutely no need for something custom
       | built. NOBODY except the business owner gains anything in this
       | and the client deserves the ripoff too. It comes as no surprise
       | that developers look for interesting challenges without appearing
       | too distracted by the stupid and boring bs work they are stuck
       | with.
        
         | golergka wrote:
         | Good reputation?
        
           | HellDunkel wrote:
           | Pure luxury if you live from hand to mouth.
        
             | Wowfunhappy wrote:
             | Reputation is what gets you more business in the future.
             | You can expand your business or raise rates, or both.
             | 
             | Yes, this won't help if you're literally in danger of not
             | meeting payroll next week, but I would hope most businesses
             | don't operate so close to the edge.
        
       | t43562 wrote:
       | On one project I did it was essential to be able to record how
       | much a tool was used so that we could charge for it. The tool ran
       | locally on the customers' machine and reported to our service.
       | The overall mechanism that sent and received this information had
       | to be reliable or we'd lose money but even worse would be to in
       | some way overcharge customers. Lots of aspects of the design were
       | complicated by this concern.
       | 
       | Then we ended up deciding not to make money out of it that way.
       | So we burned enormous effort and created a horrible design for no
       | reason.
       | 
       | So IMO the problem is usually with the way requirements are not
       | usually well understood even by the people asking for them. Later
       | on it becomes clearer what is needed but you're stuck with false
       | assumptions baked into your design in a way that you never have
       | bandwidth to remove because you need so much bandwidth just to do
       | normal work....because of those assumptions.
        
         | drc500free wrote:
         | I think the most important function of a good Product
         | Management team is to understand what parts of the go-to-market
         | impact tech decisions and spend 80% of their energy into
         | pinning those down as firmly as possible. There is a happy
         | medium between JIT delivery of specs for random features and a
         | hard two-year roadmap that can't react to business changes.
         | 
         | YNGNA is generally true, but Product's should have a very clear
         | vision of what kinds of entities the system is going to handle
         | over then next 36 months before they start asking for specific
         | functionality. I've seen extra shit get built, but I've also
         | seen e.g. a travel booking system that was built without a
         | "flight" being a first class entity. Flights were deduced on
         | the front end from attributes attached to seats... which worked
         | well until a PM asked for the UI to show fully-booked flights,
         | which HAVE no available seats that make it to the front end.
         | Same product couldn't handle the booker and traveler being
         | different people, when they knew from day 1 that it would be a
         | necessary feature. It would have been little extra work to
         | incorporate into the data model from the beginning, even if the
         | two values were always the same for a while.
         | 
         | I think the majority of the technical debt I've seen that isn't
         | ci/cd related is disconnect between the domain model the
         | product team is working in and the data model the engineering
         | team is working with. Formalizing that domain model is now one
         | of the first things I do when joining a team, so everyone
         | agrees on precisely what the major nouns and verbs are and how
         | they interact. Not just for the current system, for where we
         | think we will be in 2-3 years. With everyone doing agile, it's
         | amazing how many incompatible, un-written assumptions you
         | discover that hadn't been ironed out.
        
       | AmenBreak wrote:
       | [dead]
        
       | sam_lowry_ wrote:
       | "Premature optimization is the root of all evil".
        
       | esbeeb wrote:
       | So very funny! In a highly cynical way.
        
       | kmoser wrote:
       | The author is right, but doesn't seem to mention that this could
       | be solved, at least in theory, with better project management.
       | Devs focusing on the wrong thing? Project manager should be on
       | it. Scope creep? Project manager should be on it. Client asking
       | for irrelevant features? Project manager should be on it.
       | 
       | Replace those devs with ones who are focused on the right things?
       | Great, but you still have the other problems to deal with (scope
       | creep, uninformed clients), not to mention a host of other things
       | that can derail a project, such as poor communication.
       | 
       | tl;dr Most projects are poorly managed. Poorly managed projects
       | tend to fail.
        
         | steveBK123 wrote:
         | I think the move from project management to "product
         | management" really exacerbated this. The type of people that
         | gravitate towards "product" vs "project" management is one
         | thing.
         | 
         | Further, project managers tend to focus on delivering the
         | product stakeholders have asked for on time and on budget.
         | 
         | Product managers however I find are frequently searching for a
         | new expanded scope of stakeholders to brag they're
         | solutioneering to. I find them more often in the "solutions
         | looking for problems" business than I find developers, or at
         | least developers are only doing it on a micro-scale, while
         | product managers will take an entire team/org on 6 month
         | fruitless missions to build software destined for the dustbin.
        
         | mordae wrote:
         | The moment project manager stops taking care of minutes,
         | meeting agenda, getting all the stakeholders in the same
         | meeting and ensuring all issues have an assignee and instead
         | starts taking interest in the specifics of the project, I bail.
        
       | eternityforest wrote:
       | The main imaginary problems I commonly see are wheel
       | reinventions.
       | 
       | For the most part, the software I see works well for what it
       | does, and either has far too few features, or else all the extra
       | stuff they added is stuff that people actually use.
       | 
       | On social media things are different, that's been bad and
       | unsalvageable from the moment endless scrolling made it into
       | something people spend significant time on.
        
         | vinyl7 wrote:
         | I'd prefer see wheel reinvention because it leads to better
         | software.
         | 
         | 1) it's debuggable 2) it's fixable 3) it does exactly what you
         | need to do how you want to do it without any extra cruft and
         | nonsense.
         | 
         | Libraries or game engines are too generic to be fast and easy
         | to use because they need to solve for every possible use case.
         | And even then, there are still edge cases where what you want
         | to do cannot be done because of the architecture of the thing
         | and so you're stuck with a slow weird ducktape solution to get
         | around the 3rd party code's limitations.
        
       | davidmnoll wrote:
       | I agree with this to some extent. but there's a flip side too.
       | 
       | This mentality is often taken way too far. I had an old boss who
       | wouldn't allow me to write unit tests citing this thought
       | process.
       | 
       | Even at places with decent engineering practices, I've seen so
       | many examples of software where you're limited to a one to many
       | relationship for something that could and easily should have been
       | implemented as many to many, rendering the product useless to
       | many because a product person couldn't stand to think a couple
       | months ahead.
       | 
       | Some people seem to take this idea too far and basically assume
       | that if a problem is interesting or takes away a tedious task, it
       | must be overengineering, premature optimization, or an imaginary
       | problem.
       | 
       | Perhaps a better way to phrase the issue would be "artificial
       | constraints", which would encompass the flip side too.
        
         | mildavw wrote:
         | Yes. While it's less common, I've seen orgs struggle because
         | they didn't have _enough_ imagination.
         | 
         | Every feature is done quick'n'dirty and eventually you have
         | people whose full time job is to respond to customer complaints
         | and fix data straight in the production database.
        
         | pydry wrote:
         | Ive seen a lot of engineers _complain_ about YAGNI being taken
         | too far but none who have seen their concerns validated by
         | reality.
        
           | quickthrower2 wrote:
           | All depends on what the I is in the YAGNI. I have seen
           | development be parallised where the same work is being done
           | again and again by different developers in different ways
           | because YAGN { maybe 2-3 days of upfront architecture and
           | design for a 6 month project }. This results in bugs and
           | maintenance nightmares. This was before unit tests were
           | common though, so maybe unit tests may have saved it. But
           | surely it was slower to develop that way.
           | 
           | But tautologically you can't take YAGNI too far, if the
           | "YAGN" part is actually true :-). But that is always under
           | debate.
        
           | dagmx wrote:
           | I've had tons of times where YAGNI has bitten teams at a
           | FAANG. It's been responsible for re-orgs as products have to
           | pivot to meet the goals that were dismissed but turned out to
           | be needed.
           | 
           | I was creating a very important demo once, features i had
           | said were important were classified as YAGNI. Leadership
           | eventually saw that we couldn't deliver without said
           | features. YAGNI bit those teams in the butt.
           | 
           | these things happen all the time internally to companies but
           | get ironed out internally as well.
        
           | davidmnoll wrote:
           | I have seen it validated by reality several times... more
           | times than the opposite. I had a boss refuse to let me do a
           | refactor that changed these sketchy dynamic field tables into
           | json columns because "it's not customer facing." They were
           | unable to show off features in an important demo because the
           | endpoints were timing out despite putting 2 other people on
           | it for 2 weeks to find code-based optimizations.
           | 
           | 3 days later I deployed my "nice to have" fix and the
           | performance issues disappeared.
           | 
           | I've also seen a company stall out scaling for years and lose
           | multiple million-dollar customers despite having a novel in-
           | demand, market leading product because they refused to do
           | anything to clean up their infrastructure.
        
             | pydry wrote:
             | >I had a boss refuse to let me do a refactor that changed
             | these sketchy dynamic field tables into json columns
             | because "it's not customer facing
             | 
             | YAGNI isnt about not refactoring _existing_ technical debt.
             | It 's about not trying to pre-empt _future_ requirements.
             | 
             | If youre refactoring in anticipation of as yet
             | unmaterialized requirements then YAGNI applies - e.g.
             | generalizing code when when today there is 1 specific use
             | case because tomorrow you think there will be 3+.
             | 
             | If youre cleaning up existing code while working on it and
             | the boss stops you because "it's not customer facing" then
             | he's just asking you to violate the boy scout rule.
        
               | [deleted]
        
               | davidmnoll wrote:
               | All of these definitions are fuzzy... refactor versus
               | upgrade versus feature. When the people wrote it the way
               | they did, they were almost certainly thinking that they
               | don't need to overthink or over-engineer, and that they
               | should discount hypothetical future concerns.
               | 
               | I can give you an abundance of examples. We were creating
               | a page that was going to use state in a certain way. I
               | was trying to insist that we address the way state will
               | be handled across pages ahead of time. These concerns
               | were dismissed as premature optimization. A few months
               | later we had 5 pages with the state being handled in 5
               | different ways, and being synced in different ways
               | between each page, complete with if statements, sometimes
               | passing state through URLs, sometimes through local
               | storage, sometimes through session, sometimes through JWT
               | data, generally through a combo of several of them. Then
               | we'd end up with confusing redirect loops for certain
               | edge cases, state getting overwritten, etc.. We spend
               | weeks fixing these bugs, and, eventually, weeks
               | refactoring to manage state in a simpler way. These bugs
               | often got caught by customers, drawing us away from
               | feature delivery that was critical for demos to large
               | customers.
               | 
               | All of that could have been avoided by spending 1 day
               | thinking a little harder and planning for the future.
               | 
               | It ultimately boils down to a couple assumption that
               | people like to make. (1) engineers know nothing about the
               | domain, they can never predict what will be needed. That
               | might be true in a large company with obscure domain-
               | specific things for engineers who work far away from the
               | day-to-day, but sometimes the engineers know exactly
               | what's going to come up. (2) You can hill-climb your way
               | into optimal program implementation. You can get to local
               | maxima this way, but there are regular ways that programs
               | grow based on how the business is growing and you can
               | predict certain places where you will soon hit
               | diminishing returns for current implementations. As long
               | as you're up front about it and double-check your
               | assumptions about the way the business is growing (and
               | hence the application), I think there are ample places
               | where you actually are going to need it.
        
               | pydry wrote:
               | >I can give you an abundance of examples. We were
               | creating a page that was going to use state in a certain
               | way. I was trying to insist that we address the way state
               | will be handled across pages ahead of time. These
               | concerns were dismissed as premature optimization. A few
               | months later we had 5 pages with the state being handled
               | in 5 different ways.
               | 
               | The right time to address this was probably a bit at a
               | time after the 1st, 2nd and 3rd pages. Certainly not
               | before the 1st and definitely not after the 5th.
               | 
               | >All of that could have been avoided by spending 1 day
               | thinking a little harder and planning for the future.
               | 
               | The reason why you try as hard as possible to avoid
               | planning for the future is because it's really hard to
               | predict the future. Moreover humans have an inbuilt bias
               | towards thinking we are better than we are at it (hence
               | the gambling industry).
               | 
               | Refactoring as soon as possible after the fact will
               | always produce better designs than up front planning for
               | this reason.
               | 
               | >there are regular ways that programs grow based on how
               | the business is growing and you can predict certain
               | places
               | 
               | This is the kind of phrase that makes alarm bells go off
               | in my head that somebody SHOULD be following YAGNI and
               | isnt.
               | 
               | If it's defaults in a well worn framework that doesnt
               | railroad you then fine but anything more than that - red
               | flags all around.
        
         | IshKebab wrote:
         | Yeah I agree. I think the biggest mistake people make when
         | applying YAGNI is not considering how difficult it will be to
         | change later. If it's just some hard-coded value that you could
         | easily add to a config later? Fine. YAGNI.
         | 
         | If it's something more fundamental like language choice or
         | system architecture... Well fine YAGNI _now_ but if you ever
         | _do_ need it you 're screwed.
        
       | dtagames wrote:
       | The author hits the nail on the head with his claim that
       | imaginary problems are _more fun_ than real ones.
       | 
       | As developers and smart folks in general, we like complicated
       | problems that are big and far away. How many times have I heard
       | in a meeting, "Yeah, but when we have 1M users..."
       | 
       | It's great fun to think your product will get to 1M users. It's
       | also very unlikely. It's not nearly as fun to finish and ship and
       | market and monetize the half-broken thing the team is working on
       | now. Yet that's the only way out and the only way anyone gets to
       | 1M users to begin with.
        
         | Dudester230602 wrote:
         | Reddit has 1M users and is half-broken, yet monetization is
         | still a problem.
        
           | eddythompson80 wrote:
           | Reddit has 1M users? Where are you getting that from? The
           | only sources I could find suggest 50M daily users, 400M
           | monthly users.
           | 
           | https://thehill.com/business/despite-widespread-protest-
           | redd...
           | 
           | https://en.wikipedia.org/wiki/Reddit
           | 
           | https://backlinko.com/reddit-users
           | 
           | https://www.oberlo.com/blog/reddit-statistics
           | 
           | https://www.businessofapps.com/data/reddit-statistics/
        
             | Dudester230602 wrote:
             | 1M+ was implied. I am sorry I forced you to go on a stats-
             | collection side quest.
        
               | eddythompson80 wrote:
               | So what's your point exactly? The type of problems you
               | have to solve for 1M users is completely different than
               | 500M users including profitability.
        
         | [deleted]
        
         | astrobe_ wrote:
         | Not the first time the issue has been pointed out:
         | 
         | > Simplify the problem you've got or rather don't complexify
         | it. I've done it myself, it's fun to do. You have a boring
         | problem and hiding behind it is a much more interesting
         | problem. So you code the more interesting problem and the one
         | you've got is a subset of it and it falls out trivial. But of
         | course you wrote ten times as much code as you needed to solve
         | the problem that you actually had.
         | 
         | [1] http://www.ultratechnology.com/1xforth.htm
        
         | _fat_santa wrote:
         | As a solo dev on a project, I constantly re-evaluate whether
         | the thing I am working on is beneficial to my users or if it's
         | an "imaginary problem" as this post describes. In a large
         | software project you always have a laundry list of things to do
         | from: "fix the date format on this email template" to
         | "implement a better feature flag system". While I'm tempted to
         | always work on the "fun stuff" (the feature flag system), I
         | make myself work on the "boring stuff" (fixing the date format
         | on an email template) because I know that's what users need.
         | Occasionally you get an intersection where the cool fun an
         | interesting problem is also the most pressing one but I found
         | those times are few and far between and most times I have to
         | decide between the "cool fun [imaginary] problem" and "the
         | boring [real] problem".
        
         | icedchai wrote:
         | Reminds me of a PM I used to work with. "Will this work for
         | 1000 simultaneous users?" After almost 2 months, we have less
         | than 100 users total, maybe 5 of them log in a day, and maybe 1
         | will actually do anything of interest.
         | 
         | There is no _technical_ problem. The problem is nobody worked
         | on actually marketing the product. Build it and nobody shows up
         | is the norm.
        
           | mnd999 wrote:
           | I've worked somewhere like that. Our baseline requirements
           | for concurrent users were based on the numbers required for
           | the product launch team to maximise their bonus.
           | 
           | We never saw anywhere near those numbers in production, but I
           | don't really blame them - it was a big company and you do
           | what you can to get ahead. A lot of money was spent on
           | infrastructure that wasn't needed but nobody seemed to care.
        
           | TuringNYC wrote:
           | I was interviewing with a company that had barely any
           | customers and they were asking scaling questions with Spark,
           | etc. The salaries they paid could barely hire a team capable
           | of dealing with the complexities of Spark, so they asked,
           | "what would you do."
           | 
           | I told them I'd buy another stick of RAM and scale vertically
           | until I had more customers, and save money on staff in the
           | meantime. The interviewer went cold, I didnt get the job.
        
             | baq wrote:
             | Sounds like a dodged bullet.
        
           | codegeek wrote:
           | ""Will this work for 1000 simultaneous users?""
           | 
           | Whenever someone asks me this question, I reply with a
           | question "How many simultaneous users do you/we have today
           | and what is our projection say for 12-18 months from now ?".
           | If the answer is not clear, I tell them not to worry yet. If
           | the answer is very clear but numbers are much smaller today
           | (say 5-10), then I challenge them on where they think they/we
           | could be in 12-18 months. A lot of times, it helps the other
           | side see that they are mostly asking "How long is a piece of
           | string".
        
         | mkl95 wrote:
         | I recently added a couple of constants to some project. One of
         | my teammates said it wasn't a good idea, because we could have
         | hundreds of similar constants eventually.
         | 
         | Those constants represent the markets supported by that app. By
         | the time the app supports even a few dozen markets, every
         | engineer involved will have exercised their stock options and
         | left.
        
         | muskmusk wrote:
         | > The author hits the nail on the head with his claim that
         | imaginary problems are more fun than real ones.
         | 
         | Not necessarily. It's just that most developers have never
         | worked in a setting where they got to work on problems
         | properly.
         | 
         | Solving real problems for real people is very addictive. There
         | is a reason some people like working for startups. It's because
         | you live very close to your users and when you make them happy
         | you know.
         | 
         | The second interesting fact is that if you just plow ahead and
         | solve many real problems fast you will eventually run into
         | problems that are both real and interesting.
         | 
         | After having tried that there has been no going back for me. I
         | am allergic to imaginary problems. It feels as pointless as
         | watching people who are famous for being famous argue on TV.
         | 
         | I think we are all victims of our feedback loops. (University)
         | Education sublely teaches us that the only important problems
         | are those that are very difficult and preferably have never
         | been solved before. Those same problems also make for better
         | blogposts. In the real world the incentives are mostly
         | opposite. Problems with no known solutions (or only really
         | difficult solutions) are generally bad. They can be worth it,
         | but you should stay away from them until you know that are
         | worth it. Software engineers seem to almost pride themselves on
         | not knowing what their users want.
         | 
         | It takes a while to scrub all that bad learning out and replace
         | it with something better. Unfortunately some people are stuck.
        
         | paleotrope wrote:
         | I am dealing with that today. Talking about scaling out to
         | hundreds if not thousands of aws accounts and I'm like, "we've
         | added 6? in two years?" Why are we wasting time on this?
        
         | TillE wrote:
         | I remember having a similar argument with someone saying that
         | your C code has to compile and work on every platform that
         | exists, including weird CPUs with known bugs.
         | 
         | Unless you're working on something like the Linux kernel,
         | that's an imaginary problem.
        
           | lmm wrote:
           | "Newer versions of the compiler build your code with security
           | vulnerabilities" is a very real problem in C. E.g. since
           | x86_64 has no aligned memory access instructions, a lot of
           | programmers assume there's nothing wrong with doing unaligned
           | memory accesses, but actually recent gcc/clang will happily
           | compile those into RCE vulnerabilities.
        
         | qaq wrote:
         | Now you have a whole bunch of New SQL databases that will scale
         | past whatever number of users you can imagine. So your good old
         | Django or Rails app can scale to 1M or 10M users without you
         | doing anything exotic. That's not "fun" though.
        
         | tracerbulletx wrote:
         | This is why I think running a small business was the best thing
         | I ever did for my software career.
        
           | neon_electro wrote:
           | How do you manage sales?
        
         | tetha wrote:
         | And people underestimate how well some solid, dumb solutions
         | can scale. Boring spring boot with a decent data model and a
         | bit effort to stay stateless scales to the moon. Or, we're
         | having a grand "data export" system customers use to collect
         | data from us for their own DWHs. It has survived 2 attempts at
         | replacement so far. At it's core, it's psql + rsync, or was
         | recently migrated to psql + s3 when we decomissioned our FTP
         | servers. And it's easy to extend and customers are happy
         | because it integrates well.
        
           | ilyt wrote:
           | > And people underestimate how well some solid, dumb
           | solutions can scale.
           | 
           | I'd say they underestimate how long "just throwing money"
           | (servers) at the problem can work.
           | 
           | If you earn decent money now, scaling number of app servers
           | 10x times to serve 10x times the traffic will still earn
           | decent money. Doesn't matter that "PHP is slow", deal with it
           | when your infrastructure cost warrant hiring more/better
           | developers to fix it.
           | 
           | Especially now. Pair of fat servers on some NVMes and 1TB of
           | RAM gonna cost you less than few dev-months and that can
           | serve plenty of users in most use cases even before any extra
           | caching will be needed.
        
             | waboremo wrote:
             | Even then, you don't have to throw money at the problem
             | right away. If you feel you can save time and money by
             | using Rust instead of PHP (just using the two languages as
             | examples, not a specific indication of Rust or PHP's
             | resource drain), go ahead. Making that decision early on
             | costs nothing.
             | 
             | It's only after a project is off the ground that caring
             | about these decisions winds up wasting everyone's time,
             | that's when you wind up slowing momentum tremendously due
             | to dangling a potential new toy in front of your team.
        
           | tyingq wrote:
           | Yep. Facebook got pretty far down the road with PHP, MySQL,
           | memcached, etc.
        
             | fauigerzigerk wrote:
             | All they had to do was write a PHP compiler and a new
             | storage engine for MySQL.
        
               | ericbarrett wrote:
               | The trick was there was enough growth that the savings
               | from the compiler were _massive_. (I worked there at the
               | time.) The inefficiency of the PHP interpreter was a
               | great problem to have, because it came from the success
               | it enabled.
        
               | fauigerzigerk wrote:
               | So I think the interesting question is whether the rest
               | of us can learn anything from what happened there.
               | 
               | I believe Mark Zuckerberg simply used the technology he
               | knew and took it from there. That's fine. I probably
               | would have done the same thing.
               | 
               | But many people are making an ideology out of this,
               | arguing that not giving a shit about performance is
               | always the right choice initially because that's how you
               | grow fast enough to be able to retool later.
               | 
               | I think this is based assumptions that are no longer
               | true.
               | 
               | In the early 2000s, mainstream programming languages and
               | runtimes were either fast and low productivity or slow
               | and high productivity (Exceptions such as Pascal/Delphi
               | did exist but they were not mainstream). And the cost of
               | scaling up was prohibitive compared to scaling out.
               | 
               | Today, you can choose any fast high productivity
               | language/runtime and go very far mostly scaling up.
        
               | rafark wrote:
               | Learn what? That you should use the language that you're
               | more comfortable with and then scale? Or that languages
               | have become more efficient? Php 8, for example, is many
               | times faster than the php 4 and 5 that Facebook was
               | using.
        
               | fauigerzigerk wrote:
               | I think using what you already know remains a choice that
               | is very hard to criticise. But we didn't have to learn
               | that, did we?
               | 
               | Beyond that I think there is more to unlearn than to
               | learn from the history of the Y2K batch of startups. The
               | economics of essentially everything related to writing,
               | running and distributing software have changed
               | completely.
        
               | ericbarrett wrote:
               | I take away two lessons from it, which are in a kind of
               | essential tension that can only be mediated by wisdom and
               | experience:
               | 
               | 1) Pick technologies that you can optimize.
               | 
               | 2) Don't over-optimize.
               | 
               | Also, the concept of "optimization" here has very little
               | to do with the language itself. It's far more about the
               | overall stack, and it definitely includes people and
               | processes (like hiring). It's not like FB invested $0
               | toward performance before swapping out PHP interpreters!
               | Its massive caching layer, for example, was already
               | taking shape well before HPHP (the C++ transpiler which
               | preceded HipHop), not to mention the effort and tooling
               | behind the MySQL sharding and multi-region that still
               | exists in some form today. Many backend FB services were
               | already written in C++ by 2010. But they had already gone
               | very, very far--farther than most businesses ever will--
               | on "just" PHP. Heroics like HPHP only happened after
               | enormous pipelines of money were already flowing into the
               | company.
        
               | ilyt wrote:
               | Did they succeed because of PHP or was it just a tech
               | used at the time and anything else similar at the time
               | would be fine either way?
        
               | rafark wrote:
               | They succeeded because of php. It was easy to use for
               | them. So it enabled them to materialize their ideas. It
               | was the right tool for them. Anything else would have
               | been fine either way, if it was the language they were
               | the most comfortable with. In their case, it happened to
               | be php.
        
               | mikebenfield wrote:
               | Well, OK. But by that logic, if the language they had
               | been most familiar with was Fortran, should they have
               | used Fortran for Facebook? I tend to think that there are
               | actually material differences between languages and
               | technologies, and it's worth knowing more than one
               | language and not using terrible ones.
        
               | rafark wrote:
               | " But by that logic, if the language they had been most
               | familiar with was Fortran, should they have used Fortran
               | for Facebook"
               | 
               | Absolutely. Otherwise they wouldn't have been able to
               | release the actual product and keep adding features to it
               | the way they did with Facebook. They'd spend half the
               | time learning the "right" language & environment. That
               | would have slowed them down to the point they wouldn't
               | have been able to work on the actual product as much as
               | they did.
               | 
               | And feature-wise, Facebook evolved really quickly.
        
               | ilyt wrote:
               | That just sounds like "they succeeded because they knew
               | _a_ programming language ", not that it was right one
               | compared to competition
        
               | cagenut wrote:
               | your comment implies your understanding of the timeline
               | is backwards. they had to do those things _after_ they
               | had gotten hundreds of millions of users.
        
               | fauigerzigerk wrote:
               | Depends on what you consider "far down the road" and what
               | they had to do before writing a compiler and a storage
               | engine.
               | 
               | How long did it take until Facebook engineers realised
               | that their technology stack was not the best tool for the
               | job? It definitely wasn't the day when they decided to
               | build a compiler and a storage engine.
        
               | tyingq wrote:
               | I'm not sure there was really a best tool for the job in
               | 2003-2004 that would have been high-level enough to be
               | productive, and scalable enough to stay mostly as-is.
               | Java, maybe.
        
               | fauigerzigerk wrote:
               | I agree, and I'm not criticising the choices that Mark
               | Zuckerberg made at the time. But we are no longer facing
               | the same situation he did. We do now have high
               | productivity, high performance language runtimes. And
               | scaling up has become much cheaper (relative to the
               | number of users you can serve).
               | 
               | That's why I think it can't hurt to remind people of the
               | great lengths to which Facebook had to go in order to
               | deal with the limitations of their chosen platform.
        
               | tyingq wrote:
               | HipHop (later HHVM) was around 2010, so they scaled from
               | 2004-2010 before that became needed. MyRocks was 2015.
               | Wikipedia says FB was around 300 million users in 2009,
               | then 400 million users in 2010.
        
               | fauigerzigerk wrote:
               | Yes, good point. But you have to wonder what kind of
               | engineering effort went into scaling PHP and MySQL up to
               | the point where they decided to build a compiler and a
               | storage engine.
        
               | rafark wrote:
               | When you have half a billion users that both read and
               | write all day, you have to optimize, no matter the tech.
        
               | fauigerzigerk wrote:
               | That is undeniably true, but I do think the starting
               | point still matters.
        
           | phkahler wrote:
           | >> And people underestimate how well some solid, dumb
           | solutions can scale.
           | 
           | I think this started with the old Apache web server. When the
           | www got started, that server did the job so everyone used it.
           | The problem was it didn't scale, so all kinds of cool
           | solutions (load balancers and such) were developed and
           | everyone building something bigger than a personal blog used
           | that stuff. For most the root problem was that Apache had
           | terrible performance. Nginx has solved that now, and we also
           | have faster hardware and networks, so anything less than HN
           | can probably be hosted on an rpi on your home network. OK,
           | I'm exaggerating, but only a little. Bottom line is that
           | scaling is still treated like a big fundamental problem for
           | everyone, but it doesn't need to be.
        
         | chefandy wrote:
         | I worked with a project manager that went too far in the
         | opposite direction, though. Their pushback against premature
         | optimization manifested in wanting to start with a
         | functionalish "proof of concept" without any real design phase
         | so they can say we cranked out an MVP in the first sprint...
         | and before you know it, like most non-blocking technical debt,
         | the "migrate functionality to final codebase" kanban card moves
         | to the "long term goals" column (aka trash) and you're stuck
         | with a shitty, fragile producion codebase. The opposite side--
         | trying to get everything into a final state right off the bat--
         | it is like trying to play an entire 8 measure song in one
         | measure.
         | 
         | At the beginning of a project, before I write a line of code, I
         | try to: a) if it's user-facing software, get some UI designer
         | input to shape functionality/interactions, not styling. To end
         | users, the UI _is_ the software, not just the shell, so
         | mediocre UI = mediocre software. It can also illuminate needs
         | you didn 't consider that affect architecture, etc.; then b)
         | block out the broad stroke architecture, usually on paper, c)
         | intentionally choose languages/environments/tooling/etc rather
         | than reflexively going with whatever we've been using recently,
         | and d) spend some design time on a reasonably sane and
         | extensible, but not overly detailed data model.
         | 
         | There's no perfect solution, but at least in my cases, it seems
         | like a good middle ground.
        
           | jtriangle wrote:
           | The trouble is, an 'MVP' is often far from 'minimum' in those
           | sorts of situations.
           | 
           | The reality is that MVP should be missing most planned
           | functionality and should really just be a few core features
           | and functions that the rest of the application builds off of,
           | the trunk of the dependency tree so to speak. That idea is,
           | unfortunately lost on the majority of PM's, and ultimately it
           | costs more time/money to get to a finished v1 because of it.
        
             | chefandy wrote:
             | It was actually the appropriate scope for an mvp, it was
             | just an unreasonable time frame to make a solid codebase
             | for anything other than a demo for the complexity of the
             | project. That's fine for a genuine proof of concept/rapid
             | prototype you're going to be disciplined enough to trash,
             | but letting that slip into the role of your core codebase
             | is like pouring a sloppy scaled-down concrete foundation as
             | a test for a house, and then trying to just expand it into
             | what you need.
        
       | ozim wrote:
       | We have beef with AI hallucinating - get 5 people to work on a
       | problem and measure how much stuff they will make up from thin
       | air.
        
       | spencerchubb wrote:
       | > secure online banking is actually quite an easy problem to
       | solve . . . The storage and transfer of numbers is not a
       | particularly hard problem.
       | 
       | I don't know anything about banking software, but I have a hunch
       | the author underestimates the complexity (as is typical for HN).
       | The Efficient Markets Hypothesis would suggest that if it were so
       | simple to make banking software, then someone would do it.
        
         | jodrellblank wrote:
         | The shareprice of META fell by 75% from August 2021 to August
         | 2022, wiping about three quarters of a trillion dollars off its
         | market cap.
         | 
         | From October 2022 to now the shareprice tripled, adding half a
         | trillion dollars to its market cap.
         | 
         | Explain that in terms of the Efficent Markets Hypothesis?
         | "share prices reflect all information" - what half trillion
         | worth of information change came out in 2022? and what in 2023?
         | 
         | What about insider trading laws? How can we say "share prices
         | reflect all information" when we know there are people who have
         | more information which would give them an unfair advantage,
         | which means the current shareprice _cannot_ be reflecting the
         | information they have?
        
         | elcritch wrote:
         | Easy, banking and especially banking software is not an
         | efficient market.
        
       | hinkley wrote:
       | My venom for design patterns has risen over the years, and I
       | think the reason is that Patterns always represent concrete
       | architecture changes long before the last responsible moment.
       | 
       | In my code I tend to leave negative space. A spot where a feature
       | could logically fit, without having to really design that feature
       | before we need it. And as my comfort with compound refactoring
       | has improved, some code smells have fallen off of my veto list.
       | If we need to do X then this solution will stand in our way, but
       | we can alter it here and here if that becomes a problem. It works
       | well for a team of one, but it can be difficult to express in a
       | code review, when someone is adding the fourth bad thing to the
       | same block of code and now I'm pushing back for odd sounding
       | reasons because my spidey sense is tingling about bridges too
       | far.
        
       | api wrote:
       | The hard part here is telling the difference between a pure
       | phantasm of an imaginary problem and innovation. Things that have
       | never been done (or never really been done well) might look as
       | far off as hypotheticals.
       | 
       | I do think that "imaginary problem" is the answer most of the
       | time though. Most things that look like unnecessary complexity or
       | hobby horses really are.
        
         | seviu wrote:
         | And here am I struggling not to solve memory leaks or improve
         | up the build time of or speed of our app because I am stuck
         | implementing the most boring of the features already digested
         | by a team of businesses analyst and a design team.
         | 
         | Sometimes boring is just pure torture.
        
       | jameshart wrote:
       | This had good points up until the point where it conflated
       | banking software with 'moving a few numbers around'.
       | 
       | There are _vast_ differences between the pathologies that affect
       | small scale contract web app development as detailed at the start
       | of the article, and those that affect global enterprise
       | development such as is required to build large scale online
       | banking systems. The biggest difference being that many of the
       | things which are 'imaginary problems' for the small time web app
       | are very much 'real problems' for a publicly traded company with
       | responsibilities to several government regulatory agencies.
       | 
       | And sure, these institutions are _just_ as prone to conjuring
       | imaginary requirements, but it requires considerably more
       | sophistication to tell the difference between 'something someone
       | in the German compliance office dreamed up to make themselves
       | seem important' and 'something that if we get it wrong will
       | result in billion euro fines' when you're building a banking
       | system rather than a podcast website.
        
       | g9yuayon wrote:
       | This is such a great article. Amazon tackles this problem by
       | emphasizing "working backwards", but it ultimately depends on the
       | people who enforces such cultural value. I remember in one of the
       | Uber all-hands meetings, an engineer asked the CTO whether Uber
       | engineers should always make sure their systems can handle at
       | least a million requests per second. To Thuan's credit, he
       | unequivocally said no.
        
       | honkycat wrote:
       | ---
       | 
       | They've put their heart and soul into creating this app, and it
       | has some amazing features:                   A state of the art
       | recommendation system              An algorithm generating the
       | transcript of all your streams, in real time              Your
       | front page loads in sub 200ms times all over the world
       | A streaming protocol and client build almost from scratch, in
       | case you don't want to rely on Facebook live              A
       | service that allows you to easily integrate over 20 ad exchanges
       | 
       | ---
       | 
       | What a dumb article.
       | 
       | This is just made up. If you hired consultants and they pulled
       | this lawyers would be involved.
       | 
       | I stopped reading here. Why continue reading something based on a
       | fake premise.
        
       | varelse wrote:
       | [dead]
        
       | sychou wrote:
       | Well said. It's a relative of the premature optimization problem.
       | I often think of them as unearned problems.
        
         | myself248 wrote:
         | Alternately, it's more fun to write sci-fi than to deal with
         | today's reality.
         | 
         | And the gap is widening...
        
       | nico wrote:
       | Imaginary problems are the root of all problems
       | 
       | Maybe a Buddhist could say
        
       | Aperocky wrote:
       | Premature optimization is the root of all evil.
       | 
       | Simple > Complex.
       | 
       | It's amazing how many otherwise brilliant people dive headlong
       | into project without considering these basic principals or even
       | intentionally brush them aside.
        
         | Dudester230602 wrote:
         | And now we will have AAA games with poor performance and DLSS
         | slapped on.
         | 
         | Maybe optimal performance is a feature? Feature worth working
         | on from start?
        
           | Aperocky wrote:
           | And here's the deal, with more years in this industry, I've
           | always found that the optimal performance almost always comes
           | from a simple architecture.
           | 
           | And that performance optimization done prematurely often
           | achieve complete opposite result. Meanwhile performance
           | optimization done at necessity rarely have the same problem.
        
         | klysm wrote:
         | I believe Saying simple > complex doesn't actually mean
         | anything because it's effectively impossible to pin down
         | definitions. They are totally in the eye of the beholder.
         | Solutions that are simple in one axis almost always trade of
         | complexity in other axes.
        
           | McGlockenshire wrote:
           | That's why I prefer the form "Do the simplest thing that
           | could possibly work."
           | 
           | There's always going to be a minimum level of complexity.
           | Sometimes that minimal level calls for throwing a PHP script
           | up on some shared hosting provider somewhere. Sometimes that
           | minimal level calls for an Enterprise-level design with ten
           | layers of abstraction because you need to be able to
           | individually unit test every aspect.
           | 
           | Being aware of where and when to introduce complexity is half
           | the battle.
        
             | klysm wrote:
             | I still don't think that's a very useful mental tool
             | because it also hinges on what _you_ think is simple.
        
           | magicalhippo wrote:
           | As a good illustration, consider FEniCS[1], where you can
           | write a few lines of Python code which looks almost exactly
           | like the math you're trying to solve, and have it compute the
           | answer. Very simple!
           | 
           | Except to make that work there's a lot of infrastructure,
           | including runtime-generated-and-compiled C++ code that gets
           | dynamically loaded by said Python code to perform the actual
           | calculations. Quite complex!
           | 
           | The true skill comes in finding the right balance between
           | simplicity and complexity for a given situation.
           | 
           | In the case of FEniCS, the complexity is worth it because it
           | allows the system to be used by less skilled programmers (who
           | might know more about the math and physics), and the
           | complexity handled by experienced programmers.
           | 
           | For our codebase we've got junior programmers who might need
           | to read and understand my code if I'm on vacation and shit
           | hits the fan, so I err on the side of making it easy to read
           | and reason about. Which might not be the "simplest" for some
           | measures of simplicity (like fewer lines of code).
           | 
           | [1]: https://fenicsproject.org/
        
             | physicsguy wrote:
             | I'd argue that FEniCs was a prime example of this in some
             | ways, at least earlier in it's history.
             | 
             | I started using it in about 2014. It was not exactly what I
             | would call a simple project. It used to be an ordeal to
             | build, could only easily be used via Docker, ported to
             | Python 3 a long long time after most of it's dependencies
             | did, had an unstable C++ API that changes were not
             | documented for but nonetheless you were required to use if
             | you wanted for reasonable performance for some
             | calculations, etc. The national supercomputing centre in my
             | country managed to only get one version to build because it
             | was so poorly specified at the time and basically only
             | supported Ubuntu!
             | 
             | FEniCsX is considerably better usability wise, but that's
             | the result of hard lessons learnt.
        
       | Nevermark wrote:
       | OMG, never has truth been so funny and yet so tragic.
       | 
       | This article, its art and its font choice, shall be preserved
       | forever in the archive of Historical Documents.
       | 
       | Our eternal response to unnecessary complexity? "Never give up!
       | Never surrender!"
       | 
       | --
       | 
       | ADDENDUM:
       | 
       | The article makes a good case for formally adding "manufactured
       | complexity" and "miscommunication complexity" to "accidental
       | complexity" and "necessary complexity".
       | 
       | They are quite common distinct causes.
        
       | lewisjoe wrote:
       | If anything it's the incentive system in software industry, which
       | is at fault.
       | 
       | 1. No designer is given promotion for sticking to conventional
       | designs. It's their creative & clever designs that get them
       | attention and career incentives.
       | 
       | 2. No engineer is paid extra for keeping the codebase without
       | growing too much. It's re-writes and the effort he puts in to
       | churn out more solutions (than there are problems) that offers
       | him a chance to climb the ladder.
       | 
       | 3. No product manager can put "Made the product more stable and
       | usable" in their resume. It's all the new extra features that
       | they thought out, which will earn them reputation.
       | 
       | 4. No manager is rewarded for how lean a team they manage and how
       | they get things done with a tiny & flat team. Managers pride
       | themselves with how many people work under them and how tall in
       | the hierarchy they are.
       | 
       | Our industry thrives on producing more solutions than needed.
       | Efforts are rewarded based on conventional measurements, without
       | thinking through- in what directions were the efforts pointed at.
       | 
       | Unless the incentives of everyone involved are aligned with
       | what's actually needed, we'll continue solving imaginary
       | problems, I guess.
        
         | x86x87 wrote:
         | I call this "the tragedy of software development"
        
         | wildekek wrote:
         | All of those are absolutely real. There is a lack of economics
         | and a surplus of optics in the game for all players.
        
         | tzhenghao wrote:
         | "Show me the incentive, I'll show you the outcome." - Charlie
         | Munger
        
         | voz_ wrote:
         | Uber was a massive example of this. The best engineers kept
         | their head down and just tried to keep things afloat, fixing
         | bugs, etc.
         | 
         | However, a large and insidious cadre of B tier engineers was
         | constantly writing docs proposing meaningless arbitrary system
         | changes and new designs for the sake the changes themselves.
         | These new projects were the only way to get promoted. The
         | entire e4->5->6->7 track was written in such a way that it only
         | ever encouraged "TL"/"architect"types to grow.
         | 
         | This led to constant churn, horrible codebases, and utter
         | bullshit self made problems which could only be solved by
         | digging a deeper hole.
         | 
         | There are companies who handle this well. Ultimately it comes
         | down to engineering culture.
        
           | nine_zeros wrote:
           | The career ladder is among the biggest fuck ups of the tech
           | industry. They incentivize bullshittery more than actual
           | innovation. There are more rewards for BS RFCs than in
           | keeping the ship running.
        
         | throw10920 wrote:
         | They're not mutually exclusive.
         | 
         | FOSS software has vastly different incentives than commercial
         | software, yet suffers from many of the same problems:
         | bugginess, poor performance, lack of documentation, feature
         | misprioritization, bad UI.
         | 
         | That alone indicates that the problem is not merely "misaligned
         | incentives".
         | 
         | Actually, you can reduce _most_ problems down to  "misaligned
         | incentives" if you're overly reductive enough. That doesn't
         | mean that it's a useful way to think about the world.
        
         | xyzelement wrote:
         | Maybe I am biased by my background in finance tech but I saw a
         | ton of guys get rewarded for what (at the time) seemed like
         | boring maintenance of systems.
         | 
         | In retrospect - it was recognized that they built or took good
         | care of money making systems with little drama and that was
         | well appreciated by the companies.
         | 
         | In FAANGs I see now more of "what will get me promoted" versus
         | "what is gonna make the company money" ethos.
        
         | sirsinsalot wrote:
         | > No engineer is paid extra for keeping the codebase without
         | growing too much.
         | 
         | I am. I'm paid more than most developers to run a team doing
         | just this. We make minimal change, have an absolutely non-
         | negotiable focus on stability and minimalism and reject any
         | change that isn't absolutely driven by validated majority user
         | need. Even then, the bar is high.
         | 
         | I'm not saying this is a common situation, but it certainly
         | isn't rare in my experience. Software is a vastly wide scope of
         | software types and requirements. I'm paid to be ruthless, and
         | to know what ruthless looks like in terms of delivering
         | consistently without downtime/data loss/critical issues.
        
           | chubot wrote:
           | What kind of software do you work on? At what company?
           | 
           | I have seen low level parts that are managed well, because
           | employees have skin in the game
           | 
           | But I've also seen a lot of what this post is talking about
        
             | bombolo wrote:
             | Until you have the star developer that starts promising the
             | product manager he can do all the extra features in a week.
             | And then of course none of them actually work decently or
             | at all. But at that point it must be maintained by the
             | whole team anyway.
        
             | whstl wrote:
             | I'm in the same boat as GP. I work in finance. CTO said he
             | wanted to keep things simple and stable, so I do it.
             | 
             | It is only possible because I'm a technical manager myself
             | and I have a very competent (and technical) product manager
             | working with me.
             | 
             | But for every person like me, there are 10 other devs
             | trying to cram every pattern from the GoF book in their
             | corner of the codebase, so I have to spend my scarce time
             | reviewing PRs.
        
           | kylelahnakoski wrote:
           | Minimal change, or minimal code? Refactoring code can make
           | code smaller but depends on good testing. Applying minimal
           | changes results in redundant and complicated code, but less
           | likely to break existing functionality.
        
           | jtriangle wrote:
           | Bless you man, you're doing the lords work
        
             | [deleted]
        
         | Xen9 wrote:
         | This kind of problem surfaces in a large amount of systems
         | involving humans and roles.
        
         | AndrewKemendo wrote:
         | I'm going to reference this comment in the future when I build
         | my next software product. Thanks
        
         | bluGill wrote:
         | There are exceptions to all the above, but only after the worst
         | case burns from failure to do those things. If you are losing
         | customers to competition that doesn't crash, then suddenly you
         | can be the hero by making yours more stable. Of course only if
         | you can do this before the company dies.
        
         | hinkley wrote:
         | There's a couple of woodworking hand tool companies who among
         | other things make replicas of old school Stanley tools, the way
         | Stanley used to make them (materials and tolerances). They also
         | fuse the best elements of several eras or manufacturers to make
         | slightly better versions. Surfaces from this one, handles from
         | that one, adjustment mechanism from a third.
         | 
         | I hope that I live to see a time when software applies modern
         | algorithms to classic designs and produce "hand tools" in
         | software.
        
           | Aerbil313 wrote:
           | The field of software is maturing as we're reaching the end
           | of Moore's Law and time passes. Times of constant innovation
           | is very slowly coming to an end, the curve is slowly
           | flattening. You can already see it with general trends like
           | type-safety, DX features universal in all languages (linting
           | etc.), browsers finally becoming the universal OS (Wasm,
           | WebUSB, GPU), more and more things being standardized every
           | day.
        
         | segh wrote:
         | I'm not sure it's just incentives. Inexperienced early stage
         | founders often end up solving imaginary problems, despite
         | having a real incentive to get it right. The Y Combinator moto
         | is "make something people want" because so many people don't.
        
         | marcus0x62 wrote:
         | And at least at the "enterprise" level for B2B software, there
         | is intense customer demand for more features and,
         | simultaneously, more stability.
         | 
         | From my view, that and pressure from the analyst racket are the
         | main drivers behind feature bloat with self promotion a distant
         | third.
        
         | bombolo wrote:
         | Coworker of mine wrote a thing in java... it was too slow
         | (intensive locking between threads)... so he rewrote it in C...
         | it was crashing all the time (because he sucks), then he
         | rewrote it in go. Got promoted for this feat.
        
           | ilyt wrote:
           | That's kinda what initally Go was made for IIRC. They noticed
           | people which job is not programming but had to write some
           | code (say some analytics or sth) often did it in Python, and
           | if it was too slow they moved to C or Java and were
           | predictably terrible at it, so that's why Go was made simple
           | and with builtin concurrency primitives.
        
             | bombolo wrote:
             | But his job is programming. He is very proud of his C
             | skills. If you listen to him, it crashed because C is
             | intrinsically bad (it is difficult yes), but I guess it was
             | also such a bad codebase that rewriting it made sense.
             | 
             | He also holds a grudge against me for having dared to
             | rewrite a sacred C library he wrote (that was a constant
             | source of segfault and I rewrote in 1 afternoon).
        
               | ilyt wrote:
               | Sounds more like his job is producing tech debt. I saw
               | few people like that, basically none of their code was
               | left as most of that needed to be eventually replaced coz
               | it was shit.
        
         | analog31 wrote:
         | You can still get away with these things if your only user is
         | yourself or maybe a small handful of non-enterprise folks. This
         | could be why the so called "scientific" programmer feels like
         | they can be as productive as a team of 10+ software developers.
         | 
         | And also why the most frequent request from the users is:
         | Please don't change anything.
         | 
         | The principal-agent problem looms large in software.
        
         | sh34r wrote:
         | I agree with just about everything you've said, except that bit
         | about rewrites. Rewrite projects typically go down in flames,
         | and on the rare occasions that they don't, the business
         | stakeholders are still mad because their precious feature
         | factory was down for maintenance for months.
        
           | Hackbraten wrote:
           | > months
           | 
           | Please.
        
         | yieldcrv wrote:
         | and the re-writes have to be in a trendy language that other
         | companies are using, just for the engineer to stay relevant.
         | 
         | everything about engineering group decisions are about creating
         | a reason to use a newer framework in a way other people can
         | vouch for.
        
         | rapht wrote:
         | You can think of it in even broader terms: being/staying lean,
         | re-using tried and tested things, adapting your requirements to
         | widely available solutions rather than developing custom
         | solutions to fit your requirements, making everything work more
         | efficiently, etc -- all those resource-minimization issues are
         | "less" problems: not good problems to be working on when your
         | raison d'etre is "more" -- and that's the only raison d'etre
         | for a lot of people and actually for all businesses. (Obviously
         | there are also specialists for doing "less" "more":
         | unsurprisingly, they are generally paid a cut of savings.)
        
         | joshlemer wrote:
         | I don't know, the more I advance in my career, the more I see
         | it as the opposite. Wide eyed developers with big designs, who
         | are obsessed with the technical aspects of a solution, who
         | disregard the practicalities, long term implications at the
         | social level (who is going to maintain this, do we have people
         | that have that skillset, is this worth the effort, does it
         | really matter to be this elegant, or is it more important to
         | ship quickly and economically) come off as a bit immature and
         | the more effective engineers who understand these priorities
         | are given more respect and authority.
        
           | gopalv wrote:
           | > the more effective engineers who understand these
           | priorities are given more respect and authority.
           | 
           | The problem with "given more authority" I see is that
           | management plucks these engineers out to make their day job
           | basically "sit in meetings" if you're even slightly effective
           | at simplifying life for everyone else.
           | 
           | Because that is the place of most leverage to place those
           | people, but then those people are in a constant tug-of-war
           | with the first group of "fresh ideas".
           | 
           | Eventually, the people who are in charge of the "prevention
           | of bad architecture" become the bad guys because they (or me,
           | I'm projecting) get jaded into just finding out what's wrong
           | with something as fast as possible to be able to keep up with
           | that workload.
           | 
           | You go from a creative role to a fundamentally sieve role
           | with destructive tendencies, where you are filtering out the
           | good from the bad as fast as possible, be.
           | 
           | First of all, not all new ideas are bad and "there's
           | something bad about X" is not a "let's not do X".
           | 
           | Secondly, going from making things to shooting down things is
           | intellectual suffering if you have a bit of empathy.
           | 
           | Some people on the "committee" with you don't have empathy &
           | literally enjoy it - you're either trying to damage control
           | on a case-by-case or building a "these assholes need to be
           | fired" doc out of the meetings.
           | 
           | I realized what I would become if I conflated authority and
           | respect ("respect my authoritah!").
           | 
           | Quitting was really the only way out of it. But it wasn't
           | hard to explain to my spouse that i needed to leave for a job
           | a level down and which paid half as much, because she could
           | see me bringing my "why the hell do we have to do this"
           | attitude home & to family decisions.
        
           | tacitusarc wrote:
           | As a team lead, I've found it really difficult to keep
           | curious, smart, young engineers on track. Everyone wants to
           | go off and build shiny things instead of solving real
           | problems. I have to find enough shiny problems that actually
           | need solving to balance out the daily grind. Interestingly, I
           | also find it difficult to instill a sense of meticulousness,
           | and how important it is to write code in a way that reduces
           | bugs. Clever engineers come up with clever, complicated
           | solutions that are written quickly and rely on coincidence to
           | function. Life experience is the best teacher for this, but I
           | often need to step in. I'm still not sure what the balance is
           | there.
        
           | stuckinhell wrote:
           | The problem for a lot of the social level issues is that it
           | is pure pure politics.
        
         | llanowarelves wrote:
         | I like that it's this way so we can easily compete with these
         | dysfunctional companies. Don't fix them :)
        
         | ronnier wrote:
         | I really think we have too many people working at most
         | companies. It pushes people to the extremes and edges just to
         | have something to work on. Managers need more people under them
         | to get promotions. And managers want to manage managers to keep
         | moving up. They fill teams of people on products that could
         | really be ran by a fraction of the engineers. But that's not
         | where we are, we are on large teams working on small areas of
         | the product inventing areas to build in and often ruining the
         | product as a result.
         | 
         | We also get slower with so many people. The coordination
         | overhead is killer and losing context as the product is sliced
         | up into small parts that move on without you
        
           | CBLT wrote:
           | > we have too many people working at most companies.
           | 
           | I half-disagree with this. My take is significantly more top-
           | down: senior management has a deficient concept of how
           | product development works. They believe Manpower is to be
           | spent to achieve revenue, either by directly selling the
           | result as a product (e.g. airplanes selling wifi to
           | passengers) or by it being a differentiating feature for the
           | sales department. This causes every allocation decision (like
           | hiring) to fundamentally be biased around getting a tangible
           | return: by creating new projects, new features, and new buggy
           | microservices.
           | 
           | Further, since management only has two knobs (manpower and
           | timeline) to play with, they like to move them to feel like
           | they're optimizing the project. It's always the same
           | fallacies, too: "we hired more people so we can create
           | explosive growth", "we created ambitious timelines, now we're
           | striving to fill them" etc.
           | 
           | I don't have a solution for this, except to note that it can
           | be mitigated by managing up. Construct your own narrative,
           | and take advantage of the fact that the non-technical people
           | above you govern almost entirely by gut feeling.
        
         | morning-coffee wrote:
         | ^ this ^
         | 
         | Until we figure out a nice metric for "removing complexity" and
         | then rewarding for it, it's not likely to change, IMO.
        
         | pavlov wrote:
         | _> "No designer is given promotion for sticking to conventional
         | designs. It 's their creative & clever designs that get them
         | attention and career incentives."_
         | 
         | This is a massive change from my first software industry job in
         | 1997.
         | 
         | I was essentially a "design intern who knows HTML" on a team
         | that built a shrinkwrap Windows application for enterprises.
         | The core of the design team was a graphic designer, a cognitive
         | scientist, an industrial designer, and a product manager with
         | industry experience in the customer domain.
         | 
         | The application was Windows native. User research was conducted
         | on site with scientific rigor. Adhering to platform guidelines
         | and conventions was a priority. I think I spent a few weeks
         | redrawing hundreds of toolbar icons so they'd be in line with
         | the Office 97 look (the kind of boring job you give to the
         | junior). If the app stood out on the Windows desktop, that
         | would have been considered problematic.
         | 
         | Today a similar design team would only have a graphic designer
         | and a PM, and neither of them would care the slightest about
         | platform guidelines or customer domain. The UI is primarily an
         | extension of the corporate brand. Hiring a cognitive scientist?
         | Forget about it...
         | 
         | Everything certainly wasn't perfect in the Windows/Mac desktop
         | golden era. But the rise of the web wiped out a lot of good
         | industry practices too.
        
           | aldanor wrote:
           | Today they might have a psychologist on the team to research
           | which buttons may serve as dopamine triggers so you're a lot
           | more likely to upgrade to Premium before thinking it over
        
             | pavlov wrote:
             | Right. Making people click on things they didn't mean to
             | and buy things they didn't want -- those goals were not
             | even a part of the 1990s UI paradigm.
        
               | hnlmorg wrote:
               | 1990s design was all about preventing people from
               | accidentally doing actions they might not have wanted to.
               | Even down to the "Are you sure you want to quit"
               | dialogues that were all the rage.
               | 
               | It's sad just where we are now compared to the design
               | goals of old.
        
           | WinLychee wrote:
           | There's been a large influx of people chasing dollars and
           | status, they could not care less about the product or who
           | uses it. You can still find orgs that do care, but they're
           | swiftly pushed out by the VC-funded "growth at any cost"
           | model or are acquired into oblivion.
           | 
           | The indie scene is looking excellent however, a lot of
           | programmers who have already made their money seem to be
           | pushing excellent hobby projects out.
        
           | jakubmazanec wrote:
           | I have another theory: it's all about the screen size. When
           | you had only 320x240--1014x768, you simply MUST have thought
           | about UX (in the sense of "How can I fit all this info in
           | this little space?"
           | 
           | Now you don't have to. So no one does.
        
           | lewisjoe wrote:
           | From a person who started using computers from the early
           | 2000s era:
           | 
           | THANK YOU!
           | 
           | None of the current SaaS apps I use can come close to the
           | experience of using softwares from that era.
           | 
           | Take a simple list view of a typical Windows/Mac software?
           | 
           | 1. Command clicking selected multiple objects
           | 
           | 2. Shift clicking selected a range.
           | 
           | 3. Right clicking brought up selection actions.
           | 
           | 4. Double clicking opened an object.
           | 
           | This pattern was followed in almost list views and there was
           | no re-learning and surprises.
           | 
           | Now can you say the same about the list views of modern web
           | apps?
           | 
           | Can you apply the same list selection experience across
           | Google Drive and Microsoft OneDrive and Apple iCloud? Nope.
           | 
           | That's were we failed as an industry. We let a lot of
           | designers run too wild with their ideas, to put it bluntly.
        
             | ilyt wrote:
             | And everything had a keybind so if you worked in software
             | every day you could be as fast as cli nerds.
        
               | someweirdperson wrote:
               | And not even be slowed down by animations.
        
             | bombolo wrote:
             | The problem with the controls is mostly because they don't
             | want to pay for Qt (multiplatform toolkit), so instead
             | every company (badly) implements their own controls in HTML
             | to save money. I suspect ultimately they waste much more
             | money than they save.
        
               | whstl wrote:
               | Qt isn't even in the radar of most companies currently
               | building multi-platform applications in HTML. And it
               | won't be soon, for two main reasons: developers able to
               | use it are expensive, and most Qt applications in the
               | wild still have the "uncanny valley" look and feel about
               | them on every OS but Linux.
               | 
               | Not to mention that with SaaS being more profitable than
               | selling unlimited-use licenses, a lot of apps also have
               | HTTP backends and webapp versions, which can share a lot
               | of HTML/CSS/JS code with a browser-based desktop version.
               | Think of Slack/Discord/VSCode/etc. Sure: Qt, Flutter, etc
               | also have web versions, but they just don't look/feel as
               | good in the browser as an HTML app normally can.
               | 
               | If you want a "Premium" native look and feel, people
               | gotta go directly to the source: native APIs. Qt won't do
               | it without a lot of work. Lots of companies have separate
               | Android and iOS teams. Or they go directly to HTML when
               | there's not enough cash (or even things like Flutter,
               | which look ok in mobile). High-quality macOS apps, like
               | those made by Panic, Rogue Amoeba, etc, use Cocoa
               | directly.
               | 
               | Standardized controls and shortcuts unfortunately end up
               | being collateral damage in all of this.
        
             | lfowles wrote:
             | Those four actions worked for me on the Google Drive web
             | interface
        
               | lewisjoe wrote:
               | Great! Now try it in any other list view in any other
               | app.
               | 
               | Maybe the list of docs in https://docs.google.com?
        
               | evandale wrote:
               | On my phone so it's hard to check, but Gmail's ctrl and
               | shift clicks work really well and is intuitive to me. I'm
               | shocked they wouldn't use the same mechanics everywhere.
               | 
               | Best example: Gmail is one of the only webapps I'll ctrl
               | click a few items at the top of the list, ctrl click a
               | few in the middle, and then shift click to the bottom and
               | it works exactly how I'd expect - everything stays
               | selected and the shift+click selects from your previous
               | click to the next item. I think it gets wonky if you
               | change directions but I can't imagine how I'd expect
               | ctrl+click item 1, 2, 9, 10, then shift click on 4 would
               | work.
        
           | ilyt wrote:
           | Remember times where you could change the theme and all of
           | the apps followed suit ?
           | 
           | Even in Linux there were tools to sync gnome with QT look so
           | you could have one theme applied to every app for nice and
           | consistent look, all the way to how the common icons look.
           | 
           | Nowadays ? Every fucking app gotta have their own different
           | styling. Will the setting icon be three dots, gear, or honey
           | badger ? WHO FUCKING KNOWS. You'd be lucky if you even get a
           | choice between light and dark theme
           | 
           | But hey, we can write same code to work on windows, mac and
           | mobile ! It will work shit in all of them and be slow but we
           | don't care!
        
             | AndrewKemendo wrote:
             | Oh man I totally forgot about that. Thank you for the
             | reminder.
             | 
             | Total flashbacks to windows 95 and every so often changing
             | the windows color, text font etc. for the entire system
             | 
             | Good times
        
             | wheybags wrote:
             | I remember that theory. I also remember the reality that if
             | you changed your background colour to anything but white,
             | some app, somewhere, was going to become an unreadable
             | black text on black background mess.
        
             | nicoco wrote:
             | > Even in Linux there were tools to sync gnome with QT look
             | 
             | There are still such tools, you don't have to use the past
             | tense here.
        
             | thwarted wrote:
             | And it got worse with client side decorations. Now even
             | window interactions are app-specific and don't adhere to
             | global settings.
        
             | pdntspa wrote:
             | Even better, every app is doing their own styling so they
             | can all look like Discord
        
         | chillbill wrote:
         | I don't think it's as easy as you're making it to seem. The
         | issue is that there are unintended consequences to each one of
         | those points you mentioned. I'm pretty sure a substantial
         | amount of thinking goes into software design from all aspects
         | and it's a bit reductive to say that it's just lack of
         | incentive. Humans doing software are not some machine learning
         | algorithm to train with reinforcement learning techniques.
        
         | [deleted]
        
       | duxup wrote:
       | > It should be noted that this issue isn't unique to developers.
       | Management, sales, HR, support, legal, and even accounting
       | departments have their own unique ways of creating imaginary
       | problems. They try to involve themselves too much in a decision,
       | when their presence at a meeting is just a formality or wasn't
       | requested at all. They overemphasize a minute problem that is
       | related to their role, or hire teams much larger than necessary
       | to illustrate their importance.
       | 
       | I run into this more often than problems I imagine. A whole
       | series of what ifs and folks imagining things. The worst part is
       | the fixes to their imaginary problem are usually not well thought
       | out and drive things towards worse choices.
       | 
       | I'm a big believer in getting version 1 out the door as problems
       | people imagine often... are never relayed by the actual customer.
       | 
       | I often work with some routing software (let's say routing
       | packages). There is a simple mode that works great. Anyone can
       | use it.
       | 
       | The issue is people want to establish say 20 rules about how /
       | when / what is routed. Business folks insist that it be "easy"
       | for "anyone to use" just like the existing easy mode.
       | 
       | This is doomed from the start. We can make it easier for sure,
       | but if you have 20 rules with different weighted priorities:
       | 
       | 1. It is complex for most people to think of. It will look
       | complex because it is complex.
       | 
       | 2. That's ok because the guy with 20 rules probably has thought
       | about them and understand they have 20 rules.
       | 
       | Then we give them UI to visualize it all and customer is happy.
       | 
       | But the business folks are upset because the visualization is
       | complex... and there we are again.
       | 
       | For the record I usually get through this slog and everyone is
       | happy in the end, but it is a slog due to imaginary problems.
        
       | vbezhenar wrote:
       | How do you manage boring part though? Going mad because of
       | boredom is a real thing. I definitely agree that some of my job
       | is caused exclusively by my need to keep myself entertained. But
       | what's the solution?
       | 
       | Another factor is resume driven development. Yes, you can frown
       | upon it all the day, but in the end I'll switch company and I'll
       | need to find a new job. And, like it or not, but everyone these
       | days wants a lot of experience from their workers. I'd love to
       | write C89 in the dark corner for the rest of my days for
       | reasonable compensation, but I don't see those jobs, what I see
       | is billion keywords k8s spring boot react query metrics jaeger
       | aws yada-yada.
        
         | morning-coffee wrote:
         | Try to find other real problems to work on that are _different_
         | from your current boring parts? The new problems might
         | eventually become boring as well, but often the change and
         | fresh perspective is enough to pique your interest in a
         | motivational and productive way.
        
         | notatoad wrote:
         | i think it's important to acknowledge when you're working and
         | when you're playing. working on fun things isn't inherently
         | bad, and can lead to actual productivity when the things you
         | learn during your fun geeky tangents turn out to be useful to
         | the actual work.
         | 
         | but if you start convincing yourself that the fun distraction
         | is the actual work you need to be getting done, then you might
         | have a problem. (not to say that actual work can't be fun too.
         | jut saying make sure you know which is which)
        
       | dan-robertson wrote:
       | I don't know what is going on with this article. The first half
       | is a maybe reasonable description of a common way for certain
       | kinds of contracts to go wrong. But obviously lots of software
       | doesn't get developed in this sort of arms-length way. I would
       | say that imaginary problems (as the author defines them) cause
       | failed projects by consultants/contractors.
       | 
       | I find the rest of the article to be bizarre. The discussion
       | around retail banking software seems unacceptably incurious and a
       | very likely incorrect diagnosis of the cause of the problems (it
       | basically stoops to an 'I could do that in a weekend' level of
       | criticism[1]). It then transitions to a screed about Goldman
       | Sachs which is, as far as I can tell irrelevant (Goldman do very
       | little retail banking; their software development will be quite
       | different to that done for retail banking), and then some
       | description of how the author thinks (all?) large companies are
       | (mis)run. I don't know if Goldman was meant to be a prototype for
       | this model of company management but it seems like a particularly
       | strange example (in particular, they still will have some
       | remnants from the culture of being a partnership, so they'll be
       | run somewhat differently from other big investment banks).
       | 
       | I found the second half did not ring true. I'm sure software
       | projects fail at big companies (including retail banks, Goldman
       | Sachs, other investment banks, tech companies, and so on) but I
       | don't find the reasons given in the article convincing to the
       | extent that I think that section could have been written by
       | someone who had only ever worked at very small companies. But
       | maybe it's just me and most companies are so obviously terribly
       | wrong in these ways that no one even bothers to write about them
       | and so I only see subtle ways they go wrong like projects dying
       | off due to management acting in bad-faith ways or rewarding
       | people for things that aren't actually so good for the company or
       | whatever.
       | 
       | If you're interested in better discourse around certain kinds of
       | bureaucracy, look into _moral mazes_.
       | 
       | [1] generally 'I could do that in a weekend' is code for 'I could
       | do some minimum thing that doesn't actually solve whatever the
       | important problems are in a weekend'
        
         | mlhpdx wrote:
         | The second part might be summarized as "when technology starts
         | to diverge from the business model, or vice versa, both become
         | messy."
        
       | rco8786 wrote:
       | I frequently refer to this as "It would be cool if" driven
       | development.
       | 
       | Crucial to fight against this kind of stuff.
        
       | adamnemecek wrote:
       | This sentiment get repeated a bunch but I doubt it's really true.
       | 
       | Bad languages and tooling is the root of bad software.
        
       | suid wrote:
       | A long article that can be succinctly expressed by the many
       | variations of this cartoon: https://softwarehamilton.com/wp-
       | content/uploads/2013/02/swin...
        
       | victor106 wrote:
       | Great advice, spot on
       | 
       | At work we have this terrible "Enterprise Architecture" team
       | comprising of highly paid people who haven't written a single
       | line of code and who don't know the intricacies of our business
       | but keep proposing complicated "Event Driven Architectures" and
       | "Micro this and Micro that" and just reciting the latest buzz
       | words just to keep appearing cool.
       | 
       | It's insane how much total cost they add to the organization,
       | both directly and indirectly.
        
         | jbmsf wrote:
         | I consult as a software architect and my job is mostly the
         | opposite of this: asking people what problem they are trying to
         | solve and why they haven't considered $EXISTING_SOLUTION
        
         | basilgohar wrote:
         | I always find it bizarre how people like this can operate.
         | After almost 20 years of software development, I've considered
         | seeking some kind of an architect role, but I cannot, for the
         | life of me, imagine operating as one without working closely
         | and collaboratively with the development team on a solution,
         | rather than just dictating how things should be done "from on
         | high". But that may just be a personality thing, I don't know.
        
           | intelVISA wrote:
           | > I always find it bizarre how people like this can operate.
           | 
           | They are acting rationally within their belief system of
           | making money.
           | 
           | Enterprise software is exactly that, software used by
           | enterprise -- it doesn't signify any good qualities (far from
           | it) only that it provides a cost-effective software solution
           | to a defined business need.
           | 
           | The issue is when corps get bailed out, overfunded, or have
           | revenue mostly outside of software (e.g. gov't contracts) as
           | it eliminates cost-effective from the equation... so you just
           | end up with buggy messes (code as a cost center).
           | 
           | You'd have to work in the tiny niches where tech is the true
           | product to find good development ...and even then...
        
           | t43562 wrote:
           | "real architects" write code and simply hop from one team to
           | the other so that they have a reasonable picture of the
           | overall system and can try to guide all the teams to make
           | harmonious choices and possibly even reach some goal.
           | 
           | This still results in a lot of compromises and problems.
           | Anyhow they should be there talking to the developers in a
           | 2-way fashion so that then end result is not entirely "from
           | on high".
        
             | noirbot wrote:
             | I've seen this even without the code - them just bouncing
             | between teams and sitting in on many meetings and sort of
             | being the common note-taker who then knows where almost
             | every team is going, what they need, and what cross-team
             | work could be done to improve everyone's life.
        
             | pydry wrote:
             | I haven't ever seen one of them.
             | 
             | IME architects tend to be people who tell your team that
             | you should be using Azure Cosmos after a Microsoft salesman
             | takes them out to lunch. They last coded 5 years ago.
        
               | jbmsf wrote:
               | They exist - I am one - but it doesn't work unless your
               | leadership wants someone who doesn't fit in existing
               | hierarchies. I tend to consult and if I go somewhere
               | where I have prior relationships with leadership, it
               | works. If not, I get treated as part of someone's narrow
               | reporting chain and all the incentives are wrong.
        
       | ano-ther wrote:
       | Ah yes. This explains very well why, when I ask our corporate IT
       | for a static website with essentially text + some PDF downloads,
       | I keep ending up in a "web platform" project based on a
       | fiendishly complex CMS that is made for running large-scale
       | e-commerce sites -- of course delivered after ages and requiring
       | multiple rounds with the CFO to justify the increased budget.
       | 
       | Been through that at several companies now.
        
       | [deleted]
        
       | Wowfunhappy wrote:
       | Isn't this why companies have employees with different levels of
       | experience?
       | 
       | Need a bog standard app to stream audio files? Give it to the
       | person you hired right out of college, or maybe even the summer
       | intern. She's never built something like this before, so to her
       | it will be a challenging novel problem. A (somewhat) more
       | experienced developer may need to provide initial guidance and
       | review code, but that's a comparatively minor time investment,
       | and besides, the act of mentoring someone else should keep it
       | interesting.
        
         | sigstoat wrote:
         | > Isn't this why companies have employees with different levels
         | of experience?
         | 
         | this runs into another common mistake businesses make: putting
         | people onto a task because they're available, not because
         | they're suited to it (in any sense).
         | 
         | the junior person (+ a little mentorship) would be great for
         | the job, but they're mired in some big project. but hey, you've
         | got this super senior fellow sitting around waiting for work,
         | and we can bill the customer more for them, anyways.
        
       | emodendroket wrote:
       | It's impossible for a large organization to operate as
       | efficiently as a tiny one but I also don't really believe the
       | article's implied claim that "a couple smart guys" could solve
       | essentially any given problem to clients' satisfaction within a
       | reasonable timeframe.
        
       | brigadier132 wrote:
       | It seems like the fundamental problem for the scenario presented
       | in the article was an inability of the customer to communicate
       | their strategy and a completely hands off approach during
       | implementation when they should have had at the very least
       | biweekly checkins with developers with pre-negotiated milestones.
        
         | roncesvalles wrote:
         | The fundamental problem is that a non-technical person has
         | specced out a technical product without input from technical
         | people.
         | 
         | A restauranteur wouldn't develop a menu without input from a
         | chef or prior experience as one. A layperson wouldn't design a
         | real building without input from an architect or engineer.
         | 
         | Yet for some reason a myriad of non-technical people (read:
         | laypeople) feel empowered to design, spec, and strategize about
         | software. It still boggles my mind that "product management" is
         | a real profession.
        
         | dagmx wrote:
         | Yes, I agree. This is fundamentally a communication issue not a
         | "developers run amok" issue to me.
         | 
         | They shouldn't be checking in after two months. They should
         | have regular check ins.
         | 
         | They shouldn't have had such a vague brief.
         | 
         | They should have discussed a wide range of off the shelf
         | options from the get go to see if they needed something bespoke
         | or not.
        
       | gedy wrote:
       | Sort of related, but this is one reason I moved into "Frontend"
       | about 10 years ago. I started seeing over and over that when our
       | (SaaS) projects didn't start from what the customer sees, teams
       | usually got distracted with imaginary or hypothetical design
       | issues. It was a lot more effective to iterate from the visible
       | features, and then let that drive much of the backend design,
       | APIs, development timeline, etc.
       | 
       | This meant I needed to deal with more JavaScript than I
       | originally intended with my career, and eyerolls from backend
       | architect types, but projects go much smoother than in my past,
       | that's for sure.
        
       | swader999 wrote:
       | Imaginary problems aka gold plating and yagni.
        
       | mlhpdx wrote:
       | > They might realize Debra has been sitting in that corner,
       | staring at uptime graphs of the internal server farm for 10
       | years, despite the fact that the company moved to AWS five years
       | ago.
       | 
       | Ouch. The tone of the article is a little harsh, and I'm not sure
       | if snippets like the above are intentionally hyperbolic, but
       | there is a fair amount of truth in it.
       | 
       | Most of my career has involved convincing peers to do less, and
       | solve simpler problems with simpler solutions.
        
       | dagmx wrote:
       | I know it's just an arbitrary number picked but this bit jumped
       | out at me:
       | 
       | "You've just wasted $15,000 on two months work with a team of
       | contractors"
       | 
       | The project may also have been doomed because $15k is not very
       | much for something like they described.
       | 
       | But again, fully aware that they probably picked a random number.
       | I'd have just added another zero to make it more realistic.
        
         | totallywrong wrote:
         | 15k is rather high for those specs. A single competent dev can
         | build that in a month.
        
           | dagmx wrote:
           | 15k for a single dev over a month, sure. 15k for a team over
           | multiple months is different though.
        
         | casperb wrote:
         | In our agency 10 years ago we build such websites, it would
         | cost 3000-5000 dollars max. Just with PHP and a simple self
         | build CMS. Including a simple responsive design. We also hosted
         | around 250 of such websites on a single dedicated server. It
         | was very very fast.
        
           | golergka wrote:
           | Where are your developers located and what what are their
           | salaries?
        
             | casperb wrote:
             | In the Netherlands, Europe. We had a small agency with 3
             | friends. We did around 250k a year in revenue.
             | 
             | Exactly the type of team that is super productive for these
             | kinds of job imo.
        
         | Lacerda69 wrote:
         | 150.000$ for a podcast app with zazzle shop and google ads
         | integration?
         | 
         | That sounds really high to me. I personally found 15k way too
         | high already; guess it depends on the
         | details/market/circumstances
        
           | dagmx wrote:
           | It could be both too high or too low depending on the
           | communicated expectations of the client. Which is I think the
           | real issue here anyway.
           | 
           | But let's say 15k for two months of a team of contractors.
           | That's 7.5k/mo. A team says at least two, but I think given
           | they mention sales etc, that's 3-5 people. Netting
           | 2.5k/person before you take out built in profit margins,
           | healthcare (because it's dollars, I assume America) and more.
           | That's roughly 1.5k/person per month. (Of course they could
           | have multiple projects but even then that's a low amount imho
           | for a contractor with sales)
           | 
           | If they're expecting an off the shelf solution, then they're
           | getting fleeced on the costs and 15k is too high, but if
           | they're going to a company that does big solutions than they
           | spent too little.
           | 
           | There's too little info in general
        
         | TrackerFF wrote:
         | In the world of entrepreneurship, you mostly find the extremes.
         | 
         | Either you have the bootstrap founders that will trawl through
         | fiverr to find the cheapest labor (the same types that will
         | scoff and get insulted at anything over $10k), or you have the
         | well-funded founders that will pay whatever it takes.
         | 
         | From experience: Cheapskates and low-ballers will never be
         | happy. They always want something free, more haggle room, more
         | discounts, and always have high demands and expectations. The
         | best thing one can do is to price yourself away from them.
        
         | notatoad wrote:
         | i think you might be trying to solve the author's imaginary
         | problems.
         | 
         | all the author needs is a wordpress site with a couple plugins
         | and a few weeks of back and forth on the design work. if you
         | can't make a good profit on that with a $15k invoice, you're
         | doing something very wrong.
        
           | dagmx wrote:
           | The problem is that their brief is too vague and the real
           | issue is communication.
           | 
           | At no point is it clear that they've discussed off the shelf
           | solutions, or infrastructure (storage, server hiding, CDN
           | etc).
           | 
           | If they had, then they either messed up because 15k over two
           | months is too high or too low. It's squarely in the: "nobody
           | has actually defined the project territory" for me.
           | 
           | Yes, a Wordpress solution would work, but then why even
           | budget 2 months for it, unless bespoke design is involved.
           | Again that becomes a: this is too low or too high to be
           | realistic
        
             | notatoad wrote:
             | >At no point is it clear that they've discussed off the
             | shelf solutions, or infrastructure (storage, server hiding,
             | CDN etc).
             | 
             | why should they? the requirements are listed in the
             | article. the job is to meet the requirements. "where should
             | we store the files" is a job the client hires you to
             | answer, not something requiring communication.
        
               | dagmx wrote:
               | The requirements are insufficient if you're going to be
               | so particular as to stick exactly to them. You can't
               | guarantee the uptime's requested without talking about
               | infrastructure.
        
             | [deleted]
        
       | Aerbil313 wrote:
       | Ted Kaczynski's "surrogate activities" term is very relevant
       | here.
        
       | allenu wrote:
       | I absolutely agree with the premise. People just love building
       | things even when they're not needed. After a while, your ego gets
       | attached to whatever it is you've built and you can't let it go.
       | 
       | I remember working at one place where somebody built a new
       | framework to solve a common problem we all had. He pitched it to
       | all the other devs in a meeting and I remember being confused
       | about it because there was a standard framework that solved the
       | problem already and did it in much simpler and more elegant way.
       | (To be fair to him, this standard functionality was only recently
       | introduced.)
       | 
       | During his presentation, I asked why the standard solution
       | wouldn't work for him. It turns out he wasn't familiar with it.
       | Fair enough, so later I messaged him and showed him the standard
       | way to do it and how much simpler it was. He couldn't be swayed.
       | 
       | He just couldn't accept that his complicated solution wasn't
       | necessary. He constructed scenarios where his idea was needed,
       | even though I saw solutions to those scenarios using the standard
       | framework.
       | 
       | Interestingly enough, one of the scenarios where his custom thing
       | was needed was in some tests he had written where he did some
       | complicated things to set things up. I looked at the tests and
       | even there saw those complicated things weren't necessary! There
       | were ways to simplify what he was doing so that the tests were
       | better written _and_ didn 't need his custom tool.
       | 
       | Anyway, he wouldn't be convinced. And because he couldn't be
       | convinced, we got stuck with his solution and saw people continue
       | to work on it, add more functionality to it, fix bugs, etc. All
       | of that work was just a waste of time when we could've relied on
       | a standard solution, which was way more mature and way simpler.
       | 
       | All of this drove me crazy, but I realized that sometimes people
       | are just unable to see simple solutions to problems. Worse,
       | having one complex solution begets more complex solutions
       | elsewhere.
        
         | manmal wrote:
         | > people are just unable to see simple solutions to problems
         | 
         | This person might just have been terrified of admitting that
         | all the (very tangible) time they spent on payroll building
         | this thing was for naught. It's unclear how their manager might
         | have responded to that. And they wouldn't have been able to put
         | ,,built system doing X used by Y developers and deployed to Z
         | customers" in their resume.
         | 
         | The reasonable choice often doesn't have much skin in the game.
        
         | pydry wrote:
         | Your guy clearly had an emotional attachment to his work not an
         | inexplicable intellectual attachment.
         | 
         | It's hard to admit that your baby is ugly.
        
           | allenu wrote:
           | You're right. It's a good lesson to take away when it isn't
           | you because when you're that guy, it's so hard to separate
           | yourself from your work.
        
           | physicsguy wrote:
           | This is one reason I'm glad I came from a research background
           | into software. If something doesn't work it doesn't upset me
           | and I don't personally feel aggrieved, you just chalk it up
           | to experience and move on. The number of times I worked on a
           | study that had to be abandoned either because it didn't work
           | or because another research group beat us to it!
        
       | bsaul wrote:
       | this is definitely one of the advice i give to senior dev i work
       | with: if you're proud of how smart your solution is, there's a
       | high chance you overengineered and made a mess of a simple
       | problem.
       | 
       | i now take great pride when my code looks boringly obvious.
        
         | [deleted]
        
         | MajimasEyepatch wrote:
         | Related: my favorite pull requests are the ones that remove
         | more lines of code than they add. People think you need to
         | hoard old code that's not used anymore like it's made of gold.
         | It's not. You aren't gonna need it, and if you do, you can find
         | it in the git history.
        
           | sopooneo wrote:
           | I push that so hard. Put the removal in an isolated, clearly
           | named commit that will be easy to search later, tag that
           | commit so it never gets garbage collected, then take a deep
           | breath and say goodbye.
           | 
           | You'll be better off without it and 99.9% of the time you
           | won't have to retrieve it later anyway.
        
           | Daniel_sk wrote:
           | Antoine de Saint-Exupery -- 'Perfection is achieved, not when
           | there is nothing more to add, but when there is nothing left
           | to take away.'
        
       | stevehind wrote:
       | This resonates and one way to describe it is an incentive
       | problem. Someone whose incentives are _tightly_ aligned with the
       | business is going to solve the actual problem and simply and
       | effectively as possible. Someone who is incentivized to build
       | career capital and experience other than via impact (e.g. so they
       | can get uplevelled, pass an external interview loop, etc) is much
       | more likely to focus on unimportant hard problems and /or over
       | engineer.
        
         | djbusby wrote:
         | RDD: Resume Driven Development
        
           | jiggawatts wrote:
           | In a large government IT department:
           | 
           | "I think we should use a Kubernetes cluster!"
           | 
           | "You're joking, surely? This is a tiny web site with mostly
           | static content!"
           | 
           | Next project:
           | 
           | "For this web app, I propose we use Kubernetes..."
        
           | f1shy wrote:
           | I will take that!!!
        
           | noirbot wrote:
           | This is absolutely a thing, but I'd say there's a related
           | option which is "Job Listing Driven Development". The more
           | niche, dated, or specific your platform is, the harder it is
           | to hire people onto the team who don't need months of on-the-
           | job practice and training to be useful.
           | 
           | You see the most extreme versions of dangers of this in
           | stories about governments and older companies having to pay
           | insane salaries to bring FORTRAN or COBOL developers out of
           | retirement to keep systems running. If you keep doing the
           | simple solutions within the existing system, you risk
           | creating a system so inbred that only the folks who built it
           | can maintain it effectively.
           | 
           | For less extreme setups, it's still a balancing act to
           | consider how much your unique and specific solution that is
           | the simple option for you company starts closing you off of
           | the larger hiring pools in more common technologies and
           | patterns.
        
             | BeFlatXIII wrote:
             | What's kind of funny is that MUMPS is equally as archaic
             | and idiosyncratic as Fortran or Cobol, yet there are
             | companies willing to put new hires through a bootcamp to
             | make them productive. Are all the Fortran and Cobol
             | companies too small to afford a month or three of training
             | time on new devs?
        
         | wfhBrian wrote:
         | And thus we will see the rise of the software solopreneur.
        
           | Gareth321 wrote:
           | That's been a thing for 30 years. Entrepreneurship is HARD,
           | and tech salaries are fat right now. I think we'll see a lot
           | more software entrepreneurship when there's another
           | recession.
        
             | UweSchmidt wrote:
             | Makes you wonder what the actual state of the industry is
             | right now with thousands of layoffs, but then comments like
             | this one. Probably it's a bifurcation and an uneven
             | distribution of reality.
        
         | David_SQOX wrote:
         | You hit the nail on the head. There are different motivations
         | for different roles within the same company, sometimes those
         | motivations clash internally, all the while each individual IS
         | acting completely logically from their own unique perspectives.
        
         | noirbot wrote:
         | Doing the sort of simple solutions to your specific job's
         | actual problems can also be something that constrains your
         | ability to work anywhere else. Often the best simple solution
         | that's tightly integrated into your job's environment is
         | something that is inconceivable as a good idea anywhere else.
         | You're optimizing around other old decisions, good or bad.
         | You're often correctly overfitting a solution to your specific
         | problems.
         | 
         | I've often found myself now having issues even updating my
         | resume, because what I did for the last year at work barely is
         | explainable to other people on my team, let alone to someone in
         | HR at another company. Or the more simple explanation is
         | something that sounds like I'm doing work barely more complex
         | than an intern could have done. Which often isn't wrong, but
         | the intern wouldn't know _which_ simple work to do.
         | 
         | My years of experience in the company's stack and org is
         | valuable to the company, and nontransferable elsewhere.
        
           | neon_electro wrote:
           | I share this problem in the last year+ of job searching I've
           | been up to.
        
         | jayd16 wrote:
         | I don't think its just an incentive problem only. I know plenty
         | of engineers doing premature optimization or scope creep in
         | good faith.
        
         | bob1029 wrote:
         | > Someone whose incentives are tightly aligned with the
         | business is going to solve the actual problem and simply and
         | effectively as possible.
         | 
         | Equity is the entirely the answer for cutting through all the
         | bullshit. At least in my head. I don't know how it plays in
         | other people's minds but mine sounds like: "If we ship and go
         | live, I get x% of all profit moving forward in my personal
         | scrooge mcduck money bin". Pretty big carrot. It's kind of like
         | time share in my own personal business, but I don't have much
         | of the headache that goes along with running my own 100%.
         | 
         | This has some caveats, namely that equity in a 10k person org
         | is often times not nearly as meaningful as equity in a 10
         | person org. Shipping your code 2 weeks early at Ford or Dell
         | means what, exactly? If the code you are shipping _is_ the
         | business, then things are different. It also really helps if
         | you care about the problem you are solving.
         | 
         | I'd say this - if the idea of direct equity/ownership doesn't
         | get you _excited_ about pushing simple  & robust techniques,
         | then you are completely in the wrong place. You should probably
         | find a different problem space or industry to work in.
         | Hollywood might be a better option if the notion of equity or
         | straight ownership in the business still isn't enough to put
         | your tech ego into a box.
        
           | smfjaw wrote:
           | Equity is the answer, I work in investment banking and we all
           | get a share of firm profits, I'll often sideline small
           | projects in favour of projects that I think will be more
           | valuable to the org and increase my/our pay cheque come bonus
           | time
        
           | ThalesX wrote:
           | I have a little bit of equity in the company that I work for
           | now. It's super small and early stage, and still between me
           | and the product decision there exists a Designer that reports
           | to a CTO that reports to a CEO. For everything that I want to
           | see done differently, I have to make a case that convinces
           | all these stakeholders that it's the right way. Ultimately,
           | equity or not, my job is to row the ship where the cap'n
           | tells me.
        
           | TuringNYC wrote:
           | >> Equity is the entirely the answer for cutting through all
           | the bullshit.
           | 
           | I agree for small companies which are largely founder owned.
           | I think outside of that, Equity doesnt do much because so
           | much effort is put into obfuscating the value/share of the
           | equity. If you cant see the cap table, and you cant see the
           | preference overhang, the equity is as good as worth zero.
           | There is no discernable value for a fraction with no
           | denominator.
        
         | l0b0 wrote:
         | > Someone whose incentives are tightly aligned with the
         | business is going to solve the actual problem and simply and
         | effectively as possible.
         | 
         |  _On average,_ and depending on skill. Incentives are hugely
         | important (probably the most important metric any manager could
         | work on), but even they do not guarantee results. If you hire
         | so many juniors that nobody is there to upskill them _fast,_
         | you only get one lottery ticket per employee. Conversely, if
         | you hire a bunch of geniuses and fail to give them incentives
         | to work on realisable, useful problems _together,_ you get two
         | lottery tickets per employee at twice the price.
         | 
         | (This comment feels woefully incomplete. Does anyone know of
         | good resources to learn more about incentive structures and how
         | they relate to individual and company success? I feel like the
         | problem is that incentive structures change massively when
         | companies grow, so even for unicorns there's just a short sweet
         | spot where we can actually learn how they are supposed to
         | look.)
        
       ___________________________________________________________________
       (page generated 2023-06-18 23:00 UTC)