[HN Gopher] Choose Boring Technology (2015)
       ___________________________________________________________________
        
       Choose Boring Technology (2015)
        
       Author : asyrafql
       Score  : 506 points
       Date   : 2021-02-21 08:01 UTC (14 hours ago)
        
 (HTM) web link (boringtechnology.club)
 (TXT) w3m dump (boringtechnology.club)
        
       | killingtime74 wrote:
       | Does using Java but with native image (compiled to binary) count
       | as using an innovation token due to new packaging or no (due to
       | Java?)
        
         | gonzo41 wrote:
         | It's a negative 1 because you could have made an EXE jar and
         | run it with standard open jdk on the server.
        
           | killingtime74 wrote:
           | True enough
        
         | [deleted]
        
       | onetom wrote:
       | Is Clojure a boring technology yet? :)
        
         | wilsonthewhale wrote:
         | I would argue yes. There has been an impressively little amount
         | of churn in the last 10 years.
        
       | elonvolo wrote:
       | There's a lot of social status and perception-shaping tied up in
       | who gets to do what innovation.
       | 
       | I've noticed that the very same ilk of leadership/managers who
       | would balk at the complexity of adding a linter or json schema
       | validation and cite "someday, that would be nice, but for now
       | we've got to get quick wins and ship features" would not hesitate
       | to let a golden-boy architect who's also a drinking buddy add a
       | CQRS microservice written in Go communicating in some hand-rolled
       | bespoke protocol---just because it wins some folks cool points.
        
       | reader_mode wrote:
       | > My friend Andrew wears the same brand of black shirt every day.
       | He thinks that if he conserves the brainpower it would take to
       | pick something to wear, he'll bank it and be able to use it later
       | for something else.
       | 
       | >I don't know if this makes sense for fashion or what have you,
       | but I really think there is something to this.
       | 
       | Johny Bravo was conserving his brainpower all along !
       | 
       | I kind of like this idea, will probably try this, jeans + long
       | and short sleeved versions.
        
         | Aeolun wrote:
         | This works just as well with a slightly more diverse outfit. I
         | have 3 pants, and 5 shirts, any combination between these is
         | fine, so I just wear what isn't being washed at the time.
        
         | mrtksn wrote:
         | If I remember correctly, that's supposed to be the reason why
         | Steve Jobs used to wear the same outfit all the time.
        
           | bitwize wrote:
           | Barack Obama had multiple copies of the same suit hanging in
           | his closet. It was like Smurfette's closet. When the time
           | came to make an appearance or do something presidential, he'd
           | pick out a fresh suit and know exactly how he'd look in it.
        
       | [deleted]
        
       | datavirtue wrote:
       | So we should all embrace Oracle?
        
       | [deleted]
        
       | ahstilde wrote:
       | (2015)
        
       | kalalala087 wrote:
       | https://properfocusreview.medium.com/proper-focus-adjustable...
        
       | kingkawn wrote:
       | Black t-shirt guy is onto something...
        
       | Svip wrote:
       | This is why I prefer buying 15+ year old cars, you know
       | everything that's wrong with them. OK, it just so happens that
       | three cars I've owned has been over 15 years old when I bought
       | them, but I haven't heard a good car analogy in a while.
        
         | threeseed wrote:
         | Modern cars are far more efficient, performant and easier to
         | drive than a 15 year one.
         | 
         | Just like modern web apps are far more scalable, highly-
         | available, secure and performant then they were 15 years ago.
        
           | lanius wrote:
           | >Modern cars are far more efficient, performant and easier to
           | drive than a 15 year one
           | 
           | Can you clarify what being "easier to drive" means?
        
           | sprkwd wrote:
           | It's easier to fix 15+ Year old cars yourself.
        
             | IshKebab wrote:
             | How many people fix cars themselves?
        
             | oblio wrote:
             | It's also much easier to die in 15+ years old car.
        
             | XCSme wrote:
             | It's easier to not have to fix new cars.
        
             | mortehu wrote:
             | Agreed. I once owned a 30 year old two stroke moped. It was
             | very easy to fix. In fact I fixed it almost every week.
        
           | tonyedgecombe wrote:
           | Yes, we just replaced our eleven year old car with a three
           | year old. The same make and model and our fuel bill dropped
           | by 25%. This is nearly half the cost of the car over the
           | period we will own it.
        
       | [deleted]
        
       | pharmakom wrote:
       | I agree with all the arguments in the post... but man, I am so
       | unproductive in the mainstream languages (Java especially). It
       | feels like running in sand once you've experienced the other
       | side.
        
       | iamacyborg wrote:
       | Urgh, this feels familiar. Last year I left a company that was
       | just wrapping up a new tech product, everything was microservices
       | and mongodb. Trying to get a simple answer out of the engineering
       | team about something as trivial as "how can I get a list of
       | customers who have purchased product X" was almost impossible.
       | 
       | They sure had fun building it though.
        
         | andrewflnr wrote:
         | In the event you haven't already seen it, you may find this
         | skit amusing and/or sob-inducing.
        
           | oblio wrote:
           | Link?
        
         | threeseed wrote:
         | What does that even remotely have to do with micro-services or
         | MongoDB ?
         | 
         | If your query was exposed as a REST API you could have easily
         | accessed it via a micro-service. And MongoDB has a pretty
         | powerful and easy to use query language. I could've answered
         | your query in about 5s.
         | 
         | Sounds more like a business or process limitation.
        
           | satyrnein wrote:
           | It seems like you're assuming the data you need is all in one
           | microservice. (In which case, why did you need
           | microservices?)
           | 
           | Let's say the report needs data from across two
           | microservices, one is backed by mongodb and one is mysql, and
           | both services have been crud endpoints but not ones that will
           | give you the full data you need. This is a pretty typical
           | scenario! So you could make new endpoints, but then you still
           | need to "join" the data in code. Or you could set up data
           | pipelines to sync data into into a data warehouse, where you
           | query across everything.
           | 
           | Or you could have kept everything in a monolith, and this
           | would have actually been a 5 second SQL query.
        
             | gaogao wrote:
             | Still a 5 second SQL query with Presto or similar and a
             | warehouse.
        
               | thedevelopnik wrote:
               | But now you need to build an ETL system and run a data
               | warehouse. And you need a team of people who know how to
               | build and maintain those.
        
           | iamacyborg wrote:
           | Just a generalised frustration that the technology team
           | didn't seem to understand how the rest of the business needed
           | the technology to behave.
           | 
           | The reality is you don't need that sort of query exposed as
           | an API, but you do need that data to be exported regularly
           | into a CRM and marketing automation tools.
        
       | msvan wrote:
       | A lot of new technology eventually becomes boring technology, and
       | this is because of adoption in companies exactly in the way the
       | author is discouraging. When the new becomes boring, everyone
       | gets to reap the benefits of the new tech.
       | 
       | The world of software rests on the hard work of others, whether
       | it's open source maintainers spending their free time making
       | libraries for peanuts, or it's people going through the pain of
       | productionizing a new technology. Being in the boring technology
       | club is in a sense also being in the freeloader club, never
       | contributing back to the state of the art.
       | 
       | It's a good article. It makes us aware of the drive many have to
       | use the new thing, and the negative consequences of following
       | this drive blindly. But I'm also happy that people do it.
        
       | the_gipsy wrote:
       | I think there's an unfairness angle to it, if someone like the
       | CTO makes the "boring" call. He then hacks maybe a few things
       | here and there, but the one's to "sucker up" are the devs who
       | have to program some "boring" shitty tech every day.
        
         | ryanbrunner wrote:
         | I don't think this has to be true. I've worked in many places
         | (granted, smallish teams of less than 20 or so) where tech
         | decisions were made collectively, without even that much input
         | from the CTO.
         | 
         | Choosing boring technology doesn't have to be a top down thing,
         | although it probably needs to have some mechanism for aligning
         | a whole team (since 10 different "boring technologies" are no
         | longer boring and bring along all the problems of using shiny
         | new toys).
        
         | jeromenerf wrote:
         | In my experience "boring" is less correlated to "shitty tech"
         | than poor organization.
         | 
         | Most dev work is "blue collar" work, following top down
         | business decisions. The opportunities for devs to push
         | impactful bottom up projects for a company business are rare at
         | best.
         | 
         | I have always preferred organizations where business problems-
         | to-solve were pushed top-down rather than executive decisions.
         | It encourages business understanding, initiatives and
         | ownership.
        
           | phabora wrote:
           | Blue collar is not a synonym for subordinate.
        
         | datavirtue wrote:
         | Dude, you can go home and play with any toy you want.
        
       | soheil wrote:
       | Having shiny cool tech to solve problems isn't all too different
       | than having 1. a hip office to work at, WeWork-style 2. wearing
       | the latest fashion or latest cool hoodie if you're in SV 3.
       | latest mechanical keyboard design ... the list goes on and on. It
       | makes everything easier, 1. you can hire easier because the hip
       | engineers see new shiny thing and would love to work on it most
       | likely even if there is a slight pay cut or even if the product
       | doesn't appeal to them as much as working at another company,
       | senior engineers tolerate shiny new tech because a. they know
       | they were once awestruck by other technologies when they first
       | came out b. there is always a non-zero probability the shiny new
       | thing is actually fundamentally better not just a short lived
       | fad.
       | 
       | It's not a great explanation because it's a human issue, which
       | usually as its solution has a mixed bag of technical and
       | emotional reasons.
        
       | chrischapman wrote:
       | The aviation industry has an expression: "there are old pilots
       | and there are bold pilots but there are no old bold pilots".
       | Young, inexperienced pilots often take unnecessary risks and
       | occasionally learn important lessons - sometimes terrifying
       | lessons. Those lessons lead to a more cautious approach to flying
       | as they grow older. It seems to me that boring tech is equivalent
       | to cautious flying. Experience matters. Maybe its time to co-opt
       | that expression into the developer world - "there are old coders
       | and there are bold coders but there are no old bold coders".
       | Ageism is a problem in the tech world. Experience will almost
       | always consider (maybe even prefer) boring tech - generally for
       | good reasons. Perhaps its time to value experience a bit more
       | than we have.
        
       | nkg wrote:
       | I have dreadful stories about the amount of technical debt my
       | team has faced because of one hedonist developer. He was good,
       | but he had failed to understand the beauty of a boring stack. He
       | kept reinventing the wheel, and over-engineering every part of
       | the project. Keeping this in mind, I only pick shiny new tech if
       | it achieves a superficial task, is fast to implement, and can be
       | replaced easily.
        
       | lovetocode wrote:
       | What a great post!
       | 
       | > I learned a lot. It kept me motivated through hard times with
       | no customers, as I kept saying to myself if this won't work, at
       | least I'd learn something.
       | 
       | This is where I am at right now. I am trying to moonlight my own
       | learning platform with two kids and a full time job, using a new-
       | to-me technology is what keeps me going. It removes the stress of
       | success because, no matter what, I succeed in some corny kind of
       | way. Both myself and my existing employer get a better version of
       | myself I'm the end.
        
       | wrnr wrote:
       | This stack can be radically simplified:
       | 
       | Apache: managing open connections. Memcache: holding stuff in
       | memory. Postgresql: Save stuff to disk. Cron: Schedule things.
       | Python: wire the above things together
       | 
       | ... or a good reason the pick Go or Java
        
         | hnedeotes wrote:
         | Or better, Elixir + Postgresql
        
           | nhumrich wrote:
           | Not sure elixir qualifies as "old and boring tech"
        
             | hnedeotes wrote:
             | (this got out of hand...) I understand what you're saying
             | and think you're right, in terms of not having had the same
             | time running in the wild to have the same knowledge base
             | and ecosystem as other solutions.
             | 
             | But looking at what it actually is, it's a layer over the
             | much older underlying technology, which is Erlang, once you
             | look at the frameworks used, they are basically
             | implementations of things we consider old approaches,
             | despite including new features. Some examples:
             | 
             | - Phoenix - it's a MVC framework, it's not much different
             | from any MVC framework except it doesn't have the "model".
             | You can entirely use it in that "boring" CRUD app way and
             | it will be a great choice. It's performant and has a
             | templating system for HTML, a plug system that looks like
             | middlewares. But if you need to use web sockets without
             | ceremony or want to try something shiny like live views,
             | you can as well. You're not forced to though and you don't
             | need to use nodejs for your js either (as an example)
             | 
             | - Ecto - It looks like an ORM but isn't an ORM, it's
             | default choice for database is Postgresql. It's a library
             | that mimics SQL itself (the helpers and the way you use it
             | are as they would be used in SQL but designed to be chain
             | able and sanitised), it also has easy ways of executing SQL
             | while still sanitising it and also of writing raw SQL. So,
             | pretty boring in all senses except the slight change in
             | syntax to write the queries in elixir. This means for
             | instance a distinct clause would be distinct(query,
             | [table_mentioned_in_query], asc:
             | table_mentioned_in_query.platform) This is not written as
             | sql, but it maps to sql one to one. It uses schemas which
             | are just that, schemas that map how values are dumped and
             | cast from the DB, they're not models/objects, they're just
             | data structures. But if you want to get fancy it also has
             | embedded schemas if you want to use jsonb for instance,
             | that allow you to use jsonb columns while still maintaining
             | a "typed" schema from dump to read.
             | 
             | What may look a bit alien is perhaps the access to OTP
             | libraries that Erlang offers, the way the VM works and
             | certain abilities that come from the way you will structure
             | an app, but even those when we think about them, it's
             | basically what any OS does, or the way kernels work. You
             | have processes, they have identifiers, you can name them,
             | you can run a lot of them concurrently, they can have
             | separate lifecycle trees/dependencies, they have
             | interfaces, you pass "messages" between them. Maybe what's
             | "new" when you compare it to other languages is that this
             | is not usually available to them but I would argue that
             | most of our systems are implemented exactly in that way
             | because it's the most reasonable outside very specific
             | constraints/needs.
             | 
             | When you use Elixir, Phoenix and Ecto you don't need to use
             | these (or understand them deeply), usually the libraries
             | take care of that for you. You can start as if you were
             | writing a nodejs, rails, .net, python or whatever
             | application. But then if you actually need you have a host
             | of utilities and a runtime that I think is excellent for
             | the kind of things most apps out there need, in a single
             | runtime, and you can take it pretty far before you need to
             | extend the stack and that has value in itself I think.
        
             | yellowapple wrote:
             | Elixir, probably not.
             | 
             | Erlang (and more broadly OTP), however, definitely
             | qualifies IMO, at least depending on point of view. And
             | given that Elixir is just an alternate language targeting
             | OTP on Erlang's VM, there ain't much stopping folks from
             | treating it as exactly that (and sticking with things like
             | Yaws and Mnesia/CouchDB instead of the latest Phoenix
             | hotness).
        
           | cutler wrote:
           | So long as you don't need to do any heavy lifting or
           | computation.
        
             | davidw wrote:
             | It's not too difficult to farm work out to code written in
             | C or C++.
        
             | benzible wrote:
             | Jose Valim Reveals "Project Nx" (Numerical Elixir):
             | https://news.ycombinator.com/item?id=26076680
        
       | trestenhortz wrote:
       | Generalizations like "choose boring technology" are just
       | unhelpful slogans.
       | 
       | Truth is you should choose technology given consideration of its
       | pros and cons, not on the basis of some slogan.
       | 
       | There are very good reasons to use mature technologies and very
       | good reasons to use current technologies and very good reasons to
       | use absolute cutting edge technologies.
       | 
       | When someone comes at your approach wielding a slogan, be
       | skeptical.
        
         | arkitaip wrote:
         | The author even addresses your criticism, i.e. how the title of
         | the talk makes people focus on the wrong detail level of his
         | thesis...
        
           | ithkuil wrote:
           | Should "chose boring titles" be a thing?
        
         | linspace wrote:
         | Yes, specially since different people will have different ideas
         | of what is experimental and what not. Python is boring tech at
         | this point for most people, but not everyone maybe using SAS
         | for data analysis or Java for backend. You will need to
         | evaluate case by case if it makes sense or not to change that
         | stack, there is no silver bullet.
        
         | wffurr wrote:
         | Thanks for summarizing the talk so concisely.
         | 
         | Maybe read it before commenting next time.
         | 
         | I wish HN had a feature where it could detect that you clicked
         | the link and disallowed commenting before that. At the very
         | least you'd have to click the link, even if you just
         | immediately click back without reading, and you'd know what you
         | were doing was circumventing the spirit of the place.
        
           | corytheboyd wrote:
           | Interesting idea! Maybe instead of preventing you from
           | commenting entirely, it just tagged all comments you leave as
           | "have not read article". I think the shame approach would
           | actually work, but too many people would vehemently reject it
           | for it to ever work.
        
             | zbuf wrote:
             | Perhaps just annotate each comment with how many minutes
             | between clicking the link and making the comment (similar
             | to the green usernames)
             | 
             | That way the reader can decide for themselves. I'm less
             | inclined to object to hasty responses to discussion points
             | than I am to top level comments, but that's just personal
             | choice.
        
         | corytheboyd wrote:
         | The author even calls out the slogan as clickbait in the
         | presentation.
         | 
         | For what it's worth, it's a great read that I would recommend
         | to anyone in the industry.
         | 
         | They aren't forcing technologies on you, but driving home the
         | true cost of long term maintenance and investing in the "core
         | stack" that you already have instead of adding N technologies
         | to solve N business problems. This is good stuff.
        
         | ramraj07 wrote:
         | One reason to use non-boring new technology is if it suddenly
         | enables abilities that were previously not possible.
         | 
         | The trap most engineers fail is that they only think about
         | scaling. It's obviously an interesting problem, but until a
         | company becomes successful it's not really something you should
         | worry about, and for the most part things that (allegedly)
         | scale well are more expensive, slower and harder to maintain.
         | 
         | But there are so many ways to innovate that's not just about
         | scaling: can you make your application faster? What are things
         | you never even considered because you have subconsciously
         | internalised as a physical limit of reality when actually it's
         | not?
         | 
         | One of the examples I'm currently exploring is the idea of
         | moving a large amount of data in memory. I remember decades
         | back when Google announced that it's search indexes are now
         | fully in memory (they proudly announced that any given search
         | query might run through a thousand computers). I cannot imagine
         | how many possibilities it enabled for their product that were
         | not possible before. The experimentation with new technology in
         | pursuit of completely new ways of exploring your problem space
         | should always be encouraged, and if boring technology cannot do
         | it then that's when you give up on it.
        
         | post_below wrote:
         | I generally agree about slogans, but that seems unfair here.
         | "Choose Boring Technology" isn't the sum total of the content,
         | it's essentially the title. If you read past it, there is good
         | stuff.
        
         | m463 wrote:
         | UH, he covered that specific point in the presentation
         | (humorously).
        
         | nickjj wrote:
         | I think it's helpful if it brings awareness to the situation.
         | 
         | I've spoken with 70+ different devs working on 70+ different
         | projects of all sizes on my Running in Production podcast[0]
         | and the choose boring tech phrase came up a whole bunch of
         | times, and especially the idea of using innovation tokens. If
         | it helps folks build and ship their app in a quick and stable
         | way, that seems like a big win to me.
         | 
         | [0]: https://runninginproduction.com/podcast/
        
           | sdfhbdf wrote:
           | It must have been a weird coincidence but I listened to a few
           | episodes for your podcast and I've actually heard about
           | boring technology in 100% of episodes I listened to
        
             | nickjj wrote:
             | Hah yeah, coincidence for sure. I don't have hard numbers
             | in front of me but based on reference links to the boring
             | tech site it's been mentioned at least half a dozen times.
             | I know innovation tokens have been spoken about a few times
             | outside of those linked episodes too.
        
         | krenel wrote:
         | > When someone comes at your approach wielding a slogan, be
         | skeptical.
         | 
         | I do agree. Although the point of the article is to _lean_ more
         | on "boring technology" side of, and paying extra effort when
         | considering adopting newest flashy things.
         | 
         | Having read the article 3-4 time in the last years, I don't
         | think they say "don't use new things", just "not too many new
         | things at the same time"
        
           | galfarragem wrote:
           | It could be rephrased as: spend your "innovation tokens"
           | wisely.
        
           | trestenhortz wrote:
           | Perhaps the title should be "err on the side of boring
           | technologies", although I don't even agree with that. The
           | right technologies for a project are the ones you deem to be
           | right, given appropriate consideration of many factors. Your
           | project may really need to use all beta release software,
           | cause maybe it just does.
        
             | krenel wrote:
             | I would agree that we're talking about the same thing,
             | really:
             | 
             | > The right technologies for a project are the ones you
             | deem to be right, given appropriate consideration of many
             | factors
             | 
             | It's _usually_ difficult to take into consideration all the
             | factors of a new flashy thing. The unknown unknowns. Thus
             | _maybe_ choosing a trendy set of technologies might
             | indicate that the exercise of balance and consideration you
             | were commenting and that I do agree with 100%, has not been
             | as honest as possible.
        
             | sverhagen wrote:
             | It may. But probably it doesn't.
             | 
             | Let's say you've given it the proper consideration, and
             | it's clear beyond the smell of subjectivity that it needs
             | to be flashy stuff, go for it. The point is that this is
             | often not the case, and the argument is to go with boring
             | then.
        
       | pmohun wrote:
       | This essay from David Perell touches on a similar concept:
       | https://perell.com/note/lateral-thinking-with-withered-ideas...
       | 
       | > It led to the 20th century's most successful game console: the
       | Game Boy. One day, a gaming engineer named Gunpei Yokoi was
       | commuting home on the train when he saw a man playing with an LCD
       | calculator next to him. Unfortunately, Nintendo didn't have the
       | budget to push the technological frontier at the time, so they
       | used old technology to innovate. So long as the gameplay was
       | engaging, Yokoi believed that players didn't care about technical
       | details like colors or screen resolutions. Compared to its
       | contemporaries, the Game Boy was durable and affordable, which
       | removed barriers to entry for users and developers. People would
       | play for hours because it used AA batteries that were cheap and
       | easy to find. Today, the Game Boy has sold more than 118 million
       | units.
        
       | XCSme wrote:
       | Hell yeah, I still love working on my 9 years old MySQL+PHP side-
       | project. No build process, no issues with updating to latest
       | package versions, it just works and you are not fighting with the
       | language or tooling itself.
       | 
       | I did add meanwhile some extra parts on top to improve the
       | development and releasing process, but those parts can be changed
       | and removed at any point and the project would still work as
       | expected.
        
       | 0xCMP wrote:
       | I forget sometimes in interviews not everyone reads HN
       | religiously. And I also forgot where I'd learned about
       | "innovation tokens". Needless to say it would have helped to
       | point interviewers to this full talk when explaining why we
       | focused so hard on simplifying our technology stack.
        
       | nine_k wrote:
       | The title of this article, which makes rounds on HN, bothers me.
       | 
       | It's not about choosing a "boring" tech. It's about choosing
       | _tools you understand well and a master of_.
       | 
       | You can be totally excited about e.g. TypeScript or Elixir, but
       | as long as you have a solid experience of working with them, and
       | a good understanding of their internals, they are safe bets.
       | 
       | Choosing a perfectly boring thing like Cobol is not going to help
       | if you have no solid mainframe experience.
        
         | jonahx wrote:
         | From the article:
         | 
         | > I chose "boring technology" as the pithy SEO-friendly title
         | for this content, and I regret it most days. It's kind of
         | distracting. "Boring sounds bad, why is he saying it's good?"
         | Et cetera. It's a real shitshow.
         | 
         | > But what I'm aiming for there is not technology that's
         | "boring" the way CSPAN is boring. I mean that it's boring in
         | the sense that it's well understood. It's bad, but you know why
         | it's bad. You can list all of the main ways it will let you
         | down.
         | 
         | > It's important to master the tools that you do pick.
        
       | 11thEarlOfMar wrote:
       | > New tech typically has more known unknowns, and many more
       | unknown unknowns. And this is really important.
       | 
       | Isn't this true in many facets of life? Like.... taking a new
       | job... having your first kid... visiting a new city...
       | 
       | Are there processes for engaging in any new experience that
       | enable you to know the outcome is going to be net positive before
       | commencing?
        
       | altgans wrote:
       | Two observations:
       | 
       | - The slide with the jeep together with the "use boring
       | technologies" slogan paints an interesting picture of the
       | challenges of E-mobility in this century. There are going to be a
       | lot of things no one expected.
       | 
       | - How would you call this style of presentations? Zen-like? One
       | catchy thing per slide? I find it pretty well done, and when I
       | compare it to my own "wall of text" slides, I am a bit jealous.
        
       | qmmmur wrote:
       | This has to be the worst website to get the most basic
       | information. Talk about over-engineering.
        
       | siliconc0w wrote:
       | I think what people sometimes fail to realize is that the
       | software ecosystem has simply become more specialized. There is
       | now a higher-bar due to the competition between entrenched
       | technology companies with armies of engineers continuously
       | optimizing everything. So, depending on the industry/domain -
       | aside from a useful product you need to consider a lot more: apps
       | that work across platforms, performance, security, compliance,
       | SEO/marketing, analytics, speed of iteration/delivery,
       | infrastructure reliability, etc. All these contribute
       | requirements that add complication.
       | 
       | So if you want a company that can do all that you are going to
       | need specialists which typically come wielding specialized
       | technologies. You can probably get away with generalists wielding
       | 'boring' technologies for some period of time combined with SaaS
       | solutions but it's hard to avoid the fast-moving increasingly
       | specialized ecosystem forever.
        
       | qnsi wrote:
       | So, what would be a best boring backend stack today? The one
       | mentioned in the article? Or java for python?
        
         | rakoo wrote:
         | The one you and your team master, where all the failing modes
         | are known and predictable
        
       | dang wrote:
       | _Choose Boring Technology_ (but not the same article) -
       | https://news.ycombinator.com/item?id=25322651 - Dec 2020 (204
       | comments)
       | 
       |  _Choose Boring Technology (2015)_ -
       | https://news.ycombinator.com/item?id=23444594 - June 2020 (282
       | comments)
       | 
       |  _The boring technology behind a one-person Internet company
       | (2018)_ - https://news.ycombinator.com/item?id=20985875 - Sept
       | 2019 (451 comments)
       | 
       |  _Choose Boring Technology_ -
       | https://news.ycombinator.com/item?id=20323246 - July 2019 (344
       | comments)
       | 
       |  _Choose Boring Technology_ -
       | https://news.ycombinator.com/item?id=9291215 - March 2015 (212
       | comments)
       | 
       | Also: current ongoing thread
       | 
       |  _Choose Exciting Technology_ -
       | https://news.ycombinator.com/item?id=26212563
        
       | srich36 wrote:
       | This is one of those posts where you can really feel the value of
       | senior engineering/previous experience.
       | 
       | I definitely have not approached choosing a new technology with
       | the velocity vs. maintenance trade off, instead just choosing the
       | technology best fit for the job at hand. But when looking at a
       | system holistically, this may not be the best choice. It'll be
       | good to at least know to consider this in the future (although
       | I'll admittedly probably still bias towards "fun" technologies).
        
       | z3t4 wrote:
       | By committing to an technology early you are limiting your
       | options! You are limiting the possible ways problems can be
       | solved. You are limiting the talent pool/hiring options.
        
       | matthewfelgate wrote:
       | Thank you for sharing and explaining this. As a former software
       | engineer I finally understand the other side of the argument.
       | More than just being told it's a "business decision".
        
       | fiftyacorn wrote:
       | I still think the Simplicity Chapter in the Google SRE book sums
       | this up best
       | 
       | https://sre.google/sre-book/simplicity/
        
       | carapace wrote:
       | "Boring" in the sense used here really means something like
       | "reliable" or "low-maintenance". Think of the old Maytag
       | Repairman ads: he's just sitting there waiting for a call that
       | never comes because Maytag washing machines are so reliable, get
       | it?
       | 
       | Interestingly, this kind of boring can be measured. On the other
       | hand, the kinds of things that one finds fun is idiosyncratic and
       | subjective. I think it's an important distinction: we can argue
       | about "boringness" with data, but a discussion of "exciting"
       | software is much more like a discussion of personal tastes.
       | 
       | Take Elm for example, it's a highly reliable system for building
       | front-end web apps, so in that sense it's very boring (in a good
       | way!) but whether or not you find it exotic or exciting has a lot
       | to do with your personal experience with Functional languages and
       | such. To some people Elm seems like a toy, while to others it's a
       | strange new world.
        
       | phabora wrote:
       | Really good presentation. Even in this form. These are the best
       | arguments for choosing Boring Tech that I've seen yet.
       | 
       | Almost gave me a sinking feeling:
       | 
       | > If you behave that way you miss out on the part of the curve
       | that we call "mastery." That's a state to the right on this
       | curve, where there are still problems. Everything still sucks but
       | it feels manageable.
       | 
       | > The grim paradox of this law of software is that you should
       | probably be using the tool that you hate the most. You hate it
       | because you know the most about it.
        
         | ywei3410 wrote:
         | The hypothesis fails because it assumes all curves are the same
         | - and all tech has the same number of kinks; which is patently
         | false.
        
       | tpetry wrote:
       | The problem with the non-boring technology club is that
       | programmers see what problem FAANG companies are solving and
       | wanting to be on the edge on new technology too. But they don't
       | have the same problems. Another problem is they want to show what
       | they can do. If they tell in an interview they are working with
       | rails/django and a postgresql database they fear they look
       | incompetent using those old technologies. So they try to convince
       | their companies their products need to be rewritten in mongodb,
       | react with graphql in a micro service stack and many more state
       | of the art technologies.
       | 
       | And in the end many developer years are wasted just rewriting a
       | working an existing software in a new stack they are not yet
       | comfortable with and the new product is much less stable than the
       | old one.
       | 
       | I love basecamp for their hotwired stack and showing that you can
       | make the great software with old boring technologies and just a
       | little bit of javascript magic pixie dust.
        
         | cutler wrote:
         | Yes, Hotwire is another game-changer from that genius DHH. So
         | much so that Django and Laravel already have their own
         | implementations. I just love the passion that guy has for what
         | he does and his commitment to Ruby. I think Rails is an even
         | better choice since it became boring.
        
           | vyrotek wrote:
           | He's a smart guy but this feels more like a pendulum swing.
           | ASP.NET had a similar implementation called AJAX UpdatePanels
           | back in the mid 2000's.
        
         | threeseed wrote:
         | Basecamp is a simple app though. Ridiculously simple.
         | 
         | That app could have been written in the mid-1990s using
         | WebObjects in just a few months.
         | 
         | Technologies like MongoDB, React, GraphQL, Microservices etc
         | exist because modern, real-world apps are generally far more
         | advanced than just a glorified CRUD app. Consumers simply have
         | higher expectations and more demands for what web apps should
         | be able to do.
        
           | overkalix wrote:
           | > modern, real-world apps are generally far more advanced
           | than just a glorified CRUD app.
           | 
           | ... are they?
        
           | ryanbrunner wrote:
           | While this is somewhat true and you can't solve everything
           | with Rails + Postgres, you should ask yourself very, very
           | hard about whether what you're building is in that category
           | (and further, whether every part of what you're building
           | falls into that category).
           | 
           | Far, far too often I think a significant source of complexity
           | is enthusiastically added by engineers themselves assuming
           | that the problem they're solving is sufficiently complex that
           | boring technologies just aren't up to the requirements of
           | their project.
           | 
           | My current gig is writing a very traditional Rails app (we
           | hardly even dabble in Stimulus or Javascript all that much).
           | Prior to that, I worked on a Javascript-backed fully reactive
           | real-time app using the latest and greatest of technologies.
           | My boring old Rails app, IMHO, has a much nicer user
           | experience, far fewer quality issues, and is well loved by
           | customers, where the bleeding edge Javascript app was
           | constantly deried by customers for being difficult to use,
           | buggy and unintuitive. You can go a long way with simple
           | technologies if you design your experiences well.
        
         | nizmow wrote:
         | Typically though, FAANGs still solve their problems with boring
         | technologies.
        
           | stepbeek wrote:
           | I was very disappointed when I joined Amazon to learn we were
           | using plain old Java with servlets (this was 2015, I think
           | kotlin is more common now). Since leaving I'm in awe of how
           | sensible the technical decision making that led to that was.
        
             | redisman wrote:
             | I interviewed with Stripe and one of the engineers
             | mentioned they're transitioning many services to a exciting
             | new technology called... Java. That was in 2021
        
           | dilyevsky wrote:
           | Not true - they use cutting edge tech that sprawls around
           | sfba a few years later all the time. Maybe not on the web
           | side bc you aint gonna add much value by doing that anyway
        
           | usrusr wrote:
           | They are big enough to follow all paths concurrently. The F
           | is famously doing their own PHP and while the G was tickling
           | "shiny receptors" all over the world with Go (which
           | ironically could be seen as an example in boring technology
           | enlightenment, considering how it is basically a modern take
           | on 1980ies language features), they were also doing so much
           | plain old java that the parts of the internal tooling they
           | did for maintaining their own sanity published as Guava
           | easily had more impact on the viability of java as a language
           | than everything Oracle has ever released (yes, including Java
           | 8 lambdas).
        
           | jefftk wrote:
           | Yes! I work at a FAANG and over my time here it's been C++,
           | Java, Python, and JS. The least "boring tech" part of my work
           | has probably been that were moving from JS to Typescript?
           | Mostly, we want to use things that we're confident can do
           | what we need, and that we're confident don't have hidden
           | surprises.
        
         | rossdavidh wrote:
         | All true, but I would like to add that their manager would like
         | to say (when interviewing at FAANG) that they managed cool edgy
         | new technology as well. So they are not motivated to stop these
         | things because it sprinkles hot keywords on their resumes, as
         | well.
        
         | soheil wrote:
         | > they fear they look incompetent using those old technologies
         | 
         | It sounds like you're saying the fear is unwarranted. It very
         | much is a real fear as long as people interviewing them
         | actually count that against them and value new tech.
        
         | thewarrior wrote:
         | It's because job hopping programmers are compensated for how
         | rare their skill is in the market and not how much value they
         | add to the business. It's another flaw in capitalism.
         | 
         | Reward employees a direct and substantial cut of the profits
         | and incentivize to them to stay 5-10 years and these behaviors
         | should disappear.
         | 
         | The loss of job security, frequent job hopping has created more
         | incentives to optimize for the next job switch and not value
         | add.
         | 
         | The explosion of startups also contributes to this. They often
         | have to attract employees by offering the promise of autonomy.
         | Most startup employees know they aren't getting rich. So they
         | milk the startup for maximum resume points and move on.
         | 
         | The VCs unload these bloated companies into inflated stock
         | markets and the cycle continues.
         | 
         | DHH runs really small companies and pays his employees really
         | well and doesn't work them too hard. Employees have no real
         | reason to leave. They see a direct link between the low
         | overhead and their job security and work life balance. Aligning
         | incentives fixes this.
        
         | soheil wrote:
         | > they want to show what they can do
         | 
         | Or more like it's the scarcity, by definition new tech still
         | doesn't have many experts in it. So if you're one of the few
         | that learns it you're all of a sudden pretty differentiated
         | compared to your peers. Even if the new tech turns out to be
         | pure garbage down the road it doesn't matter because in the
         | meanwhile you can land the hippest jobs and win the admiration
         | of your peers by being so far ahead of everyone else.
        
         | djoldman wrote:
         | > So they try to convince their companies their products need
         | to be rewritten in mongodb, react with graphql in a micro
         | service stack and many more state of the art technologies.
         | 
         | I find it interesting that these technologies are considered
         | "state of the art" (SOTA). What does SOTA mean in this context?
         | I could see an argument for postgresql and rails/django being
         | SOTA as I think many believe them to be fairly mature, secure,
         | and feature complete.
        
         | DC1350 wrote:
         | If you have a shitty job then it's really hard to get the
         | experience you need for something better unless you invent
         | problems. That's why making things way more complicated than
         | they need to be is actually a good thing.
        
       | jmartrican wrote:
       | The way I see it is that one should master their stack. If you
       | work over and over again with the same stack you will know it
       | well. You will be able to move mountains with it. But it takes
       | years to arrive to that. It takes implementing multiple projects
       | the same way over and over again.
       | 
       | You need the wherewithal to stick with your stack and not get
       | lured away. Maybe this is what boring means. Maybe boring is
       | different to different engineers based on their background.
       | 
       | Sometimes you cannot select the stack cause there might be more
       | senior engineers at a company and they have more sway. This is
       | fine as long as the engineers picking the stack have picked a
       | stack they have mastered and it is boring to them. As a regular
       | engineer in their team I would hope to rely on their expertise
       | and would hope to learn from them.
       | 
       | I remember at one job a rogue engineer picked a boring backend
       | that would have been fine. But they fell behind because the other
       | engineers knew their boring stack a lot better. Ultimately the
       | rogue engineer had to switch to the other boring stack. The rogue
       | engineer just was not fast enough to master it and implement the
       | features required to keep pace with the demands of management.
       | These demands were trace centralized logging, security, and of
       | course features. So while they were still learning the ropes, we
       | were moving on to even more advanced security, logging, and
       | feature requirements. They just couldn't keep up.
        
         | bob1029 wrote:
         | > The way I see it is that one should master their stack. If
         | you work over and over again with the same stack you will know
         | it well. You will be able to move mountains with it. But it
         | takes years to arrive to that. It takes implementing multiple
         | projects the same way over and over again.
         | 
         | This is 100% how we did things for the last 5 years. We used
         | the exact same basic tools & APIs, but iterated on how we
         | integrated them together by way of our code.
         | 
         | We took what most people would call a "toy" stack, consisting
         | of just C#/AspNetCore/SQLite (and recently Blazor), and turned
         | it into something that can serve thousands of users in
         | production across several B2B customers. We don't use any sort
         | of containerization or cloud tech. Our software can be deployed
         | by unzipping a file on the target environment and running a
         | single command. You would be surprised at how much speed you
         | can get out of SQLite when you have had 5 years to live with
         | and experiment with its capabilities. On top of its extensive
         | internal testing framework, I have several testaments to its
         | stability sitting in our customers' environments right now.
         | We've got OLTP SQLite databases that are getting close to 1TB
         | in production without any signs of distress.
         | 
         | So, instead of focusing all of our energy on shiny things, we
         | focused on building a 100% integrated vertical with (mostly)
         | boring tech so that we can fully manage the lifecycle of our
         | software product with the product itself. We have a management
         | web interface built out for everything we need to do for
         | building & operating the solution. We are very close to being
         | able to partner with other organizations who can run the
         | implementations on our behalf because the software is so easy
         | to manage now. This is the type of real-world horizontal
         | scalability the CEOs are after.
        
           | jmartrican wrote:
           | Thanks for sharing that. I think we need more of these
           | stories of how a team was able to use the boring tools they
           | mastered to implement amazing things.
        
         | gilbetron wrote:
         | This is a great comment and is spot on. Mastery has exponential
         | returns over proficiency. The best thing is that mastery feels
         | really good once you have it. I've been bouncing around the
         | past several years not finding what I want, but I've realized
         | the past year that I want to have the mastery with a stack that
         | I haven't since my C/C++ OpenGL computer graphics years.
        
         | koheripbal wrote:
         | This equally applies to a company's business process. Focus on
         | a specific scalable business model that scales - don't make a
         | special niche process for every "opportunity" that comes by.
         | 
         | It also applies to managing your life, personally. Know what
         | things you do, what your personal goals are, and don't let
         | yourself get distracted by the latest and greatest social media
         | trends or stuff your friends are doing.
         | 
         | Focus. Mature. Achieve.
        
           | danjac wrote:
           | The "opportunity" is often a dangling carrot from a big
           | enterprise customer. It's very hard for a cash-strapped
           | startup looking to make bank and reputation to turn these
           | opportunities down, and they don't look at the TCO and long-
           | term costs in terms of complexity and tech debt.
        
           | jmartrican wrote:
           | > don't make a special niche process for every "opportunity"
           | that comes by.
           | 
           | At my current job we call those snowflakes. "no snowflakes"
           | is the motto of one of our senior architects.
        
         | vasco wrote:
         | I agree completely. Another angle that is less common is
         | remaining at one company you believe and respects your work. If
         | you find somewhere like that, years of working in the same
         | domain can make you more effective. Not to speak of the
         | advantages of a team that works together for 5+ years and the
         | power that comes from true camradarie with your team mates.
         | 
         | It's sad that most places - and by definition the largest
         | places also - end up being a meat grinder and people just hop
         | companies and teams within companies every year or two. By the
         | time you start understanding the domain you move on. It takes
         | years to internalize a problem and understand it deeply.
        
           | jmartrican wrote:
           | So true. I feel empathy towards management that need to keep
           | their engineering teams intact.
        
       | polote wrote:
       | previous discussion (348 comments)
       | https://news.ycombinator.com/item?id=20323246
        
         | jsnell wrote:
         | Also:
         | 
         | https://news.ycombinator.com/item?id=23444594
         | 
         | https://news.ycombinator.com/item?id=9291215
        
       | mikesabbagh wrote:
       | I think that technology used needs to be chosen based on today's
       | needs and not tomorrow's. Startups that decide to deploy 5
       | containers on kubernetes make me cry. The time and cost to
       | operate and maintain this beast is beyond any estimate compared
       | to even hosting each container on a seperate vm. This read was
       | very satisfying, thank you
        
       | syastrov wrote:
       | Reading this sounds like dejavu.
       | 
       | A company I've worked with also had a PHP monolith which was
       | supposed to be split up into microservices to improve
       | maintainability. The choice of language was free, and the first
       | ones were, kid you not, written in PHP using some alpha-quality
       | library which was supposed to make PHP asynchronous, to improve
       | "scalability". Comically, this stack was used in an image-serving
       | service which had to perform blocking image resizing using
       | ImageMagick. Due to this misunderstanding of the technology, the
       | only way to keep it afloat was to run 90 containers in a home-
       | managed Kubernetes cluster just to keep requests from queuing up.
       | Another comic misunderstanding of this paradigm was when I traced
       | down a bug where the process seemed to hang due to the fact that
       | the developer had intentionally added a call to sleep in a loop.
       | Coming from a Java/.Net background, they believed it would cause
       | the "current thread" to sleep in order to not hog resources. This
       | was problematic since the application (like nodejs) was single-
       | threaded.
       | 
       | I didn't want to work with that stack, so when it was my turn to
       | work on a new microservice, I chose Scala + MongoDB (same as
       | Etsy) because I wanted to learn about functional programming.
       | Ironically, the microservice was basically a "checkbox as a
       | service", but I and the tech lead on the team were too
       | brainwashed/high on learning new things to realize the
       | overcomplexity.
       | 
       | The entire thing was an expensive lesson that I and some others
       | got to learn from. The ones who didn't learn kept their
       | microservices ideology and found other jobs.
       | 
       | Fast-forward and the entire thing was scrapped and rewritten as a
       | Django + Postgres monolith. Not to say that it wasn't costly to
       | do a rewrite, but infinitely less costly than continuing down the
       | microservices road. Long live boring technologies.
        
       | revskill wrote:
       | Technology is just a tool, or not ?
       | 
       | By a tool, i mean, we still use boring algorithms (which exist
       | long before the tech is born to adapt it efficiently).
       | 
       | So, boring tech or not, it's not the point, as long as it serve
       | your purpose.
        
       | gscho wrote:
       | I enjoy reading this each time it gets posted but can we please
       | get TLS enabled? It's so easy these days.
        
         | moonbug wrote:
         | but why.
        
           | hacker_newz wrote:
           | It is pretty embarrassing for someone in tech not to set up
           | properly.
        
       | methyl wrote:
       | How do we make progress if everyone just chooses to use boring
       | technology which is already established? There would be no Rust,
       | no Ruby or other great pieces of technology as they cannot thrive
       | without communities. Communities cannot thrive if everyone
       | neglects everything that's new and exciting.
        
         | atoav wrote:
         | I guess it goes like this: Is there much at stake? Choose a
         | boring technology. Is it a experiment or a toy project? Choose
         | whatever floats your boat, knock yourself out, have fun and
         | learn on the way.
         | 
         | Trying out new things makes a ton of sense. But trying them out
         | in a domain where unforeseen consequences could potentially
         | destroy you is not a smart move.
        
           | cutler wrote:
           | Since most commercial projects have much at stake how would
           | new technologies ever get a chance to become mainstream? For
           | this to happen there has to be some risk-taking otherwise
           | we'll be permanently stuck in the current situation where a
           | bunch of scripting languages designed in the mid-90s for
           | single processors are tasked with handling much bigger
           | workloads on multi-core machines. Hence the current wave of
           | bolted-on gradual typing.
        
       | phendrenad2 wrote:
       | I always found it funny that companies will go to extreme
       | Herculean lengths to hire the best programmers, and are
       | incredibly fearful and paranoid that they could be making a "bad
       | hire", and yet once hired they don't spend a second making sure
       | engineers aren't completely running the software product off the
       | rails and killing the company internally. The author mentions
       | trying to rewrite Etsy's backend in Scala and MongoDB. That
       | probably cost the company X million dollars. Etsy could still be
       | recovering from that.
       | 
       | The industry constantly mints senior engineers who have been
       | bitten by complexity, but doesn't want to hire them, or listen to
       | them. More often than not senior engineers pretend to be excited
       | about complecting the tech stack, because hey, it pads their
       | resume with the latest buzzwords and they've given up trying to
       | fight against it anyway.
       | 
       | The last line of defense against a rogue engineering team is
       | managers who have studied this stuff. How many engineering
       | managers can spot the common situation "the engineers are bored
       | and they're rewriting perfectly-good codebases in Common Lisp and
       | OCAML for funsies"? And how many know what to do about it when
       | they see it?
       | 
       | Anyway, this is a cool website, and it'll be useful to point
       | people to it in the future, so thanks for that.
        
         | Mikushi wrote:
         | > The last line of defense against a rogue engineering team is
         | managers who have studied this stuff.
         | 
         | If your engineering team is the one pushing in that direction
         | I'd reckon the company was in a bad spot to begin with to have
         | hired that team because it strongly indicates that the
         | management layer (head of tech/CTO) has no technical clue.
         | 
         | Hire strong Lead Developers with a proven track record of
         | delivering value to companies they worked at and you'll be
         | mostly fine.
         | 
         | Also there's not much to study, in 99% of the cases in a web
         | based startup if your stack deviates from a monolith with one
         | of PHP/Ruby/Python/.NET/Go + Mysql/Postgres/MSSQL you're doing
         | it wrong.
        
           | js4ever wrote:
           | What's wrong with Node.js? It's super mainstream now. We have
           | it in production since years, I see a LOT of companies
           | migrating from everything else to node since years and it's a
           | growing trend from what I see at my level with startups and
           | even enterprises
        
             | Mikushi wrote:
             | Nothing, just forgot about it.
        
             | collyw wrote:
             | The language for one. There are decent choices of language
             | for backend work. Why anyone would choose JavaScript is
             | beyond me.
        
               | Kwantuum wrote:
               | The thing is, if you have any sort of front-end that is
               | not entirely server-side rendered, you're going to have
               | to work in JS at least some of the time. If your back-end
               | is also in JS, you now get the benefit of isomorphic code
               | for things that you may want to do on both front-end and
               | back-end.
               | 
               | Then there is also the fact that JS is actually a pretty
               | great language if you know how to avoid the footguns.
               | Granted that's not always easy, but it's a language with
               | lexical closures and easy and familiar syntax, it's also
               | very expressive and has a vast ecosystem supporting it.
               | And you can even add the typescript compiler on top if
               | you want compile-time type-checking.
               | 
               | It's also async out of the box, and while that doesn't
               | solve all problems, it scales surprisingly well with no
               | performance tuning whatsoever, it even has decent
               | asynchronous primitives that make it easier to write
               | correct code.
        
               | lostcolony wrote:
               | Yeah; even without frontend code, JS is surprisingly
               | compelling. It's easy to hire for, easy to write
               | reasonably performant IO code in, the footguns are pretty
               | much all well documented and generally understood (rather
               | than requiring knowledge of the deep magic to debug),
               | library support is top notch, and as a language it
               | supports both OO and FP, while being pretty small in
               | scope, terse without encouraging too much code golf.
        
               | whimsicalism wrote:
               | Oh, but Python is an ideal backend language?
               | 
               | Give me a break.
        
               | dukeyukey wrote:
               | If you want something mature, with libraries for
               | everything, solid backwards compatibility and basically
               | the best "boring" choice, go with Java. And if your devs
               | want to mess around a bit, mixing some Kotlin in is
               | basically harmless and easy to reverse if needed.
        
             | hackerfromthefu wrote:
             | It's generally high maintenance, npm dependencies,
             | deprecations, leftpad, javascript new shiny culture etc
             | 
             | You can make it work with more maintenance, but you did ask
             | the question what's wrong with it!
        
               | chrisco255 wrote:
               | It's really not high maintenance at all. Leftpad issue
               | was fixed in less than hours the same day it happened and
               | since then the NPM tooling for package management has
               | improved a great deal.
               | 
               | JS shiny new culture doesn't really exist on the back end
               | (and even front end js has calmed down in recent years).
               | Express.js, the go-to framework 7 years ago, is still the
               | go-to framework on Node today.
               | 
               | Node and Mongo are at this point "boring tech". Their
               | limitations and trade-offs are well known, their benefits
               | are also well-established, and their APIs and tooling
               | have matured.
        
             | onetom wrote:
             | Recommended "literature":
             | 
             | 1. 10 Things I Regret About Node.js - Ryan Dahl - JSConf EU
             | (https://www.youtube.com/watch?v=M3BM9TB-8yA)
             | 
             | 2. Brendan Eich: JavaScript, Firefox, Mozilla, and Brave |
             | Lex Fridman Podcast #160 (https://youtu.be/krB0enBeSiE)
        
               | redisman wrote:
               | Sure but there are all known issues to any Senior Devs.
               | You don't have to pull shady hairballs from npm for every
               | little feature you can think of. I've ran node in
               | production for the last 5 years so at least to me it
               | counts as battle tested and "boring".
        
           | criddell wrote:
           | And what about the front end? What's the best, most boring
           | choice there?
           | 
           | I was on a project for a bit using React and although it felt
           | like an obvious way to write things, I can't help but feel
           | you can't create something that will last for a decade with
           | it.
        
             | 1337shadow wrote:
             | Unless you're trying to make a really rich SPA, it could be
             | something of: unpoly, htmx.org, barbajs, knockoutjs,
             | turbolinks/stimulusjs... Anything that lets you enjoy
             | server side rendering, whatever your framework
             | autogenerates for you (ie. forms) is better to "just have"
             | than "have to implement", instead of having 2 projects (one
             | API, one frontend), or even no frontend framework at all
             | (ie. mvp.css and plain HTML), you can do a whole lot of
             | relevant projects with that already.
             | 
             | Webcomponents in plain JS are also great to not have to
             | deal with JS class/HTML Element binding and lifecycle
             | yourself.
             | 
             | Why not add a bit of Flutter or React for a few features,
             | but for most pages it's going to be an expensive overkill.
        
             | BigJono wrote:
             | You absolutely can. React is the gold standard right now.
             | It's already been king for 6 years and it's not going
             | anywhere. The hype for angular died down. The hype for vue
             | has started to die down. This little bit of hype svelte has
             | at the moment will die down.
             | 
             | React does have a ton of problems but they all come from
             | the next level of dependencies down. Shit like Gatsby and
             | Nextjs won't pass the test of time. Neither will redux
             | (it's already pointless) and all the convoluted bullshit
             | like redux-saga. If you learn to build stuff using just
             | react and other basic dependencies (like express on the
             | back end), you'll be in a good position going forward. None
             | of that stuff is going anywhere.
        
               | spurgu wrote:
               | Gatsby at least spends a lot of effort playing cat and
               | mouse with Google's Pagespeed algorithms so you don't
               | have to. That by itself has tons of value.
        
               | criddell wrote:
               | My instinct is to build a native front end and connect to
               | the back end over a REST (or similar) API. To me, that
               | feels like the boring technology route.
        
               | BigJono wrote:
               | Yeah, that's totally legit, and what I would default to.
               | 
               | The reason stuff like React exists isn't because it's
               | some big generic library for doing "frontends" that
               | everyone has to use (even though that's how people see
               | it, how it's marketed, and how people use it). If you
               | want to know what a library is good for it's easiest to
               | look at what it was originally built for, the very first
               | problem it solved.
               | 
               | For libs like React, that problem is DOM manipulation.
               | 
               | For most of the interesting things you can build on the
               | web these days, DOM manipulation becomes a problem at
               | some point because the solution has an inherent
               | complexity to it that becomes hard to manage. That
               | complexity is in procedurally updating the DOM,
               | specifically getting the order of insertions and
               | deletions correct and keeping track of every possible
               | state the DOM can be in to make sure your app doesn't get
               | in a weird state that it can't recover from.
               | 
               | The way React (and vue, angular, svelte etc, all the
               | modern libraries) fix that problem is by changing the
               | programming paradigm from procedural to declarative. The
               | declarative paradigm is just fundamentally much simpler
               | for the exact problem of handling DOM manipulation in a
               | large app.
               | 
               | If you're learning, or building something for yourself
               | and not worried about spending time on refactors, then
               | it's definitely worth building something in vanilla JS
               | first, running into some sticky DOM manipulation
               | scenarios yourself, and solving them the hard way. People
               | make the mistake of using React when they don't need to
               | because they don't have a good understanding of where
               | that line is in the inherent complexity of a web
               | page/app, where you start to get a very good returns on
               | bringing React in to simplify some of that complexity.
               | 
               | That's also why I really don't rate vue, angular or
               | svelte. React is a big library in terms of code size
               | (over 100KB still I think?), but almost all of that
               | complexity is internal. The exact same API and
               | functionality is exposed by Preact, which is a few
               | kilobytes. React has a really small API, pretty much just
               | three functions: createElement, render, and useState. I'm
               | a big fan of libraries that do big things with only a few
               | functions. Do one thing well and all that. There's also
               | the JSX transform, which is a straight line for line
               | transform, meaning the code you write is very similar to
               | the code that runs in the browser, you can follow it line
               | by line with no surprises.
               | 
               | React is a good tool to have in the toolkit, after you've
               | gotten comfortable with vanilla JS. I wouldn't write it
               | off based on how other people present it. You just need
               | to avoid the insane amount of complexity and cruft that
               | people have built around it. All that complexity will go
               | away when people go running after the new shiny thing,
               | but React or something very similar to it will stick
               | around for a loooooong time because the fundamental ideas
               | are so simple and powerful. DOM control through
               | declarative coding, code over configuration, utilising
               | the JS language itself as much as possible instead of
               | relying on DSLs, and simple transforms that maintain the
               | integrity of your code all the way to the production
               | build.
               | 
               | If anything replaces React it either have to be quite
               | similar, or be another entire paradigm shift (maybe the
               | whole DOM/CSSOM thing will get replaced at some stage,
               | who knows?)
        
               | ZephyrBlu wrote:
               | React has innovated somewhat with lifecycle methods and
               | hooks, but the main value is not in it's API. It's the
               | ecosystem and scheduler.
               | 
               | Preact is a good alternative if you have a small app, but
               | the reason it's so small is because it doesn't have a
               | scheduler which might cause issues with larger apps.
        
               | Aeolun wrote:
               | > Neither will redux (it's already pointless) and all the
               | convoluted bullshit like redux-saga.
               | 
               | I can't speak to your own use case, but redux and saga
               | absolutely save our bacon when working on a huge
               | enterprise app.
               | 
               | I don't even want to think about the crazy kinds of stuff
               | we'd have to do without them.
               | 
               | Maybe someone will come up with a better abstraction, but
               | I really think these are fairly good ones.
        
               | wwww4all wrote:
               | Have you tried redux toolkit? createSlices?
               | 
               | Redux has greatly improved workflow for integrating with
               | React. The main issue with Redux is that it pretends to
               | be generalized state management engine, with all the
               | overhead, while it's in a shotgun wedding with React.
               | 
               | Will React team attempts another state management, aka
               | Flux, when Redux does 95% of features and is slowly being
               | absorbed into React eco system anyway?
               | 
               | Gatsby/nextjs will likely merge into a single React
               | static site generator. Similar to React router and Reach
               | router merger.
               | 
               | React is like jquery, it's going to be around forever.
               | React is almost at the core web infrastructure tech
               | level, just by consensus alone.
        
               | acemarke wrote:
               | Not sure what you mean by the "pretends" statement.
               | 
               | Both the Redux core and Redux Toolkit _are_ completely
               | UI-agnostic, and can be used with _any_ UI layer or even
               | standalone.
               | 
               | Yes, most Redux usage is with React, and we do orient our
               | docs around the assumption that you're probably using
               | Redux and React together, but there's many people who are
               | using Redux separately.
        
               | wwww4all wrote:
               | The "pretends" comment is light hearted joke (or is it?)
               | about keeping Redux UI library agnostic. When we all know
               | React is the 8000 pound gorilla pulling on Redux.
               | 
               | The default assumption for any production React
               | application is that it will need Redux at some point.
               | It's much more efficient to start the React project with
               | Redux, than trying to bolt on Redux after React project
               | is underway after a while. Redux Toolkit does make things
               | bit easier.
               | 
               | It's like how React pretends that JSX is optional, when
               | we all know JSX is requirement in React projects.
               | 
               | Thanks for all the work on Redux and Redux Toolkit.
        
               | acemarke wrote:
               | Fair enough :)
               | 
               | Yeah, as I've been redoing our docs, I've really tried to
               | emphasize the "take some time to decide if you _really_
               | need Redux" aspect:
               | 
               | https://redux.js.org/tutorials/essentials/part-1-overview
               | -co...
               | 
               | FWIW, we do take the "UI-agnostic" part seriously. We've
               | got an upcoming new API for Redux Toolkit that we've
               | dubbed "RTK Query", currently available as a preview
               | release. We've got an example of it working with Svelte,
               | and I know I saw someone else trying it out with Vue:
               | 
               | https://rtk-query-docs.netlify.app/examples/svelte
        
               | deckard1 wrote:
               | I've been using React since 2014 or so.
               | 
               | I can't speak for Angular or Vue, but I'm 100% sold on
               | Svelte. It cuts out all of the crap that React and Redux
               | introduced (lifecycles, hooks, boilerplate, etc.) and
               | boils it all down to fundamentals. You can read the
               | entire docs in a day and fully understand how everything
               | fits together. I dare say it, but Svelte's docs are a
               | breath of fresh air. It's rare that I read documentation
               | and want to keep reading it.
               | 
               | To me, that's what boring tech is about. It's about
               | finding the simplest, cleanest way to do what you need to
               | do. I hope Svelte takes the path of long-term stability
               | over features and complexity and innovation for the sake
               | of it. What they have right now is a solid foundation.
               | 
               | > convoluted bullshit like redux-saga
               | 
               | Wait until you meet saga's bigger brother RxJS/redux-
               | observable. Someone on HN once mentioned JIRA was using
               | RxJS and I realized "ah, that explains why JIRA is the
               | slow pile of absolute shit it is." From just knowing a
               | company is using RxJS I can already guess at the type of
               | internal communication and politics at play in the
               | company, as well as what their code base looks like.
        
           | laurent92 wrote:
           | and Java?
        
             | gurkendoktor wrote:
             | The Java community has some great developers, but also a
             | lot of Serious Software Engineers who will sabotage
             | everything with extra complexity, and then everyone who
             | learned Java in school and never felt like looking at
             | another language (not even Kotlin).
             | 
             | Java is definitely "boring technology", but hiring random
             | Java developers will probably sink a company faster than
             | doing the same for Go.
        
               | whimsicalism wrote:
               | > everyone who learned Java in school and never felt like
               | looking at another language
               | 
               | A large reason I avoid Java teams.
        
               | cbm-vic-20 wrote:
               | The GP comment mentions the need for finding engineers
               | with "a proven track record of delivering value", yet
               | here we have a concern about "hiring random Java
               | developers".
               | 
               | Is the industry biased against great engineers who have
               | been working with Java for the past 20 years, even if
               | they "deliver value" (which is pretty much impossible to
               | determine externally)?
        
               | lostcolony wrote:
               | No.
               | 
               | But I, personally, am biased against hiring people with
               | only Java on their resume. Because 90% of the time what
               | I've encountered are people who haven't examined their
               | technology choices, questioned the status quo, tried to
               | -improve- things.
               | 
               | That's not a sleight on Java, per se, but it is against
               | anyone with only one language on their resume. It's just
               | that if there is only one language on a resume in web dev
               | land, it's almost always Java.
        
               | blandflakes wrote:
               | Yup - it's _possible_ to build uncomplicated software in
               | Java, especially in recent iterations of Java and more...
               | restrained modern frameworks. However, there 's no
               | guarantee that you're actually going to either join a
               | team or hire a Java expert with those tastes.
        
               | cutler wrote:
               | Although still new I'm wondering whether Kotlin could be
               | admitted to the boring technology category given that it
               | was built to dovetail with Java and has first class
               | Spring support?
        
               | stepbeek wrote:
               | I've found kotlin to be wonderfully boring. There are
               | definitely some sharp knives that get abused though. I've
               | met a few people who want to throw OO in the bin and
               | treat kotlin as pure FP to their detriment.
        
             | user5994461 wrote:
             | Startups are more commonly on python/ruby/node/php. It's
             | faster to start with and to iterate.
             | 
             | Java and .Net are more common in longer-lived, larger
             | projects, or when performance matters.
        
               | hackerfromthefu wrote:
               | and where maintainability and tco matter
        
               | collyw wrote:
               | I think maintainability is mostly down to developer skill
               | and the ability to abstract to the right level. A good
               | Python dev will likely leave far more maintainable code
               | than an average Java dev.
        
               | nift wrote:
               | Can't one always say that? Wouldn't it be more fair to
               | compare equal level of skill?
               | 
               | I mean, in most cases it doesn't really matter what tech
               | you choose as 1. Most products don't really need "massive
               | scale" 2. It's more important to be proficient in the
               | tech you pick rather than it being the "best tech ever".
               | I mean Facebook still uses PHP no?
        
               | jermaustin1 wrote:
               | > A good Python dev will likely leave far more
               | maintainable code than an average Java dev.
               | 
               | And a GOOD Java dev will likely leave far more
               | maintainable code than an AVERAGE Python dev.
        
               | whimsicalism wrote:
               | I have yet to see this in an enterprise setting, maybe my
               | standard for "average python dev" is too high.
        
               | lostcolony wrote:
               | I have yet to see a maintainable Java project of any
               | reasonably large size, anywhere.
               | 
               | Java programs are larger than those in other mainstream
               | languages, just by dint of the verbosity of the language
               | (and research backs this up; studies showing errors per
               | LOC are consistent regardless of the language).
               | 
               | Ergo...
        
         | rachelbythebay wrote:
         | How about "leaves the industry rather than have to use terrible
         | things at dumb companies", thus giving a survival bias that
         | selects for shiny. I know I feel that way about a lot of stuff
         | now.
        
           | vvanders wrote:
           | That's a really common pattern in gamedev too. Median career
           | is something like ~3 years so those that stick around are
           | okay with the crunch and other shitty parts of the industry.
           | 
           | Combine that with gatekeeping/I did my time you have to do
           | yours and not much has changed there over the years.
        
             | blackrock wrote:
             | What's the pay like for senior games engineers?
        
           | ryandrake wrote:
           | You don't even have to go that drastic. I was also tired of
           | the "new technology treadmill" in software development, so I
           | just changed roles in the same industry. Did a little product
           | management for a while then settled on project management--
           | for those same software companies. The pay is much worse but
           | at least I'm not spending my time re-writing working software
           | into "non-working software, but hey, it's in Scala."
        
           | hkt wrote:
           | One of the most relatable posts I've ever seen on HN. Same
           | reason I'm working towards getting out.
        
           | mtrovo wrote:
           | That's a fair point and I can totally relate to it. There's a
           | toxic relationship of startups always trying to one up each
           | other to attract more attention as a great place to work and
           | in general tech stack is just another tool on this fight. As
           | a consequence workers are pushed to the same mindset, where
           | fixing a problem with 10 microservices and a dozen AWS
           | services is the expected and if you prove you can solve the
           | same problem with a single machine running a cronjob with no
           | external dependencies you're the weird one.
        
         | soheil wrote:
         | > I always found it funny that companies will go to extreme
         | Herculean lengths to hire the best programmers
         | 
         | Because you may know how to hire the best or have the skill to
         | know who the best are, but you don't know how to _be_ the best,
         | so how can you judge their work if by definition you 're not as
         | good as they are?
        
         | tootie wrote:
         | I've never witnessed rogue engineers. If the team has business-
         | driven objectives how could they possibly have enough time to
         | chase rainbows? Any time a rewrite or refactor has been done in
         | my org, it was pitched up the chain of command and explained in
         | terms of business value (ie performance, maintenance,
         | retention).
        
         | code_duck wrote:
         | I had a small business depending on the Etsy API during the
         | time they transitioned some storage to Mongo. The immediate
         | effect for us was a downturn in functionality and reliability
         | with no apparent advantages. In the midst of other serious
         | concerns about their direction, we questioned why Etsy was
         | doing this on the API mailing list and were told basically we
         | didn't know what we were talking about and it wasn't out
         | business. Fair enough, sort of.
         | 
         | It was a hot time for NoSQL and document DBs. Having
         | investigated using Mongo myself to little avail, I asked why
         | they didn't just use Postgres. If I recall correctly, a couple
         | years later they published a Mongo at Etsy postmortem which
         | concluded they should have just stayed with Postgres.
        
           | collyw wrote:
           | I am left maintaining a mongo db from 7 years ago or so, when
           | NoSQL was peak hype cycle. Like you say it's crap.
        
             | NomDePlum wrote:
             | Lots of good reasons to use NoSQL. All pretty much hang off
             | what sort of data access pattern you need.
             | 
             | If you have an application that retrieves an works on a top
             | level entity then NoSQL fits very nicely. When you have a
             | dataset that is shared and aggregate information is needed
             | not so much and you are likely better of considering a SQL
             | database of some sort.
        
               | bitwize wrote:
               | > When you have a dataset that is shared and aggregate
               | information is needed not so much and you are likely
               | better of considering a SQL database of some sort.
               | 
               | There are best practices for this. Simply create a
               | microservice per table, and then create a microservice
               | that acts as a client to the other services and
               | aggregates or joins the data from those services.
               | 
               | No, I'm not kidding. This is literally what people do and
               | recommend.
        
               | c-cube wrote:
               | And remember to implement distributed 2 phase commit to
               | guarantee consistency! So much simpler than using old
               | crufty sql
        
               | bitwize wrote:
               | Oh, pish and tosh! That's too much engineering! Instead,
               | handwave about "eventual consistency" and save millions
               | in infrastructure costs! Totally worth it for the
               | benefits of being truly abstracted from your data storage
               | layer. Because, you know, people change their database
               | back ends more often than they change their sheets.
        
               | stepbeek wrote:
               | This is a good point. If we ignore obvious key-value
               | examples, I'm curious about how much data really isn't
               | relational.
        
           | b0afc375b5 wrote:
           | For anyone else curious, I found the postmortem here:
           | 
           | https://mcfunley.com/why-mongodb-never-worked-out-at-etsy
           | 
           | Which was compiled here:
           | 
           | https://github.com/icy/w2w
        
             | Kwantuum wrote:
             | That repo is interesting. A quick ctrl+F seems to indicate
             | that pretty much every instance of "MongoDB" is "Moving
             | from Mongo to Postrges or DynamoDB" (there is one single
             | entry of moving _to_ Mongo from MySQL). Almost as if Mongo
             | is just not a good database (or people are too eager to use
             | it for things which it does not do well).
        
               | gravypod wrote:
               | Making efficient use if mongodb is very difficult but if
               | you build your app and expectations correctly you can get
               | something very performant. For example pre-4.x listing
               | huge collections was unexpectedly extremely slow.
        
               | chrisco255 wrote:
               | Yeah Mongo is 10 years old or so at this point. This
               | article was written in 2015 about decisions made years
               | earlier. It's now reached maturity and stability. It's
               | now "boring tech".
        
               | Yeroc wrote:
               | Um, even if it's mature technology that doesn't negate
               | the costs of operating two different databases which is a
               | large part of what the original presentation is about.
        
         | ChrisMarshallNY wrote:
         | I don't do "boring," as much as I do "mature and robust." I
         | like _shipping_ products, as opposed to just "writing" them,
         | and shipping is boring. Lots of annoying intricacies and
         | processes.
         | 
         | I'm writing a fairly large-scale app, right now.
         | 
         | It's written in Swift (frontend), using IB (classic UIKit), and
         | PHP/MySQL/Postgres (backend).
         | 
         | It does not use SwiftUI (shiny), or Rust (shiny, but a bit more
         | dusty), or some form of NoSQL.
         | 
         | I picked standard UIKit, because I like SwiftUI, but the app
         | has a fairly intricate and non-simple storyboard. I am not
         | confident that SwiftUI is up to the task, and I _know_ that IB
         | can do it.
         | 
         | I've been writing in Swift since the day it was announced, so I
         | already know it is up to the task, despite being a fairly new
         | kid on the block.
         | 
         | I picked PHP, because I'm already quite decent with it, and,
         | despite the hate, it is a perfectly good, performant, proven,
         | and supported enterprise language. There's a better than even
         | chance the server will be swapped or rewritten in the future,
         | so it's a good idea to use my implementation as a PoC and
         | architecture model, anyway. It will need to run the system
         | during the nascent phase of the project, so it needs to be
         | solid and secure. There's no way I will take the risk of
         | writing such a critical system, in a language I barely know
         | (See this scar? I've done that -long story).
         | 
         | I picked MySQL and Postgres, because they are proven, robust
         | databases, and can be installed on most low-cost hosting
         | solutions (the app is for an NPO). I used PDO to interact with
         | the databases, for security and reliability, anyway, so it's
         | entirely possible to add support for more databases, in the
         | future.
         | 
         | Also, backend is not my specialty. What I did, was design a
         | layered architecture that will allow future "shiny" engineers a
         | path to replacing the engine. I wrote an abstraction layer into
         | the server, allowing a pretty wholesale subsystem replacement.
         | The app communicates with the server through a classic REST-
         | like JSON API, so there's another place for a swap. I'm not
         | married to a system like GraphQL, with the need for
         | dependencies; but the layered architecture allows use of
         | GraphQL, anyway, if people really want it (it is cool and
         | robust, but is difficult to use without some _big_
         | dependencies).
         | 
         | Speaking of dependencies, I do everything in my power to
         | eliminate them. I have been _badly_ burned, in the past (not
         | too distant, either -I had to do an emergency dependencyectomy,
         | just a couple of weeks ago), by over reliance on dependencies.
         | It means some extra work, on my part, but not crippling.
         | 
         | Speaking of boring, few things are more boring than
         | documentation, testing and quality coding techniques. My
         | testing code usually dwarfs my implementation code. I spend
         | many boring hours, running tests, and examining results.
         | 
         | In my experience, I don't think I've ever written a test that
         | wasn't necessary. They _always_ expose anomalies. I just went
         | through that, in the last week or so, as I was refactoring a
         | legacy system for the app I'm writing. I actually encountered
         | and fixed a couple of issues (including a really embarrassing
         | and scary security bug) that have been in the backend for two
         | years.
         | 
         | But that's just me. WFM. YMMV.
        
           | oblio wrote:
           | Why 2 DBs?
        
             | ChrisMarshallNY wrote:
             | Wow. Someone actually looked at the project.
             | 
             | I set it up, so that all the security stuff was sequestered
             | into its own "silo." This allows things like using
             | monitoring and logging, or a hardened host, without
             | affecting the main datastore.
             | 
             | The deal is, is that I expect the tech to get swapped out,
             | down the line, for something more modern, and it might not
             | even use SQL. But security is quite important (especially
             | with the target user base of the initial release). I went
             | kind of overboard with some structural support for
             | security. I am quite aware that I could get better
             | performance from a single, related DB, but I wanted to
             | start off with an infrastructure-level support for
             | security, with the anticipation of future tech making up
             | for any performance issues.
             | 
             | In my experience, security is often spackled on, after the
             | fact, and I think that it's important to start from
             | scratch, with security.
             | 
             | Also, note the ridiculous simplicity of the DB schemas.
             | That was because I used... _yecchhh_ object-oriented design
             | as the Model, and the datastore actually represents a
             | generic base class state. This allowed me to write a whole
             | bunch of code, early on, and test it, then never have to
             | look at it again. The implementation was done in layers,
             | over a period of seven months. Each layer was treated as a
             | standalone project, with its own lifecycle and testing. The
             | idea was to develop a robust structure that I could
             | consider reliable, then build on top of that.
             | 
             | It worked fairly well.
        
           | cutler wrote:
           | Isn't all this planning for future redundancy what the
           | article is arguing against?
        
             | ChrisMarshallNY wrote:
             | I don't look at it that way. I have a very "wishy-washy"
             | design approach. I call it "paving the bare spots"[0]. It's
             | definitely not a "classic" approach, and it would not be
             | something that I would recommend to anyone that is not
             | extremely experienced.
             | 
             | The idea is that I am not actually aware of what the final
             | product will look like, when I start, so I take a very
             | careful approach. I spent 27 years, working for a
             | "Waterfall-based" corporation, where the system had to be
             | 100% designed up front, and the end result would "meet
             | spec," while still sucking. I am not particularly thrilled
             | with many agile approaches, either, as I see many of the
             | same problems. It's really just shifting the tech debt
             | around.
             | 
             | My approach actually results in my having to throw away a
             | lot of really good, tested, code, but I still end up moving
             | lightning fast, and coming out with good results. If you
             | look at my portfolio, you will see a whole bunch of small,
             | heavily-tested module projects. Many of these were things
             | that I ripped out of other projects, but didn't want to
             | throw away. Some of them are crazy useful, like the
             | Persistent Prefs Utility[1], or the Generic Swift Toolbox
             | utilities[2], which show up in most of my work. The fact
             | that they are treated as independent projects, with heavy
             | testing, means that I can reuse them with confidence.
             | 
             | The Spinner project[3] was an example of a UI I designed to
             | be a central aspect of an app, then decided not to use it,
             | as it deviated too much from the user workflow I had in
             | mind. It will be back, but not until it's the best
             | approach. Eye candy is nice, but it still needs to be
             | usable.
             | 
             | That modular approach is not new at all. I think I may have
             | been doing it since the early nineties.
             | 
             | True, there is flexibility, but that flexibility is
             | implemented as a single-point hinge, not a bendable
             | continuum. It's very clear where the flexibility goes, and
             | that point is well-tested. I just got done refactoring the
             | server, where I added a more flexible way of allowing users
             | to implement security postures, and I'm really, really glad
             | that I did things the way that I did. It was a pretty big
             | job, adding personal tokens (the new functionality), but a
             | lot of the work was making sure that I stuck with the
             | "philosophical" domains of each layer, and testing the
             | living bejeezus out of the code.
             | 
             | And each point of flexibility has a very clear domain. For
             | example, the ANDISIOL layer is where the SQL turns into
             | functions. You can rip out everything below that, and
             | replace it with whatever you like, as long as the same
             | functional API is presented to BASALT. That's a fairly
             | classic pattern.
             | 
             | [0] https://littlegreenviper.com/miscellany/the-road-most-
             | travel...
             | 
             | [1] https://riftvalleysoftware.com/work/open-source-
             | projects/#RV...
             | 
             | [2] https://riftvalleysoftware.com/work/open-source-
             | projects/#to...
             | 
             | [3] https://riftvalleysoftware.com/work/open-source-
             | projects/#RV...
        
           | lapcatsoftware wrote:
           | > I don't do "boring," as much as I do "mature and robust."
           | 
           | > I've been writing in Swift since the day it was announced
           | 
           | May I ask how you consider these to be compatible?
        
             | ChrisMarshallNY wrote:
             | _> May I ask how you consider these to be compatible?_
             | 
             | It was a calculated risk. Since the company I was working
             | for, at the time, was never going to use Swift, my "bread
             | and butter" was at no risk, whatsoever. We were a C++ shop.
             | I just started working with it on nights and weekends.
             | 
             | Being a C++ shop, however, we were quite familiar with
             | Lattner and LLVM, so we were aware of his propensity for
             | WIN. That gave me some confidence, going forward. Also,
             | Apple didn't just announce a language. They also announced
             | a full system API, as well as a product roadmap. The API
             | showed they were serious about it. Those don't come in
             | Cracker Jack boxes. They take some _serious_ work and
             | investment.
             | 
             | It was definitely a risk, but I'm a conservative, scarred
             | veteran of many errors in judgment (can you say "OpenDoc"?
             | I knew you could!). I wasn't about to run into a burning
             | dumpster, half-assed, and I thought it was worth it. I knew
             | it would take four or five years to mature, and it has. I
             | tend to play the long game. I learned that, from all those
             | years, working with the Japanese.
        
               | asphaltycode wrote:
               | I appreciate these posts quite a bit. Can you give
               | another example of "playing the long game"?
        
               | lapcatsoftware wrote:
               | > I actually mentioned that. Like, immediately after the
               | quoted phrase.
               | 
               | I'm rereading your previous comment multiple times but
               | unfortunately still failing to see what you're referring
               | to. The only explanation I can see is "we were quite
               | familiar with Lattner and LLVM, so we were quite aware of
               | his propensity for WIN. That gave me some confidence,
               | going forward."
               | 
               | > They also announced a full system API, as well as a
               | product roadmap.
               | 
               | I'm not quite sure what you mean by "a full system API",
               | and does Apple _ever_ announce a product roadmap? I would
               | definitely be interested in this roadmap of which you
               | speak. :-)
        
               | ChrisMarshallNY wrote:
               | You are correct. It was the next comment I made (so I
               | removed that smartass line).
               | 
               | I apologize.
               | 
               | They have had a Swift roadmap forever. I think it's now
               | kept on swift.org. I'll see if I can find it. I think
               | it's a fairly sparse one. I really only cared about the
               | evolution through ABI Stable. All I needed to hear, was
               | that was a goal.
               | 
               | You are right. They tend to eschew roadmaps, but they did
               | a "hard-sell" with Swift. They knew it would be difficult
               | to build momentum with.
               | 
               | "Full System API" is the native frameworks; UIKit,
               | AppKit, WatchKit, etc., as well as things like WebKit and
               | MapKit.
               | 
               | When Swift was announced, they had APIs for most of that
               | stuff. I was pleasantly surprised. I had a full app,
               | working within a day or so (using beta Xcode, of course).
        
               | lapcatsoftware wrote:
               | > I really only cared about the evolution through ABI
               | Stable.
               | 
               | Ok, but that came later and wasn't present in 2014.
               | 
               | > they did a "hard-sell" with Swift
               | 
               | I agree with that. :-)
               | 
               | > "Full System API" is the native frameworks; UIKit,
               | AppKit, WatchKit, etc., as well as things like WebKit and
               | MapKit.
               | 
               | Swift did of course have bridging to Objective-C and the
               | preexisting Objective-C API. I find it strange to equate
               | language bridging with announcing a full system API -- an
               | API originally announced around the turn of the century
               | (can't believe I'm using that phrase now). Cocoa-Java,
               | which no longer exists, also had such bridging, as does
               | PyObjC and MacRuby/RubyCocoa. Still, most of the system
               | API to this day are written by Apple in Objective-C.
        
               | ChrisMarshallNY wrote:
               | That's a good point. I never thought of that. It was
               | actually an old bridge. I remember when they tried to
               | make Java a "full citizen" language. Boy, that flopped...
               | 
               | SwiftUI shows promise, but it is still quite nascent.
               | 
               | Pretty much every bit of code I write is "pure" Swift
               | linkage. I like things like Swift's enums too much to
               | give them up. They make APIs really fun.
        
         | addicted wrote:
         | The blog isn't really an argument against MongoDB however.
         | 
         | In many ways it's an argument for MongoDB considering if you've
         | built a JS based application MongoDB minimizes any additional
         | learning and having to translate between the objects on the
         | front end and in the backend. Non relational DBs are also
         | easier to scale horizontally without requiring any application
         | changes.
         | 
         | The OP is an argument against introducing new technology
         | without a significant clear benefit. It's basically saying that
         | simply having a new tech can add significant complexity,
         | unknown unknowns, and require much more maintenance and other
         | costs.
         | 
         | So if your web application is currently running on MongoDB and
         | it's running well then this is an argument to stick to MongoDB
         | instead of say migrating to postgresql going forward.
        
         | Buttons840 wrote:
         | > The engineers are bored and they're rewriting perfectly-good
         | codebases in Common Lisp and OCAML for funsies?
         | 
         | Sounds like the bored engineers need to be allowed to go home
         | early, or have some 20% projects.
         | 
         | Also, as John Gall teaches us with his tounge-in-cheek, yet
         | never-the-less true principles[1] -- a principle so obvious
         | most never give it any thought:
         | 
         | "New System, New Problems"
         | 
         | Can someone please just ask "what do we expect some of the new
         | problems to be?" If you get blank stares and no good answers,
         | then you know they haven't thought it through.
         | 
         | [1]: https://en.wikipedia.org/wiki/Systemantics
        
           | theptip wrote:
           | > "what do we expect some of the new problems to be?"
           | 
           | A name for this I've heard (and use) is the "pre-mortem"; you
           | can get folks in the right headspace for what you are
           | suggesting by asking them to imagine they are writing a post-
           | mortem after the proposed initiative failed.
           | 
           | A good way of surfacing failure modes / potential quagmires.
        
             | Buttons840 wrote:
             | > imagine they are writing a post-mortem after the proposed
             | initiative failed
             | 
             | I was thinking more along the lines of "imagine they are
             | writing a post-mortem after the proposed initiative
             | _succeeds_ ". Even if everything goes perfectly, what do we
             | honestly expect to have at the end? A system without
             | problems? Nonsense.
        
         | carapace wrote:
         | > trying to rewrite Etsy's backend in Scala and MongoDB.
         | 
         | The first Sid came in and wanted to rewrite in C++.
         | 
         | Then the second Sid wanted to rewrite in Java.
         | 
         | The whole time the HTML is 25% space chars, served, sent,
         | received, discarded, because the PHP guy likes deep
         | indentation, and the DB is constantly burning like the sun
         | because all the business logic is in stored procedures.
         | 
         | (That was the problem, not which abstraction the servers are
         | written in, since all they do is pass data back and forth to
         | the fiery inferno of the database.)
        
         | austincheney wrote:
         | You are clearly not a JavaScript developer. It really feels
         | like everybody has just given up and thrown in the towel. There
         | are no good developers, let some giant monster framework make
         | all your decisions, and frequently chase shiny shit. Of course
         | this means starting over, from scratch, in small sections of
         | the product every couple of years.
         | 
         | > The industry constantly mints senior engineers who have been
         | bitten by complexity, but doesn't want to hire them, or listen
         | to them.
         | 
         | Again, in JavaScript land that is not what it sounds like. The
         | industry has minted a bazillion expert beginners who have never
         | moved out of their parent's basement and had to live on their
         | own (in a technology sense). They are fanatically _invented
         | here_ fearing original code more than job termination and now
         | they have somehow risen to make architectural decisions about
         | the future health of your software and business.
         | 
         | I guess they failed to understand that choosing boring software
         | is different than depending on a package manager to write all
         | your software.
        
           | monsieurbanana wrote:
           | I'm not used to see that amount of hate directed to fellow
           | programmers in a hn comment.
        
             | collyw wrote:
             | There is no hate in that comment, just criticism.
        
               | sdfsfsf3kjdf wrote:
               | Extremely shallow criticism based off of little more than
               | personal anecdotes.
        
               | austincheney wrote:
               | Most comments, on any subject, that aren't praise fit
               | that description.
        
             | austincheney wrote:
             | There was no hate intended in my comment, but I can
             | understand how you came to that conclusion. My experience
             | posting on r/javascript of Reddit has taught me some
             | developers are insecure, extreme conspiracy-theory paranoid
             | insecure, about working without their favorite framework.
        
               | spion wrote:
               | How much experience do you have working with JS?
        
               | austincheney wrote:
               | I have been writing it full time about 13 years. I love
               | writing in this language, and TypeScript even more. I am
               | just frustrated by what appears to be some combination of
               | insecurity, false expertise, and a vehement lack of
               | passion in the work force. If I want to be happy I should
               | move on to a different technology stack, but I really
               | enjoy making products in this language.
        
               | BigJono wrote:
               | It's funny, I have about 13 years experience, have been
               | senior in both enterprise, start-ups and everything in-
               | between, and have basically the exact same view about
               | front end dev as your original post.
               | 
               | Except I fucking hate using Typescript, and totally
               | wasn't expecting to see you mention you like it, given
               | all the other stuff.
               | 
               | IME all the same people that overengineer everything with
               | god awful dependencies are the same ones pushing super
               | hard for typescript on every project I'm on. When they
               | get their way (as always, since everything is decided
               | democratically and everyone is dragged down to the level
               | of the worst dev on the team), they write the worst
               | typescript ever. On my last project, one of the people
               | championing typescript defined some constant strings
               | containing css breakpoints as the type 'string | int'.
               | Rather than getting knocked back as one of the dumbest
               | lines of code in the history of front-end, this somehow
               | generated 3 pages of discussion in code review then got
               | left in. I'd give the person a pass, assuming they'd
               | never used a typed language before, except (a) they were
               | senior and (b) they're the one that wanted types. These
               | "seniors" lack even the most basic understanding of the
               | shit they're using, but feel the need to impose their
               | opinions about libraries, tooling and languages
               | constantly.
               | 
               | I don't feel like I'd mind using TS at all on my personal
               | projects, but on work projects with average devs it just
               | adds another entire layer of complexity that they spend
               | hours and days and weeks and months wrangling with
               | instead of writing any code that might be remotely
               | useful, by say, maybe implementing a business
               | requirement, or doing anything that makes the company
               | money instead of pissing away millions in salaries
               | playing npm lego.
               | 
               | Plus, although I'm not familiar with any of it since I'm
               | never the one pushing for TS, and so never the one
               | setting it up, I've seen people spend absolutely
               | ludicrous amounts of time tinkering with webpack and
               | fussing over TS integration with 3rd party libraries and
               | whatnot.
               | 
               | I'm surprised you haven't run into more of these people
               | that just seem to use TS as a complexity multiplier for
               | every bad engineering decision they make. Like spending 6
               | months setting up Gatsby or Next isn't costly enough for
               | them, so they decide to tack on 3 months of TS
               | integration and 'upskilling' for 3000 combo points, when
               | they already (more or less, usually less) know how to
               | write Javascript.
        
               | austincheney wrote:
               | TypeScript is nice when you are working with data
               | structures because everything can be defined as
               | interfaces, including functions and methods. This allows
               | you to identify errors as you are writing code instead of
               | having to execute it. Of course this only works if you
               | make use of strict type definitions. TypeScript is like
               | steroids in that it only makes you more of what you
               | already are, which could be quite negative. TypeScript is
               | not a supplement for missing discipline.
               | 
               | > I'm surprised you haven't run into more of these people
               | that just seem to use TS as a complexity multiplier for
               | every bad engineering decision they make.
               | 
               | AngularJS claims to be TypeScript but most instances of
               | Angular code rarely make use of type definitions, which
               | then defeats the whole point of TypeScript and then only
               | contributes to spaghetti and tech debt.
        
               | deckard1 wrote:
               | > some constant strings containing css breakpoints as the
               | type 'string | int'
               | 
               | yeah this really is the fundamental problem with
               | TypeScript advocates. They seem to come in two different
               | breeds: A) people that would rather be doing Haskell but
               | are forced to use JavaScript because that's where the
               | jobs are and see nothing at all wrong with type inference
               | and error messages that are 10 lines long and completely
               | indecipherable by actual humans, and B) people that have
               | never used a language that isn't JavaScript and have no
               | clue how to structure type interfaces within an actual
               | system (you end up with partial/omit and optional fields
               | every-fucking-where and no rhyme or reason behind
               | anything).
               | 
               | For some stupid reason this entire industry seems to
               | suddenly believe that a 40+ year old debate of static vs.
               | dynamic typing was settled because Microsoft came out
               | with TypeScript.
        
               | spion wrote:
               | This really isn't true, and TypeScript _is_ fundamentally
               | different from most other typed languages (except perhaps
               | for typed Scheme  / typed Racket) and as such is often
               | used in different ways. You should look into the
               | differences.
        
               | [deleted]
        
               | spion wrote:
               | Similar situation here. I disagree that frameworks are
               | the problem though. Build tools, especially related to
               | CSS and assets are IMO the biggest issue. TypeScript's
               | support for monorepos could also be better.
               | 
               | Things have improved a lot since 2009 however, IMO. There
               | was barely a concept of modularity at that time, the
               | tools (e.g. AMD / requirejs / r.js) were way worse and
               | managing the state of the DOM was a pain, jQuery or
               | otherwise.
        
           | mro_name wrote:
           | I always wonder how package managers go along with software
           | engineering maturity level > 1 requiring repeatability.
        
         | chokeartist wrote:
         | > The last line of defense against a rogue engineering team is
         | managers who have studied this stuff. How many engineering
         | managers can spot the common situation "the engineers are bored
         | and they're rewriting perfectly-good codebases in Common Lisp
         | and OCAML for funsies"? And how many know what to do about it
         | when they see it?
         | 
         | Also product managers (myself) who hold the P&L bag and tell
         | folks like them to get fucking real when they are smoking dope.
        
         | jboy55 wrote:
         | "the engineers are bored and they're rewriting perfectly-good
         | codebases in Common Lisp and OCAML for funsies"
         | 
         | Had this literally happen to me, but I was a low level manager
         | and this was happening in another team. One thing I've taken
         | from it, at the time the feeling around Sr Management was that
         | we needed to allow this or we would lose the engineers. They
         | allowed it, and after the conversion, those engineers left to
         | start their own company. The remaining engineers had to deal
         | with undocumented OCaml code and keep it running and were
         | resentful.
         | 
         | I have seen this with React vs Vue, where an engineer not
         | liking React, just did his code in Vue. 'We have to let him do
         | this or he'll leave', but he left on his own accord.
         | 
         | Lesson, stick up for your codebase, and if engineers don't like
         | it, let them leave or make them leave. The other engineers on
         | your team will like it, and some of them will become your new
         | Sr Engineers.
        
         | DC1350 wrote:
         | Anyone in a hiring market that favors the job seekers has to
         | look out for this. Employers typically see the employee as a
         | tool to solve their problems, but I think a lot of managers
         | don't pay attention to employees who use the company as a tool
         | to further their careers. Resume driven development, chasing
         | metrics, and self promotion are way faster routes to progress
         | than actually doing a good job. Getting the job I want is a
         | long process. I'm going to take the most direct route to that,
         | and it's a manager's job to make sure our interests are
         | aligned.
        
         | Nextgrid wrote:
         | In the case of a lot of tech companies, the entire market is
         | broken and leads to weird incentives rarely seen in any other
         | industry: companies that aren't profitable, don't have a real
         | product people pay for, don't have a clear, plausible path to
         | profitability and yet somehow stay in business because
         | investors are happy to burn money.
         | 
         | This completely reverses the typical market dynamics. The
         | company is more focused on catering to investor's wet dreams
         | than actually solving business problems, and "engineering
         | playgrounds" with 3 different programming languages,
         | microservices, AI & blockchain netting them a 5-figure monthly
         | AWS bill is something that appears to please investors more
         | than a rock-solid, "boring" backend. Maybe the complex
         | architecture succeeds at obfuscating the fact there's no
         | business model nor plans for one?
        
           | thewarrior wrote:
           | Job hopping programmers are compensated for how rare their
           | skill is and not how much value they add to the business.
           | It's another flaw in capitalism.
           | 
           | Reward employees a direct and substantial cut of the profits
           | and incentivize to them to stay 5-10 years and these
           | behaviors should disappear.
           | 
           | The loss of job security, frequent job hopping has created
           | more incentives to optimize for the next job switch and not
           | value add.
           | 
           | The explosion of startups also contributes to this. They
           | often have to attract employees by offering the promise of
           | new tech. New tech can propagate these days same way how
           | Bitcoin prices rise. Our industry is in a financial bubble
           | which has created a complexity bubble. The financial bubble
           | collapsing will pop the complexity bubble leading to huge
           | surge in boring / low overhead stable tech.
           | 
           | Not to mention how ageism plays into this. People will hire
           | someone who spent the past 5 years switching between 5
           | different JavaScript frameworks over someone who spent five
           | years writing Java at some boring company.
           | 
           | Most startup employees know they aren't getting rich. They go
           | on to milk the startup for maximum resume points and move on.
           | 
           | The VCs unload these bloated companies into inflated stock
           | markets and the cycle continues. Some small progress at the
           | cost of tens of billions and lots of running in the same
           | place.
           | 
           | Our industry is like some eccentric Howard Hughes drowning in
           | so much money that all we do is come up with ever more
           | esoteric contraptions to escape from reality.
           | 
           | DHH starts really small companies and pays his employees
           | really well and doesn't work them too hard. Employees have no
           | real reason to leave. They see a direct link between the low
           | overhead and their job security and work life balance. Since
           | the team is smaller the work is less alienating / hyper
           | specialized leading to a deeper connection with the company
           | and its customers. Aligning incentives fixes a lot of
           | problems.
        
             | postfacto wrote:
             | Why the downvotes? This comment's dead accurate.
        
           | Toine wrote:
           | Damn, spot on.
        
           | eloff wrote:
           | I don't buy this theory, because I don't think there are many
           | investors that actually care about the tech stack. If they
           | are, I'd say they're bad investors.
           | 
           | You could create a successful company on any tech stack. It's
           | really like trying to invest in a company based on the way
           | they decorate their HQ. Does it matter at all? Maybe only if
           | it's ridiculously extravagant compared to their revenue.
        
             | astura wrote:
             | >I'd say they're bad investors.
             | 
             | No argument from me there.
        
           | tluyben2 wrote:
           | I often wonder why investors love paying 5 figure aws bills;
           | even worse, why they consider lower bills or not using 'the
           | cloud' a sign of cto incompetence. Even if the company can
           | run on $500 hosting instead. Must be because it is easy to do
           | DD on: AWS, check, TS (JS is now a reason to not pass VC dd I
           | heard from friends) check , React check, microservices,
           | check, etc.
        
             | aeternum wrote:
             | Not using the cloud has many hidden risks. You need
             | multiple physical locations for reliability, those now need
             | to be staffed.
             | 
             | If you instead use cheaper 3rd party hosting companies, you
             | may have hurdles to growth and future migration cost since
             | those companies do not have many of the certifications
             | required.
             | 
             | From an investor POV, paying a little extra now is often
             | worth it to reduce risk and remove barriers to explosive
             | growth.
        
             | ksec wrote:
             | 1. They are already an investor in Amazon. They have an
             | interest, both in the actual spending and the trend setting
             | of current and future companies to use AWS.
             | 
             | 2. It is actually increasingly hard to get an industry wide
             | reputable hosting provider ( Cloud, VPS , Metal or not )
             | that many investors could agree upon. Just like you said
             | which makes DD harder.
             | 
             | 3. Amazon actually offer heavy discount and even lots free
             | credit to startup by accredited VC. Meaning the difference
             | in the first few years is actually tiny. And in your
             | example, if it can be run on $500 budget elsewhere you can
             | bet it will literally be free on AWS from those startup.
        
             | dehrmann wrote:
             | There's definitely a stage for startups where the AWS bill
             | doesn't matter because sustaining user growth is more
             | important, but there's also a stage where the company,
             | usually B2B, is trying to improve margins because it helps
             | a lot with valuation.
        
         | jacquesm wrote:
         | My main recipe for crisis management when a company is about to
         | go off the rails or if it has already happened: cut down on
         | complexity. 9 out of 10 times that's enough to get things
         | moving again. Highly frustrating that we keep making these
         | mistakes over and over again without ever learning from them.
         | Complexity has a price, you should only spend it if you really
         | need it.
        
           | aidos wrote:
           | It's hard enough managing code complexity in software
           | projects; introducing tooling into the stack that exacerbates
           | the issues is definitely a large own goal.
        
             | jacquesm wrote:
             | One of the main culprits is often virtualization. Used
             | without a good understanding of what goes on under the hood
             | it is super easy to create a situation that heavily
             | overloads some data path to storage without being aware of
             | it because it's all so nicely abstracted away. Fifty
             | virtual machines trying to access the same storage layer is
             | a pretty good recipe for a disaster.
        
         | spmurrayzzz wrote:
         | This is often a struggle I've had as an engineering manager
         | (though also as an active individual contributor). When I push
         | back on adding new components roughshod to a stack, its often
         | framed as "not invented here" dogma. I certainly can do a
         | better job at communicating my sentiments, because I can and do
         | predictably come off as a "grumpy old man" in these
         | conversations.
         | 
         | But more often than not, this feedback comes from engineers
         | that a) have never been (as you say) bitten by complexity, or
         | b) they aren't in the position to deal with all the negative
         | consequences for those decisions.
         | 
         | There's probably some wisdom in letting your direct reports
         | experience the kinds of failure in making these decisions, so
         | they develop that sort of empathy, but the cost of that failure
         | is sometimes just unacceptable for the business; especially in
         | periods of cash runway constraints.
        
         | twic wrote:
         | > How many engineering managers can spot the common situation
         | "the engineers are bored and they're rewriting perfectly-good
         | codebases in Common Lisp and OCAML for funsies"? And how many
         | know what to do about it when they see it?
         | 
         | I think there is a tension between this kind of actively
         | guiding anti-complexity management and hiring "top talent".
         | 
         | The very best developers are capable, and avoid complexity. The
         | next best developers are capable, and love complexity. The
         | worst developers are not capable.
         | 
         | There aren't enough of the very best developers for a company
         | to plan around hiring only those. So, if you want to hire
         | developers who are at least capable, you have to give them some
         | leeway to make things overcomplicated. Yes, that incurs a real
         | cost to the business. You can think of that as just being
         | another part of their compensation package.
        
           | jacobr1 wrote:
           | Also it is almost never for "funsies," it is instead usually
           | the "wrong solution" to a very real problem. The current
           | system has bad performance, or doesn't support some new use
           | case that is a major company initiative or whatever. But
           | instead of fixing/augmenting the existing system the
           | (probably multiple accumulated pain points by now) are used
           | to justify an overly complex change. In fact the change
           | probably becomes known internally at the company as some
           | silver bullet that will fix all woes further reinforcing the
           | drive to do it.
           | 
           | Even the best developers get ignored if they try to justify
           | pure-tech-debt fixes. So they learn to include fixing tech-
           | debt as part of a fixing a problem that has some _direct_
           | business relevance if addressed. This gets clearly observed
           | and taught to the all tiers of developers further obscuring
           | the rationale for architectural changes from more senior
           | management.
        
             | BigJono wrote:
             | Yeah the key thing here is it's just so easy to spin
             | anything as the solution to some problem the company has,
             | and there's always problems around.
             | 
             | "for funsies" probably isn't that far off. Because the
             | process is more like someone gets interested in something
             | at some point. Then at that point +~1-6 months someone
             | raises a problem and some senior dev gets stuck on the idea
             | that the awesome thing they read about can solve it. Then
             | before you know it whatever tool they want to use has more
             | bells and whistles than the average mars lander and does
             | everything short of curing cancer.
             | 
             | There's rarely any good correlation between the problem and
             | the solution. That gap can just be bridged by buzzwords.
             | The true correlation is usually between the solution and
             | whatever the most senior dev on the team thinks is shiniest
             | at the moment.
        
           | vp8989 wrote:
           | "The very best developers are capable, and avoid complexity.
           | The next best developers are capable, and love complexity.
           | The worst developers are not capable."
           | 
           | It's not always in one's control to avoid complexity. The
           | simplest solution to a problem in a lot of cases may be 2-3x
           | the lift (simplicity tends to require more work, complexity
           | is easy) and thus blocked by the business. A holistically
           | simpler solution may be blocked politically because a certain
           | team doesn't want to own some functionality etc ...
           | 
           | I would say the best developers can see complexity coming and
           | have a healthy fear of it, the medium devs don't mind
           | complexity and the worst devs can't get _anything_ done
           | without increasing complexity.
        
             | ZephyrBlu wrote:
             | It seems like a lot of people are too lazy to simplify
             | things though.
             | 
             | You see this a lot with writing as well. It's very easy to
             | ramble on, it's very hard to concisely convey your point.
        
             | zmmmmm wrote:
             | > The simplest solution to a problem in a lot of cases may
             | be 2-3x
             | 
             | This is such an important point. For whatever reason it has
             | become ingrained in people's heads that the simplest
             | solution must by reductionist logic be the easiest one. And
             | therefore the easiest solution is the simplest one and it
             | is good to be lazy and just introduce complexity
             | everywhere.
        
           | lapcatsoftware wrote:
           | > There aren't enough of the very best developers for a
           | company to plan around hiring only those.
           | 
           | I've seen no evidence that companies are even _trying_ to
           | hire developers who  "avoid complexity". If anything, the
           | interview processes are designed to select for engineers who
           | bathe in complexity. There are so many interviews which
           | consist of "How would you rewrite from scratch this thing
           | that already exists?"
        
             | koonsolo wrote:
             | I'm doing technical interviews.
             | 
             | There is such a shortage of people that know the basics of
             | programming, that selecting for such l33t skills is out of
             | the question.
             | 
             | The hiring process right now is not about selecting the
             | best, it's about selecting those that pass some low bar.
        
               | ZephyrBlu wrote:
               | What do you classify as the basics of programming. for
               | loops and if statements?
        
               | koonsolo wrote:
               | Maybe I exagerated, but you can't believe that 50% of
               | candidates have such a low capability.
               | 
               | "How high do you score your C++ skills out of 10?" "9/10"
               | "OK, can you explain what a pointer is?" blank stare...
               | "no idea"
        
               | ZephyrBlu wrote:
               | I was genuinely curious what you classed as basic
               | programming.
               | 
               | I would definitely consider pointers pretty fundamental
               | if you're a C++ dev.
               | 
               | It is pretty hard to believe that 50% of candidates don't
               | know what a pointer is. I've barely touched C/C++ and
               | still know what pointers are and how they work.
        
               | meheleventyone wrote:
               | > I've barely touched C/C++ and still know what pointers
               | are and how they work.
               | 
               | Congratulations you've successfully triggered the
               | pedantic interviewer. You will now face six questions on
               | pointers in C++ they just looked up each more trivia
               | based than the last.
        
               | lapcatsoftware wrote:
               | Who would pass the technical screen must answer me these
               | questions three, ere the onsite he see.
        
               | ryandrake wrote:
               | I don't know what your company is, but it may not have a
               | reputation for paying well. I've worked both at well-
               | paying FAANG companies and lots of BasicAverageTech
               | companies, and the candidate flow is night and day
               | different. There is no shortage of people that "know the
               | basics." In fact, there is no shortage of really strong
               | candidates. They are out there, looking around to job hop
               | like everyone else. It's just that they are probably just
               | not applying at your company. Not that you can personally
               | do anything about your company's compensation, but that
               | might explain it.
        
               | koonsolo wrote:
               | This is europe, and as far as I can tell all companies
               | here have that problem.
               | 
               | On the other hand, great for us who can code :D.
        
           | koonsolo wrote:
           | There is one problem with this: It will get on the nerves of
           | the developers that love simplicity.
           | 
           | I'm one of those, and it really gets on my nerves when
           | systems are overengineerd, or use tech that has more
           | drawbacks than benefits for our specific case.
        
           | zmmmmm wrote:
           | > So, if you want to hire developers who are at least
           | capable, you have to give them some leeway to make things
           | overcomplicated
           | 
           | This is always a challenge in general - how do people learn
           | the lessons of complexity without creating it and then seeing
           | the effects? I wish there was a better word for it as every
           | person who reads "complexity" says well "duh of course I
           | don't want that" before they then go and manufacture another
           | bucket full of it. Complexity masquerades as simplicity - in
           | the first instance it nearly always solves the immediate
           | problem better than anything else. Recognising the latent
           | complexity of choices is one of the hardest but most
           | important skills to learn.
        
         | mrweasel wrote:
         | That's definitely part of it. I also think developer sometimes
         | aren't sufficiently critical when picking technologies and
         | solutions. They fall into the trap of looking at how bigger
         | companies operate, without considering if they actually have
         | the same requirement, budget or even problem.
         | 
         | For example, you need a search feature. ElasticSearch is big in
         | search, there's lots of article about people implementing
         | ElasticSearch. Very infrequently do I meet people who just
         | starts out with the full text search in their database, or
         | maybe just try something extremely simple, like Sphinx, even if
         | it would solve their problem quicker, safer and cheaper.
         | 
         | It's honestly starting to become a bigger and bigger issue.
         | During the last few weeks I've talked to one customer who is
         | think: Kubernetes. They don't have the funds, staff or need for
         | Kubernetes. What they do need to do here and now is to focus on
         | smarter utilisation of their cloud providers features and
         | reduce the reliance on expensive VMs.
         | 
         | Another customer is going all in and wants to implement all the
         | things. We're talking Kubernetes, Kafka, ElasticSearch and
         | more. They'r are currently running on just a small number of
         | VMs. While their stack does need updating, maybe start smaller?
        
           | stepbeek wrote:
           | Great point. I'm working with a client right now where 90% of
           | the operational pain and low impact dev could be resolved by
           | admitting that the project does not need to resemble a FAANG
           | system.
        
             | yw3410 wrote:
             | The problem is the client doesn't want to admit it - if you
             | ask the client how much volume they're realistically
             | expecting and they insist on a ludicrous number; what do
             | you do?
        
             | deckard1 wrote:
             | One company I worked for went to great lengths to emulate
             | FAANG.
             | 
             | But they were a medium sized company. They were absolutely
             | _crushed_ under the weight of FAANG  "best practices" and
             | technology. They lost time rewriting perfectly fine code.
             | They chased the microservice fad. And they lost market
             | share.
             | 
             | It's in the interest of FAANG to maintain this idea of
             | needing k8s, this massive CI pipeline, certain processes,
             | etc. etc. Because _it slows down competition_. It halts
             | startups. It slows progress. They want to throw as much
             | overhead as possible at smaller companies.
             | 
             | The thing people need to realize is that FAANG are
             | _entrenched_. They are as risk-adverse as can be. They will
             | happily write unit tests and maintain 100% test coverage
             | and do all of this crap because they are more scared of
             | losing market share than innovation. They are in full
             | defense mode. Google is implementing all manner of
             | protectionism to maintain their ad market, for example.
             | Plus, they have the deep pockets to pull it off. Any
             | company smaller than FAANG will sit there with their wheels
             | spinning.
        
         | lumost wrote:
         | It's a mixed bag, if you hire engineers who exclusively want to
         | refine the existing toolchain - you may find that solving new
         | product problems becomes more difficult. You may get stuck with
         | an ancient oracle stack drawing down your entire companies
         | profit margin. Or the team responsible for some technology has
         | ossified so heavily that your launch date is moved to twenty
         | never.
         | 
         | You can immediately spot a misaligned engineering culture when
         | every team has its own tech stack and its own ops as it means
         | that none of the teams trusted each other for anything and had
         | to resort to federation. On the flip side you can se bad
         | engineering cultures where decisions are made based on pure
         | conformity with what was previously built regardless of the
         | problem being solved.
         | 
         | There's a happy middle-ground, a company like etsy with 200-400
         | engineers can happily afford a small team of 2 engineers trying
         | out scala/mongo for something, it might work out, and nuking it
         | from orbit won't cost _that much_ in the grand scale of things.
        
         | jay_kyburz wrote:
         | TIL: Complect: To join by weaving or twining together;
         | interweave.
        
         | rajacombinator wrote:
         | >counting on managers to _defend_ against this behavior and not
         | actively promote and drive it
         | 
         | Good luck...
        
         | madeofpalk wrote:
         | This reminds me of Google's mysterious new operating system
         | "Fuchsia" that they've been developing semi-publicly, which was
         | said to mainly be a "senior talent retention program"
        
           | layoutIfNeeded wrote:
           | It's not really about retaining talent, rather preventing
           | them working for their competitors.
        
         | roenxi wrote:
         | They are fearful and paranoid of making a bad hire _because_
         | they don 't know how to assess whether the engineer is
         | destroying the company from the inside.
         | 
         | If there was a reliable general algorithm to make good software
         | managers would hire lousy engineers then tell them to execute
         | the algorithm. There isn't, they can't. The fallback is to be
         | as picky as possible about who has influence on the software.
        
           | whimsicalism wrote:
           | > They are fearful and paranoid of making a bad hire because
           | they don't know how to assess whether the engineer is
           | destroying the company from the inside.
           | 
           | This is the obvious conclusion. I wonder when investors will
           | wake up to the value of having engineering-savvy management.
        
             | a1369209993 wrote:
             | > I wonder when investors will wake up to the value of
             | having engineering-savvy management.
             | 
             | To be fair, engineering-savviness and willingness to be
             | management (especially the kind of management that are
             | legible to investors) are substantially anticorrelated.
        
         | agumonkey wrote:
         | It seems companies have emergent human emotions, we all do the
         | same, 'worry too much then trust and forget' rather than go
         | gradual and long term.
        
       | nicois wrote:
       | The redis/memcache example doesn't make a lot of sense to me,
       | unless the idea is that a separate memcache instance is deployed
       | alongside each backend, while redis would have been a single
       | instance.
       | 
       | I'm all for boring technology; reimplementing web protocols and
       | semantics in JS is a disaster - and would probably have made a
       | clearer case study than comparing to memory-first database
       | caches.
        
         | the_gipsy wrote:
         | Especially when he said that some people _did_ have to work on
         | that setup to scale it up. Sounds like devops work, so the same
         | would have happened with redis, right?
        
           | CamouflagedKiwi wrote:
           | He covers this - the operational setup & expertise to scale
           | Memcached already existed because Etsy already used it
           | elsewhere. It would have had to be built and learned (mostly)
           | separately for Redis.
        
             | the_gipsy wrote:
             | I meant the part where he talks about maintenance later on.
        
               | ryanbrunner wrote:
               | Maintenance is also something that has to be learned (and
               | "built up" in the sense that you're going to accumulate
               | playbooks and processes over time).
               | 
               | If a team already existed that knew the ins and outs of
               | memcached, knew how to resolve any problems it
               | encountered, already had appropriate monitoring / alarms
               | / etc, that's a massive leg up over needing to do all
               | that with a completely new technology.
        
       | muramira wrote:
       | Lots of people here are shitting on mongodb(maybe rightly so).
       | But I think the biggest problem is that the developers making the
       | decision on what kind of DB to use just do not understand these
       | tools. I always recommend reading Designing Data Intensive
       | Applications as soon as you have an inkling that you will be
       | asked to make such decisions in the near future.
        
         | XCSme wrote:
         | I decided to use MongoDB for a pretty big online multiplayer
         | game and it worked very well, not many issues and the
         | development time was a lot faster than trying to use SQL.
        
       | solanav wrote:
       | I can understand this from the perspective of a manager or
       | company owner. "Happiness comes from shipping products" or
       | "Choose boring technology" make a lot of sense if you are
       | maximizing profit and don't need to work with the tech yourself.
       | 
       | If you are an engineer and you want to try a new technology, go
       | for it. Even if it doesn't make sense. Learn new things, don't
       | stick with the boring tech. Maximize your own happiness and your
       | own knowledge, not the profit of your higher-ups.
        
         | cjfd wrote:
         | Actually, also as an engineer much happiness comes from
         | shipping products. Also, happiness comes from programming as
         | opposed to configure and/or repearing a baroque tech stack with
         | technologies that are not needed anyway but still break every
         | other week. The latter thing comes with anger and the desire to
         | scold (if not worse) the persons who needlessly brought in the
         | complexity. If you want to learn new things there is your spare
         | time where you are welcome to experiment with whatever.
        
         | h3mb3 wrote:
         | > "Choose boring technology" make a lot of sense if you are
         | maximizing profit and don't need to work with the tech
         | yourself.
         | 
         | This view feels so strange to me.
         | 
         | As an engineer, I find myself the happiest when I manage to
         | build the simplest and the most maintainable thing for the
         | business requirements. Extra happy, if it turns out we didn't
         | paint ourselves into a corner when those requirements increase
         | or change.
         | 
         | I just want to minimize my own tears in the future.
         | 
         | > If you are an engineer and you want to try a new technology,
         | go for it. Even if it doesn't make sense.
         | 
         | Imagine how immoral this advice sounded like if it came from
         | the mouth of a carpenter, an auto mechanic or a doctor.
         | 
         | Maybe this just activates my PTSD acquired from working in a
         | startup with a long history of codecampers doing CV-Driven
         | Development.
        
           | DC1350 wrote:
           | Why do you care how successful the company you work for is?
        
         | reader_mode wrote:
         | >If you are an engineer and you want to try a new technology,
         | go for it. Even if it doesn't make sense. Learn new things,
         | don't stick with the boring tech. Maximise your own happiness
         | and your own knowledge, not the profit of your higher-ups.
         | 
         | If you're a responsible adult you'll probably be the one who
         | has to ship the stuff you started with the "flashy framework X"
         | - boring technology is about maximising happiness - it just
         | takes a while for this to sink in.
        
         | FeepingCreature wrote:
         | Learn new things, don't stick with the boring tech, try
         | exciting new products.
         | 
         | Don't put them on the critical path of your company without an
         | exit plan.
        
         | WJW wrote:
         | Boring technology also has the benefit of not waking you up in
         | the middle of the night as often, because most of the weird
         | bugs have been rooted out by other people. This can also be a
         | downside of course, depending on how your particular org
         | rewards "firefighters".
        
         | mikewarot wrote:
         | >If you are an engineer and you want to try a new technology,
         | go for it. Even if it doesn't make sense. Learn new things,
         | don't stick with the boring tech. Maximize your own happiness
         | and your own knowledge, not the profit of your higher-ups.
         | 
         | Yes, by all means, have fun, at HOME, not on company time.
        
         | XCSme wrote:
         | > Learn new things, don't stick with the boring tech
         | 
         | If you had a choice, isn't it better to build cool stuff with
         | boring technology instead of building boring stuff with cool
         | technology?
         | 
         | I think his point was to focus more on the product not on
         | technology, and by choosing a boring technology you will likely
         | have more time and fewer problems shipping awesome products.
        
         | serial_dev wrote:
         | Totally, one can understand both sides.
         | 
         | In my opinion, it also works in the other direction, where the
         | managers push things onto the developers. "Can we use this
         | blockchain thing?", "we need to do AI", "we should use this
         | cross platform mobile app tool I heard and read 3 minutes
         | about".
        
       | golemiprague wrote:
       | Useless advice of the type of "choose the right tool for the
       | task", what is boring? what is the right tool? That's always the
       | question, not the answer. There are also so many other variables
       | to decide success and outcome that I am not sure anyone can point
       | their finger to the technology stack and certainly claim that it
       | is the cause of this or that.
        
       | bottled_poe wrote:
       | Lots of good stuff in this article. The way I read this is that
       | all technology choices boil down to business cases which attempt
       | to predict costs and benefits. I think it is important to note
       | that the pros and cons which get weighed up in such a situation
       | will cut across all aspects of a project - not just hard aspects
       | (eg. Functional needs, performance, complexity, technology
       | maturity, etc) but also importantly soft aspects like
       | compatibility of the technology with team culture, individual
       | personalities, career objectives, etc. It's a complex problem and
       | assessing the value of each pro/con is mastery which I believe
       | requires a vast amount of knowledge and experience.
        
       | yters wrote:
       | My internal devops group has this issue. We had a working system
       | on teamcity and the hashicorp stack and linkerd. Now we are
       | working on a brand new system using gitlab and openshift and
       | istio. Highly redundant with, from my perspective, only
       | incremental advantage. At the beginning I spoke out against this,
       | but failed to convince anyone. Progress has been alright because
       | of our new 10x hire who hated the old tech and loves the new
       | stuff. But once he is out of the picture, we will be maintaining
       | two highly redundant stacks both requiring deep technical
       | knowledge to maintain effectively. I guess bailing is always an
       | option, but I would prefer to be a force for good somehow. Any
       | suggestions?
        
         | alchemism wrote:
         | Welcome to politics :-) My only suggestion is that one must
         | consider both pathos as well as logos when making rhetorical
         | appeals.
        
           | yters wrote:
           | Good point. Pathos is not with the boring old tech approach
           | :)
        
         | user5994461 wrote:
         | I'm surprised one guy can bring in gitlab, openshift, and istio
         | all by himself. They're not small things to setup and to
         | migrate existing software to.
         | 
         | Typically how this goes, few of the existing software migrate
         | to the new stack (it's too much work to migrate and it doesn't
         | work as well). After the guy is gone, you can deprecate the new
         | stack immediately and don't bother supporting it. I've seen it
         | happen a lot.
         | 
         | What you don't say is how large the company is. For startups
         | and small companies, my experience is that every generation of
         | developers (couple years) will rewrite most of everything.
         | That's just how things go in startup, filled by eager young
         | folks who have no experience and build their resume. That's
         | only possible because there isn't that much code in the first
         | place.
         | 
         | Larger companies can be stuck with multiple stacks because
         | there's too many software to migrate and no sucker to do it.
         | Older projects are stable and have no active developers working
         | on them, they're not going to be rearchitectured. Other
         | departments/developers know that they can't trust the shiny new
         | tool from your department, that's going to be deprecated next
         | year, they don't adopt in the first place (a great example of
         | why large companies resist changes).
         | 
         | It's just the state of the industry I guess.
         | 
         | IMO it's crazy how few people working on tools/frameworks can
         | inflict migrations on a hundred developers/projects (thousands
         | in larger companies), often for no benefits.
         | 
         | I realize this doesn't answer your question, how to help?
         | 
         | No idea. Would be nice to cancel projects early before they
         | reach that stage. It's probably too late now.
         | 
         | What you can improve is your perception. If it makes you feel
         | better, one pro of all this churn is that there are many more
         | jobs, doing rewrites over and over again. It's nice to have a
         | job in the current climate.
        
           | yters wrote:
           | He is handling the integration. The maintenance of the
           | products falls on the ops team. He is doing a great job. I
           | just don't think he will stick around to maintain things once
           | he is done, and we will have two stacks to migrate and
           | maintain.
        
       | nathanganser wrote:
       | And then it read "Attention is precious" and I realized I was
       | losing my time and should got back to more important stuff :P
        
       ___________________________________________________________________
       (page generated 2021-02-21 23:00 UTC)