Slashdot Mirror


Why You Should Choose Boring Technology

An anonymous reader writes Dan McKinley, a long-time Etsy engineer who now works at online payment processor Stripe, argues that the boring technology option is usually your best choice for a new project. He says, "Let's say every company gets about three innovation tokens. You can spend these however you want, but the supply is fixed for a long while. You might get a few more after you achieve a certain level of stability and maturity, but the general tendency is to overestimate the contents of your wallet. Clearly this model is approximate, but I think it helps. If you choose to write your website in NodeJS, you just spent one of your innovation tokens. If you choose to use MongoDB, you just spent one of your innovation tokens. If you choose to use service discovery tech that's existed for a year or less, you just spent one of your innovation tokens. If you choose to write your own database, oh god, you're in trouble. ... The nice thing about boringness (so constrained) is that the capabilities of these things are well understood. But more importantly, their failure modes are well understood."

9 of 232 comments (clear)

  1. A Corollary for Code by Dutch+Gun · · Score: 5, Insightful

    A personal corollary for code related to this theme is to always try to make the code I write as "boring" as possible. I've found that programmers often get themselves in trouble by trying to be "clever", which often makes for horribly unintuitive or unnecessarily complex systems. I've heard people asking about how to perform crazy language tricks and I nearly always think to myself "My God, why in the hell would you even *think* about doing something like that?" Such things nearly always point to very fundamental flaws elsewhere.

    --
    Irony: Agile development has too much intertia to be abandoned now.
    1. Re: A Corollary for Code by nine-times · · Score: 4, Insightful

      I'm not a programmer, but more in IT support, and but it seems like there's always someone doing the same thing: trying to be clever. Everyone wants to be a cowboy. Everyone wants to do something badass that serves their ego.

      more often than not, doing a good job is more about paying attention, being thorough, and doing the obvious thing. Listen to the user, read the error messages, look in the relevant log file. Tell the user what to expect, and then keep them informed until the problem is resolved.

      I wonder if that's that it's about in all professions. Maybe most jobs don't require special genius, but most of the secret is just being thorough and conscientious, and using some common sense.

  2. No one ever got fired for buying IBM by TWX · · Score: 5, Insightful

    Mature technologies are proven. They've gone through their growing-pains. They may have limitations, but those limitations and workarounds are usually well known by seasoned professionals. There's a reason why COBOL, Fortran, and RPG are still in use in business applications almost sixty years after their initial development, because they reliably work.

    I've tried to work with NodeJS projects for production. It's a nightmare. NodeJS itself is revised too often, the actual project is revised too often, and the dependencies became a nightmare. It's not mature enough and not worth it.

    --
    Do not look into laser with remaining eye.
    1. Re:No one ever got fired for buying IBM by tnk1 · · Score: 4, Insightful

      There has to be a balance. You need to move forward, but don't just change to change. The article suggested one method of moving forward while remaining stable.

      I understand as well as anyone that the world moves and sometimes even perfectly functional applications need to move with it, despite the fact that nothing is wrong with them. There are end-of-life issues with hardware. The code has gone missing. Customer support shuttered ten years ago. You have one greybeard who knows how to operate or make any changes to the app, etc.

      That said, there's a lot of stuff out there that is seen as "old" which is still fully supported and stable. It is getting security updates. It can handle large scale deployments. It is free and open source, &etc. You don't have to move away from that. You probably *shouldn't* move away from that.

      Fashions in development don't always require you to have followed the path all the way to the endpoint. You holding back now might mean that you can jump ahead two steps when the turn for the next component comes up. You don't need to track the curve constantly to be able to join everyone at the innovative end after a hop.

      Most of this stuff is a fad that will add more flash than actual feature set. Wait for two fads to pass and you might now have a real set of features to sink your teeth into. And in the meantime, you have had a stable and well supported application to build on.

  3. Web is a mess by Anonymous Coward · · Score: 5, Insightful

    I've recently been getting more heavily into javascript (proper apps, not just UI animation snippets). The whole scene is a mess. You try to learn about good code structure and you've got crockford saying use constructs to simulate classical OO and then a whole lot of other coders giving you really good reasons to use prototypical inheritance and stop trying to simulate a classical language. Then a whole other bunch are telling you to use coffee script but others point out the difficulties debugging it so then you should use typescript because it will eventually be ecmascript6. Once you get your head around the code structuring options, you then have to decide whether to just use jquery or an mvc like ember or angular. And when you choose a shiny new bbc because it is easy you realise that two way data binding makes your code super slow and start having to hack away at it to get it working on a mobile targets. Oh and don't forget the TDD framework unless you go for BDD because that is the new thing. And then do you use the closure compiler, requirejs for amd or should you even use amd at all.

    I will happily go with tried and tested, if only web developers would stop reinventing things every six months.

  4. Re:I concur! by Lodragandraoidh · · Score: 5, Insightful

    I would never describe Perl as boring. Annoyingly random, and obtuse, but never boring.

    --

    Lodragan Draoidh
    The more you explain it, the more I don't understand it. - Mark Twain
  5. Re:More... by narcc · · Score: 5, Insightful

    Oddly enough, I've seen that cause more problems than it's solved.

    It's often misinterpreted, in the same way you so conveniently put it, which is then used to justify some pretty awful decisions regarding third-party libraries. I'm convinced that this is the leading cause of bloated software.

    Even when used correctly, I've seen some pretty impressive code-contortions to avoid even a very small amount of duplicate code. Sometimes, it's okay to just do a check twice. As long as the code is easy to read and modify, you're fine. Really.

    But that's the problem with programming, isn't it? It's little more than wishful thinking and folk-wisdom. That would be okay (it's an art, after all) but too many developers have deluded themselves in to thinking it's more in-line with mathematics or engineering. They've convinced themselves the cute little acronyms they repeat to one another have some objective, rational, basis and must be obeyed at all cost.

    It's silly, really.

  6. Re:There is art in engineering by Puff_Of_Hot_Air · · Score: 5, Insightful

    Yes, but his brilliance was in minimising the number of components required to perform a certain function. His "art" was in solving two pragmatic problems. a) Correct function of device and b) minimising the costs (components). The constraints (physical and budgetary) are what channeled his creativity.

  7. The normal and the revolutionary aspects by m.shenhav · · Score: 5, Insightful

    You have a good point, but only most of the time.

    Thomas Kuhn, in the context of science, spoke of 'normal' and 'extraordinary' science. Normal science was as you described; you stay in the paradigm and follow the conventional methods for resolving issues. However, these methods did not appear out of nowwhere; somebody was being a clever cowboy and decided its time to do things different. This is where revolutionary science came in. Of course most of these innovations - like any innovation - fails miserably. But if it wasn't for all the failures we would never have the successes that change paradigms and got us to the methods we use today.

    And I think this dichotomy does apply to almost every human endeavor.

    That said, for normal day to day operations, being a cowboy ALL the time is foolhardy and dangerous. But for people to NEVER have a little bit of an experimental and innovative mindset is also risky in its own way. Sometimes this is balance (known as a bimodal or barbell strategy) is maintained within a single individual by balance of exploiting the traditional and exploring the novel; sometimes its divided between individuals, with a good balance keeping more people stable than unstable.