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."

23 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. Re:A Corollary for Code by readin · · Score: 4, Informative

      I was recently explaining to some students why I don't know about the trickier parts of the language I use everyday. I don't use those tricky parts and I would chew out anyone on my team who did, so the precise details of how those parts work never come up..

      --
      I often don't like the choices people make, but I like the fact that people make choices. That's why I'm a conservative.
    3. Re: A Corollary for Code by tnk1 · · Score: 3, Insightful

      There is a lot of flash these days in coding. Someone is always trying to sell their wares to a venture capitalist. To do this, you have two options.

      First, you can write a stable application in something boring and then develop a track record of excellent service underlying an elegant and interesting design that serves a purpose that can make a profit. This actually does get attention, but not as commonly as....

      Secondly, you come up with some glitzy idea, and attract elite developers who really want to do whatever the hell strikes their fancy. This works... mostly because they really are elite developers, and their team is young and motivated. They can use some random bleeding edge idea because they are good enough to make it work, and they may have even had a hand in developing the new ideas personally. When that fails, they are willing to work like coke addicts to get it done to a point where it can be sold.

      There is nothing inherently wrong with either option that rehab won't solve.

      The real problem is when everyone else tries to be like the people in the second example, when what they really need is to be the people in the first example.

      Look into a mirror and stare at yourself for a minute. You're competent, maybe even excellent at your job as a developer. Your team is solid. You're just not that kind of elite, however. You dearly love the flashy stuff, but you don't quite understand it as well as you'd like. Instead, you've been working in X technology for a number of years. You know how it works and so does your team. You have a track record of success. Boring, but successful.

      You need to be a professional and understand your limitations. If you do, you will be part of a team that makes things happen. If you don't, you're going to make a mess. Don't pick sexy unless you really have what it takes to back it up. That is all.

    4. Re:A Corollary for Code by Anonymous Coward · · Score: 3, Interesting

      "Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?" - Brian Kernighan

  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. Plain old boring rules by El_Oscuro · · Score: 5, Interesting

    In about 1996, Oracle introduced the "Oracle Webserver", allowing you to serve dynamic webpages generated from stored procedures in the database. The beauty of this is that all of your website code is in the database, making it centrally managed and all application security logic is enforced by the database. The webserver is just a dumb client with no code, and has no permissions on any database tables.

    In 2001, it was now a mod for Apache and as since been opensourced (mod_owa). I convinced our client try it for a central website that we were developing, as the middle tier crap they were using didn't work. That system went live 2 weeks later with a few very simple webpages. It has been in production ever since and the website has over 50k users and 20+m hits a day.

    --
    "Be grateful for what you have. You may never know when you may lose it."
  4. 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.

  5. I agree .. BUT .... by shri · · Score: 5, Interesting

    I think it is important enough to have atleast one 'skunk-works' type project that every developer needs to work on, just to keep up with what will be boring a year or two down the road.

    I avoided "not boring" for a couple of years and for the last month, while I look at hybrid mobile apps, I am stunned by my lack of knowledge and the abundance of terms, concepts and technologies that mean nothing to me ... angular, ionic, grunt, promises, JSX, reactjs, compass, gulp, firebase... the list could go on and on and on, these are just things I've started researching over the last few weeks, to make sure I make the right choice.

    Every organisation needs a "not boring" slot of time for their developers. Not for product that needs to ship NOW.. but for stuff that may need to ship next year.

    1. Re:I agree .. BUT .... by Lodragandraoidh · · Score: 3, Informative

      Every organisation needs a "not boring" slot of time for their developers. Not for product that needs to ship NOW.. but for stuff that may need to ship next year.

      /agree/

      Except I would add: "may never ship at all."

      The key point here is you aren't betting the company on it, but you still should be doing it. Every company should encourage innovation - and even if the company isn't willing to bet any cash on it. Another way is to encourage your developers to spend some time on their own personal FOSS projects. What this gives you is experience - and from a risk vs. reward perspective, success is attained not by how much working (boring) code you produce, but really how many times you try something that fails, and get up again and keep pushing on with new/modified ideas based upon this experience giving your customers real value. Companies without this perseverance will fail, or at best will be mediocre.

      On the flip side - if your core business (the part that you are trying to show your customers you are innovative and a leader in) becomes too boring - and by too boring I mean while it may 'work', it may not do what a customer really wants/needs - then you run the risk of losing those customers to someone who will try and be willing to fail.

      Just like all oversimplified prescriptions, the article's concept does not take into account the nuances of business goals, risk aversion level, available human factors and skills, and so on.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
  6. Boring lasts by tsa · · Score: 5, Funny

    It's like Rincewind said: "I like boring. It lasts."

    --

    -- Cheers!

  7. I concur! by Rogue+Haggis+Landing · · Score: 4, Funny

    As someone who has a lot of Perl on his resume, I heartily endorse companies hiring people who work with boring old technologies!

    1. Re:I concur! by sg_oneill · · Score: 5, Funny

      As someone who has a lot of Perl on his resume, I heartily endorse companies hiring people who work with boring old technologies!

      As a python coder I'm somewhat pleased that my boring old technology is currently seen as flashy new technology right now.

      Grunge, is back in fashion, apparently.

      --
      Excuse the Unicode crap in my posts. That's an apostrophe, and slashdot is busted.
    2. 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
  8. 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.

  9. Re:Do it for the ops people by Anonymous Coward · · Score: 4, Interesting

    Yes. I know this for a fact. I'm going through this right now.

    Oh, this new NoSQL database is SO fast and wonderful. Except you can't get it to replicate without an Enterprise version, the price of which no one actually calculated into the cost per user budget. Because it's free and open source, except when it's not.

    And you need to have at least three servers to run it even without replication. And no, I am not talking about sharding. I mean running a standard one instance of this garbage requires three instances.

    Mind you, if you want NoSQL, there are versions out there that have replica sets for free and somehow manage to complete all standard operations with only one server. But we can't use those. No. They're too boring and predictable and STABLE. Not exciting at all.

    Not blaming the current developers, who are left with the pile of shit that the other developers made while having all sorts of fun trying shit out and making everyone else figure out how to actually make it *work*.

    The last job, they were circling the toilet bowl because we couldn't finish features. Yet their brilliant idea was to switch their technology, and even change from svn to git, and also chef to ansible. This for no discernible reason, other than the fact that it just seemed like a good idea to them at the time.

    Bear in mind, I understand why you might want git or ansible or whatever new libraries, but I'd think that we could wait to redesign our whole build process and switch to a new version control system until after we had enough finished features to attract a customer. Or something.

    A lot of good people lost their jobs because some architects and a certain CTO wanted to wank off about how bleeding edge they were. Of course, that dumbass still has a job. I hear they're considering a mobile app now. Or something. Good luck with making an app when you laid off all the testers.

    With all that talk, you'd think I had gotten laid off. Luckily I managed to get the hell out, but all the people I worked with there got canned a few weeks later. And none of them were fuck-ups. That is the price of not understanding how to maintain a solid foundation to build a project on.

    So yeah. Boring. Functional. Boring tech behind your app or site doesn't make it a bad. Bad design does that. Lack of features does that. Failure to understand operating an application on something more complex than your MacBook does that.

    The fact that you using the latest thing does NOT make your app good without you knowing what the fuck you are doing.

  10. Re:More... by Puff_Of_Hot_Air · · Score: 5, Interesting

    Personally I think that one of the problems with software development is that we don't treat it like engineering enough. Not engineering in the sense of building a bridge, but engineering in the sense of design (designing a circuit for example). Engineering is inherently a pragmatic discipline where creativity is constrained by various physical, budgetary, and time constraints. Because software has less of the physical constraints, I think that the "art" side can get a little carried away at times. But the main issue is lack of discipline; and that is more of an artefact of the culture that can be associated with software development, rather than anything inherent in the work itself. I'm biased (with an engineering background), but I think that many software companies could benefit from the attitude that comes with engineering.

  11. Re:Absolutely by tnk1 · · Score: 3, Insightful

    Maybe it *is* too innovative.

    Its not a matter of Lotus being good. Its a matter of what you can do with limited resources.

    If Lotus Notes (shudder) is working for you at the moment, and you really, truly needed to move to node.js, nginx and S3 for some reason, then you need to weigh all the effort that goes into making all of those as stable as you need them to be in order for them to be an actual improvement.

    New things need not only code, but tests. If they go into production, they need the operations team to know how to tell if something is wrong with them, and how to fix it. Preferably without waking you up at 4am each time. More preferably with them able to proactively watch for signs of imminent failure and deal with it well before it becomes an issue.

    All of that sort of understanding is more than just what it takes to check in some code and some unit tests.

    The realistic situation in your scenario is a little backwards because I don't know of any reason to switch to the other three techs without putting Lotus Notes out of its misery first. There does need to be a realistic understanding of priority. What is not-so-good and what is a complete clusterfuck, like Notes.

    You can't do everything you want. If you try, you're going to create problems unless you can increase resources. If you can't increase resources, you need to wait.

  12. 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.

  13. 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.

  14. Re:More... by silentcoder · · Score: 3, Insightful

    >developers have deluded themselves in to thinking it's more in-line with mathematics or engineering

    Except of course that it IS mathematics. Indeed if engineering is the application of scientific knowledge to the solving of practical problems -then programming is the engineering of the science of mathematics.

    From the point of view of a computer every program is just one big number. You can reproduce any and all programs that have or ever could be written by simply counting in binary for long enough.

    Yes, count long enough and check the results at every count and eventually you will have a number that, if executed, is microsoft outlook.

    That is, however, a rather inefficient way to find useful numbers - to get to outlook THAT way would take centuries even on the fastest computers we have.
    So what is programming ? It's a sophisticated way to take shortcuts, to find useful numbers without counting through ever possible number (most of which are not useful at all - i.e. if you dump it as a binary to a file it wouldn't run).
    That sophistication of figuring out what the program should do first (i.e. defining what the number should be useful for) and then counting in large chunks (i.e. writing components that help satisfy that over-all design goal) is a form of engineering.
    It's a highly creative form of engineering and it is very much an artform too. Art and engineering are generally much more closely related than we usually think: just consider the Eiffel Tower, or ask any sculpture about the constraints the laws of physics place on his designs and choice of materials.
    Programming, at least at it's current stage of knowledge, is still at a point where the line is extremely blurred and techniques from both art and engineering can be very valuable.

    Over time we may find that it becomes more the one or the other, depending on what produces the best results the most efficiently - but I wouldn't trust any wager on which way it would ultimately go. I will say it would never be just one or the other, by it's very nature it will always have at least some elements of both.

    --
    Unicode killed the ASCII-art *
  15. Re:More... by TheRaven64 · · Score: 3, Informative

    The original justifications for hating goto referred to a non-local goto (or, exceptions, as the kids call them these days) which made it very difficult to reason about control flow in a program. The new reasons for hating goto in language like C/C++ relate to variable lifetimes and making it difficult to reason about when variables go out of scope.

    --
    I am TheRaven on Soylent News