13 ms·
Why does it take so long to build software? (2020)
- 01000010x 6y agoAlso, user needs are evolving constantly (or are identified in an iterative cycle) and code is structurally not very good at changing constantly.
- cosmotic 6y agoMore so than user needs are user expectations, which are often just following trends set by larger software companies with much larger budgets. And just like other trends, they rapidly change and are fleeting.
- SulfurHexaFluri 6y agoSome interesting thoughts in here. I guess the main thing is that there is basically infinite demand for more things in software. You can take almost any feature from any product and come up with new things you would like it to do that would take entire teams of developers to work on. Software will never get quicker to develop because we will always request the absolute maximum amount of features that the market can stand to afford. Basically every area has exploded with more features and is still way way behind what people would ideally want. Just look at the difference between Discord and IRC.
- NalNezumi 6y agoI mean.... isn't this true for hardware too? Razors today looks very different from the ones when it was invented. Same goes for vacuum cleaners, cars, tools for construction/manual task, the list goes on. The only notable difference is that each iteration of hardware have a vividly clear version start/end date compared to the rolling versioning of software. First vacuum cleaner was invented 1908...
- canofbars 6y agoEverything is improving I guess but there is very little relative investment in razors. They look different but arguably function worse than the original style double edge. Vacuum cleaners have had a bit of innovation but no one is really desperate for a better vacuum cleaner unlike software. Also many of these hardware items have basically reached close to their peak form. You can't really make a radically better bicycle because we have already reached almost the best design. With a team and a few years you can usually obliterate the leading software product in most areas and with a large team you could completely revolutionize it since there is so much easy target improvements to be had.
- js8 6y agoBut do we actually have more features? I don't think Google Docs has more features than Ami Pro. I think the problem is the modern focus on adding features, without consideration whether and how these compose. Not all features are equal - some can be used as a foundation on which more can be easily built, while some are a detriment to that. Just adding features without architectural consideration leads to - surprisingly - bad architecture.
- MattGaiser 6y ago> Just adding features without architectural consideration leads to - surprisingly - bad architecture. But you don't sell architecture. You sell features. And people write their own Google Docs features. I have spent a bunch of time coding up things for that.
- RandallBrown 6y agoDid Ami Pro let dozens of users around the world edit the same document at the same time? Some of them being on cell phones? Did it automatically store your document somewhere that can be accessed from any computer with internet access? Seems to me like we really do have more features.
- badsectoracula 6y agoI think a problem here might be that those aren't exactly "Ami Pro" (or word processor in general) features, they're just tacked on the word processor even though it has nothing to do with word processing (even the multiple editors at the same time is essentially about having multiple views - not too different than opening two MDI windows in Office 97 or whatever with the same document but different positions - that happen to have input/output from across the network). Some of that can be done in an agnostic way by pairing Ami Pro with something like Dropbox. But ultimately for better use (and having applications focus on the stuff they're supposed to be about) the underlying system should allow for such uses - after all one of the original ideas behind Windows was to avoid having every application reinvent its own UI. But we just seem to be stuck around that point in most OSes (Cocoa probably being the exception of an OS framework that provides more than the basics)... if anything we're regressing with every application (on the desktop at least) ignoring the OS GUI and doing its own anyway.
- loteck 6y agoI guess the main thing is that there is basically infinite demand for more things in software. Law is very similar to software in this way. They both also take a long time to write & are never actually "finished."
- pm90 6y agoThis is an interesting analogy. However, I would argue that Law is less constrained by the laws of nature. If a program is broken, even the best programmer in the world may not be able to fix it if they can't diagnose the underlying problem. Whereas in law; there is no such problem. If a law is found to be bad, you change it. Most reasonably competent lawyers could come up with a solution. Not to say that creativity and intelligence isn't required, the constraints are just different. (You do hit the laws of nature at some point, but I believe there are guardrails in law that prevent this from happening; e.g. no judge will sentence a person to run a million miles even if some combination of inane laws may require that as punishment).
- Animats 6y agoTry building hardware. That's harder.
- js8 6y agoI think Paras Parmar's comment on that page is spot on.
- holografix 6y agoThe pace of change is too quick and the permutations of how to do X are necessarily too numerous. As far as I know there is no “standards body” that governs these things across organisations. Ie: if you’re developing a web app that needs to poll other systems for data every X minutes there should be a standard that governs the best way of doing this in the major 5 languages. Taking into account SRE principles like logging, scaling, security etc. And some clear code examples using the simplest and least OO-functional-prototypical-new age code possible
- username90 6y agoWhat is the value of the current pace of change though? We are using billions of developer hours every year to keep up with all the changes, where is it going, why do we need to spend so much time changing things? Changing things doesn't just force people to rewrite, even worse it forces people to relearn instead of achieving mastery. How many percent of developers understand how everything in their stack works to such a degree that they'd be surprised if there are any problems when they test things? Basically nobody, yet it isn't really an unachievable goal. Why can't a web developer reach that point after 5 years of full time? Simple, it is all the damn changes to everything that happens constantly. It is so bad that most seems to think it is impossible to master anything in software engineering, yet if you just pin down the versions of all your dependencies and work like that for a few years everything will be crystal clear, that is how the human brain works.
- jbverschoor 6y agoFun fact.. it doesn’t! Some of the most widely used software has been created in a few weeks or days.
- joubert 6y agoHave they released subsequent versions?
- laurent92 6y agoGit: 2 weeks by Linus Torvarlds, Javascript: 10 days (Brendan Eich?? not sure) Both have had iterations. Git, because the original command line was awful. JS had to be reimplemented with its weirdities, because websites were already relying on them (and this is why we get the WAT demo: https://www.destroyallsoftware.com/talks/wat https://www.destroyallsoftware.com/talks/wat ) I’d day, in 10 days, what you build is an excellent architecture for a project used across the world for half a century. But just the architecture. The features come later. Perhaps it’s limited to 10 days because that is the span of medium-term memory and it matches the maximum number of concepts in the human mind?
- kaba0 6y agoBoth of them achieved a minimum viable product stage at that point. Git is good today because of the many many additional time that were spent on it, and a programming language is not software in itself. I am fairly sure that we don’t use a thing from Eich’s implementation. And the building of V8 engine for example started in 2008! (And even the language had to go through multiple revisions to make it useable, which it became only recentishly) Noone will write a VM with state-of-the-art GC, JIT compilation and the like in 2 weeks from scratch, and this is an example of a complex application.
- deleted 6y ago[deleted]
- tcbasche 6y agoCreated, yes. But maintained, built upon, iterated over and improved?
- karmasimida 6y agoDoes it? I mean it takes years to shoot a film or write a book, as creative activities, I don't see the evidence that software is more difficult or time consuming in that regard.
- mstipetic 6y agoIt's because most software developers add negative value. Most not them aren't investing in learning at all and are just playing around and understanding things on the surface level. I'm fairly certain it takes much more learning and effort to keep up to date as an accountant than a software engineer. I've been getting into elixir and was very sad to realise that a lot of the best practices have been enshrined into the erlang otp library for 20 years and we've forgotten about it. Think how many engineers you know that can reason well about db indexes or could implement something like redis given enough time. On the one hand it's fairly depressing, on the other hand it makes sense from the incentive structure - business people treat them like "nerds" they're not on the same career path as someone in management, PMs come from weird professions that have nothing to do with software and are focussing on weird scrum processes and jira tickets... At least that has been my experience. I've seen massive amounts of wasted resources that has made me a bit jaded
- ardit33 6y ago"it takes much more learning and effort to keep up to date as an accountant than a software engineer" you are wrong in many levels.... accounting is a field that moves slowly and it is highly regulated Software is still in the wild wild west phase, and it catches and loses trends all the time. We are currently using languages and platforms that didn't exist at all 10-12 years ago, yet, in 10 years whatever you are doing now, might be completely obsolete and you have to retrain-retool.
- mstipetic 6y agoWhy is that? It's because we don't learn from the past and keep thinking we're the smartest and have to reinvent everything with every new generation of developers. I've worked at a company where elasticseatch, postgres, message queues, custom microservice platforms, custom cicd platforms were deployed for a load that could fit in ram of one machine. With maybe 10 customers per minute. And you're wrong about accounting, new laws and regulations are being passed constantly and one has to keep up with them all the time
- 6y ago
- f430 6y agobecause software is mostly about learning and working code is merely a side effect of the latter.
- boris 6y agoOne aspect that is not mentioned is that we build software on top of an ever-increasing number of first-to-market, low-quality, building blocks. And by low-quality I mean "worse is better"/MVP/"everyone makes mistakes"/"leaky abstractions"/etc -- pick your favorite. As a result, we spend more and more time dealing with someone else's mistakes rather than making forward progress.
- lisper 6y agoI dunno, there's a lot of really high quality stable software out there. It's not all crap. But as someone who has had the luxury of taking time to do things the Right Way let me tell you from firsthand experience: doing things the Right Way is incredibly hard in no small measure because figuring out what you actually want to do is incredibly hard. There have been many times when I thought I was building something for the ages only to discover that I had made a bad assumption, or technology changed, or the market changed, or my own desires changed. The process of meeting human needs is messy because both human needs and the tools we have at our disposal are a constantly moving target.
- _ph_ 6y agoYou are right, not all is crap. But too many people are not aware how much is crap and are pretty naive about using libraries. I don't think it is an accident, that e.g. the Java universe has uncountable numbers of libraries and Java projects have unbelievable many dependencies and e.g. Lisp has a percived lack of libraries. There are many reasons for that, but also, that Lisp programmers tend to rely on libraries less.
- lisper 6y ago> Lisp has a percived [sic] lack of libraries Lisp is also widely perceived as an interpreted language. Willful ignorance does not make reality even if it is widespread.
- xupybd 6y agoWow, after your comment about having the luxury of taking time I wanted to find out how. I found your website in your bio. Very impressive and very cool to see even huge successes find the time to comment on HN.
- nsm 6y agoI really like Dorian Taylor's analogy of software to movie production: https://doriantaylor.com/softwares-ailing-mythology https://doriantaylor.com/softwares-ailing-mythology Their point is that software is a refinement of a process to the point where it can be executed by a computer (in a generally bug-free manner). Just like a movie spends a lot of time in pre-production and writing the script, we must spend a lot of time on refining our own understanding of our processes, before trying to explain them to computer via code. The faster one jumps to code, the more likely one is to have to go back and fix things, delaying the delivery of software. So software is more similar to writing novels or movies, than construction, where a lot of time is spent just thinking through things, and going through the ups and downs of "writer's block". Perhaps one way out is to loosen the delineation between making software and using software (a la spreadsheets, Smalltalk) and moving towards more programmable environments, so one doesn't deliver software, but rather allow users to build their own as part of refining their processes.
- mstipetic 6y agoYou're confusing iterating towards a product-market fit and the craft of building things. Most time (in my opinion) is spent on engineering circlejerking in the background of the product instead of delivering visible/valuable parts. To continue your analogy it would be like hiring script writers, camera operators and editors basically off the street that have never worked on similar projects, raising money and hiring more of them when things don't go as well and spending most of the time figuring out how does one make a movie instead of focusing on the creative parts
- known 6y agoExpectations != Requirements
- TuringTest 6y agoWhich points straight to the problem: the tools for expectation management, requirements gathering and design validation are severely lacking. Applications should be built on fast iterations with the user present, until each detail is perfect and the full workflow is validated to be as useful as expected. Only then should engineering issues be addressed, to make the tool robust and fast.
- marklit 6y agoAren't most developers in the world paid a salary or day rate and thus are paid for their time? What incentive is there for them to "hurry up" rather than sandbag?
- ohadron 6y agoI want to say stock options, but I don’t really think it achieves this goal.
- fxtentacle 6y agoI concur. Stocks are too far away from the actual software. The CEOs stupid pet project might well ruin the company's financials, even though all of the engineers on the core team did a fantastic and highly profitable job. So stocks are more bets on the CEOs performance than on the engineers'.
- fxtentacle 6y agoPlus they usually get no financial compensation for the extra work of making things work well. There's a minimum quality level required to not get fired, and I wouldn't be surprised if that's exactly what most employees deliver.
- mrwoggle 6y agoOf course, why go through the troubles of putting in the extra hours, if there is no financial compensation or appreciation? Personally, I would just optimize stuff or propose new features for a product if I would learn something/gain experience out of it.
- errantmind 6y agoAgreed. I would go further and say that is true of any salaried employee who has no significant stake in the business
- godot 6y agoOn a somewhat separate topic and line of thinking than the post (Great article btw, I agree with it completely) -- I've often thought that, as a software engineer, whenever giving estimates, any number of management folks must be thinking "why does it take so long?". And I think part of the reasons is this. If you simply _ignore_ most of the accidental complexity, you often can build 80% of the functionality of a requested product/feature in 20% of the time or less. What's more, for any upper management who's worked in the industry long enough, over the past two decades, they've most likely worked with some whiz kid who had done it (I was one myself in my early 20s a decade+ ago) -- so they know it can be done and have witnessed it. Let's say the requested product is some CRUD web app. At one point in their career, this executive worked in a growing tech startup and on the team was a talented fresh grad. That engineer built a product very similar to that entirely, front and back ends, in two days. 15 years later you're working in a different company as an executive and you're talking about building some CRUD web app just like that. Why is the estimates being given by the dev team 4 weeks with 4 developers? What wasn't seen and remembered was that the one built in two days by the smart kid had no unit tests (or any kind of tests), didn't cover many edge cases (at least in its first version), a UI with barebones CSS, no responsive layout, no component-based frontend (e.g. React), no scalability concerns, etc. But all the requested functionality is there, it's demo-able, and usable even. A similar product is being requested now, but it needs to be built to withstand today's quality standards, robustness, maintainability, etc. So unit tests are part of the requirements, a component-based frontend is needed for maintainability, you have to handle mobile, etc. It's pretty much all the same points the author is pointing out about accidental complexity; just kind of showing why someone would ask that question.
- errantmind 6y agoIt sounds like the kid in your example built an MVP product for the executive to demonstrate/test business value. Expectations matter. If the executive thought that was a finished product and is holding everyone to that standard, they were mistaken. I don't see any reason to write extensive unit tests, a component-based frontend, responsive layout, and scalable architecture for the first draft of a product. In my opinion, the first draft of a product in a business environment should test business value of the idea as rapidly as possible, as many of the ideas are half-baked
- fxtentacle 6y ago"the last 20 years has been the drastic reduction in the ratio of essential to accidental complexity" I know this is nitpicking, but the author is using mathematics as an example and then uses ratio the wrong way... The point he/she is trying to make is that tools got better. That would mean the accidental complexity goes down. That means the ratio of essential to accidental complexity goes up.
- Silhouette 6y agoI wondered about that as well, because much of the content in the middle of the article, where the author lists changes in the industry such as automated infrastructure and frequent deployments, would suggest to me that accidental complexity really has increased and the author's statement is actually correct as written even if that wasn't the intent.
- mrmonkeyman 6y agoIt doesn't. If it does you are Doing It Wrong. Build small things. Compose them. Anything longer than a few day's worth of work should be frowned upon. The megalithic modules taking months is madness.
- fn1 6y agoBecause we don't dare making bold decisions like: * Throw out all MySQL/MariaDB installations and replaced them with PostgreSQL because it is objectively, provably better. * Stop writing build-systems in untyped languages, because they are less productive when used by a team.
- simonbarker87 6y agoDid you read the article? The author doesn’t mention any specific technologies as the source of the problem but instead the increase in expectations of what software can do, how it is made and the complexity incurred because of that.
- MangoCoffee 6y ago>Throw out all MySQL/MariaDB that's reaching. there are many successful software build on top of mysql/mariadb. >replaced them with PostgreSQL because it is objectively, provably better "provably better"? that's not reasonable enough.
- lukeramsden 6y ago> that's reaching. there are many successful software build on top of mysql/mariadb. That doesn't make them better or even good. There is also successful software built on CGI scripts, but I'm not going to go and say that Go/Node/C#/etc aren't provably better than that.
- FriedrichN 6y agoI've used MySQL/MariaDB for over 10 years (as well as MSSQL, Sybase, PostgreSQL, SQLite and any others I forgot) and I've had minimal problems with them. No more problems than I've had with any other DB system. Edit: I also used MongoDB and hated it.
- jeofken 6y agoWhy is MariaDB worse than PG? Maria has temporal tables which I make great use of
- InvOfSmallC 6y ago
- Silhouette 6y agoWe are asking more and more of our software. Are we, though? This assumption merits deeper scrutiny. It's obviously true sometimes, but does it really generalise? In terms of functional requirements, we use lots of online software today that is far simpler than its traditional desktop equivalents in feature set. Many successful SaaS businesses are providing tools to help businesses organise that are often barely more complicated in terms of features than the freeware/shareware applications that used to be everywhere, often written by a single person or a small team, running natively on your desktop! It turned out that a lot of the extra complexity in the huge programs we used to run on desktops and corporate servers wasn't offering a good return on investment and the trend has been to simplify over time. That might be an improvement for both developers and users, but it certainly doesn't mean we're asking more of that software. In terms of non-functional requirements, connectivity is obviously a big change compared to 20 years ago. Today, a simple CRUD app might be running online and the data can be reached from anywhere by anyone, or by multiple anyones at the same time. That could be much more convenient even if the data itself is little different or even simpler than it used to be. And there are very significant overheads in implementing real-time, distributed, concurrently accessible systems compared to old school desktop and database applications, so in this area we certainly are asking a lot more of much modern software. But beyond that, what else are we asking more of in terms of non-functional requirements? We're setting the bar low on performance for most of the software that gets written today, relying on ever faster and larger hardware to make up for running less efficient code. As anyone who actually wrote serious software on the systems of 20 or 30 years ago can testify, that makes life far easier for programmers and requires much less knowledge and skill. Today, the skill set that resulted in heavily optimised code a few decades ago is mostly found among developers working in fields like embedded systems where resource constraints are still often tight, but otherwise it's another area where we're asking far less of our software than we used to. I think the article was more on target with its highlighting of essential and accidental complexity. The extra processes and tools and infrastructure add a great deal of extra complexity today, and I am far from convinced that much of that complexity is really justified, particularly when it's attached to such a transient, throwaway culture where little is built to last and developers jump ship every five minutes. It might be very un-PC and/or career-limiting to suggest building software any other way today, though.
- cccc4all 6y agoIt takes long time to build anything of value, software is no different. There are many variables in building software, which roughly break down to budget, resources and time. All these variables must be managed carefully to deliver software of quality and value. There are several strategies that mitigate the process of building software and manage tradeoffs between budget, resources and time. There's no one size fits all solution that can reduce time without accounting for budget and resources.
- caseyross 6y agoSoftware takes a long time to build because it's always new. That is, software is trivially copy-able, so there is no reason to spend effort duplicating any software that already exists. (Legal reasons and "not-invented-here" syndrome notwithstanding.) This is a huge different from how the "real" world works, where almost all of the work involved in building, say, a car, is actually just the work of assembling identical copies of that product so that it can be physically sold to more than one person. The insane amounts of repeated effort involved in building any physical product at scale have a silver lining, in that the repetition enables a very good and stable estimate of how long another repetition will take. Software is the opposite situation --- we only need to build anything once, but not having built that thing before, we don't really know how long it will take.
- TuringTest 6y agoIf that were true, it wouldn't take long to build from scratch a functionally identical clone of an existing application. Yet it does. The conclusion is that the tools to build software from a known specification to working code are sub-optimal.
- xmprt 6y agoThat's like saying a Ford F150 is functionally identical to a Ford Model A because they are both cars. The specific implementation under the hood requires a lot of work. And very rarely do people ever make functionally identical clones without massive refactoring to allow for extensibility.
- TuringTest 6y ago"implementation under the hood requires a lot of work" "people don't make functionally identical clones" "massive refactoring to allow for extensibility" You're enumerating the factors that make my point true. Those are some of the reasons why building software takes a lot even if you know exactly what it is supposed to do. You can compound that to the problem of figuring out what the software should do, which classic IDEs are also bad at. Online collaboration and prototyping tools that put the program in front of stakeholders early; they're like car makers' focus groups that were used to design cars tailored to a target demographic group.
- SMFloris 6y agoI think software takes longer to build now than it did before even with all our software advancements. Abstracting the market requirements completely, the new technologies are very slow to create an mvp out of. For example, a week ago I started a Symfony (php framework) project and let it on default server side rendered setup. I bought a $20 css+html template. I created some entities and then just inserted a form for that entity into an html file using one line of code. It took me less than 1h to do this, with containerization and db setup and figuring out how things work in Symfony. It blew my mind. I totally forgot how easy it was and I could focus on the things that mattered. To do the same thing in React/Angular would have taken me much longer since I simply had to build 2 things (a frontend and a backend). I think this is why today software takes longer to build: You simply have to build more behind the scenes so that the end customer sees a form/page/button.
- TuringTest 6y agoMy take is that programming languages have an inadequate ratio between abstract and concrete data flows. You are supposed to build code by stitching together commands for all the data handling functions required to handle each case in the data. Yet development environments make it really hard to actually _see_ what effect the functions are having on the data. You need to enter a special debug mode and place strategic breakpoints, logs and watched expressions, instead of making easy to compare the full program state before and after executing each function. In that respect, spreadsheets and reactive functional languages make it easier to prototype new software fast, since they have close together both functions and the data on which the functions operate; and in spreadsheets, you also get the intermediate steps for chains of functions.
- TuringTest 6y agoI'm also surprised that no one's yet mentioned Bret Victor's work. http://worrydream.com/LearnableProgramming/ http://worrydream.com/LearnableProgramming/ His visual interactions for programming are a great advance in the state of the art for fast development, and they've greatly influenced recent advances in development environments - making everything more reactive, and with code and data more intertwined.
- einpoklum 6y agoI don't know that it takes that long to build software. That is, the expectation that software be immediately available because you can vaguely imagine what it would do for you is strange.
- jillesvangurp 6y agoA lot of accidental complexity arises from adding more people to the mix. There is the communication overhead to deal with. Even when things go well this consumes time. When it doesn't: more time. Then there's of course the constant arguing and bickering over what is best; more people means more opinions on this. And of course the more people you have the more complexity gets introduced. Conway's law is a thing. The benchmark for me is what I think I can pull off in a few days vs. what I would build with a whole team in a few months. You can build a lot in a weekend. But not not with a whole team around you questioning every move. So, when I need quick results, I give the right people a lot of freedom and not too many distractions and see what happens. I'm building a new webapp for a startup with a few people since three weeks. We're launching with customers next month. That involves a lot of pragmatic decision making and taking on a few risks. Most of the hard choices were made in the first week and at this point the app is starting to look alright. Here's what we did not do: we had no designers involved. We also had no lengthy meetings about what features we were going to have. We're patching up our existing backend and adding some new features to it. Otherwise, it's an emergency rebuild of an app that just wasn't good enough (wrong mobile platform, developer is out of the picture, and it's a lot of technical debt and stability issues). I took the decision in December and gave our inexperienced frontend person some guidance to investigate the technologies I picked for him. By December we had a clear idea that this was doable. January we started doing this. That's 3 weeks ago. By now it's largely done. We're adding a few missing features and then we have an MVP that will run on IOS, Android and the web. If I had a few million, I could not do this any faster. But I'd be able to ship beautifully native apps six months later. If fast is a goal, keep your team lean.
- fuzzfactor 6y agoWhen you throw as many coders on to a project as anybody has ever done, in order to rush to the goal with maximum urgency, those man-months really add up fast and it does end up taking longer in the end because of it but look how many people got to the goal and it wouldn't have been possible without all those executive-months struggling to move the goalposts toward the team as much as possible before everything craters. If you were committed to efficient progress to reach your original goal you're going to need a different approach. And start all over again. Carefully read every word of their comments from the programmer having two decades of single-handed operation, and the 42-year corporate retiree now making single handed progress himself, these are long comments but here's an excerpt: >This all being said, one of the major causes of complexity in software development, which has always been an impediment to quality productivity is the ridiculous demand for unsuited deadlines in development efforts. This is a result of weak and incompetent management that runs up and out of the technical departments right up to division heads and the like. Deadlines, cause their own deference to the development of complexities, which often include defects. Deadlines cause stress and other factors, which often disallow most developers from thinking out their designs and problems clearly with time to tinker with the best solutions.
- NiceWayToDoIT 6y agoIn an average replicate (FB, HN, Twitter) tutorial, students can see how with an amazing developer skills, someone creates the finished product from 15 minutes to 2 hours. But, when they try to do the same, it takes days, weeks or months. And this also applies to an experienced developer; the reason is depth. (How deep to the rabbit hole do we want to go). There are always hidden complexities, configuration, installations, validations, issues, known obstacles and unknown obstacles; there is time for meetings, negotiations, time for thinking, time for merely trying to come up with the best approach long before we start coding. A good example from my early career was "just one field in the database", a client says "hey this will take you just 1 minute, why you are arguing with me about this", but that "one field" is so much intertwined that can affect half of the codebase. It means, going through all procedures, views, models, tests, validations, then there is an impact on historical data etc... Also there is a huge difference between: spike, MVP, and finished product.
- godmode2019 6y agoJust think about building a simple saas website. What do you need A marketing page A dashboard set of elements A payment system A billing history, refund, change card, invoice system A token system A auth system A email system or integration with a email provider. A complaint system A admin dashboard A often custom database schema A analytics system and useage A log tracker A cloud infrastructure for hosting Rate limiting A api A event logging system A marketing blog I have strayed too far. My point is each one if these things is usually build from scratch. It takes a lot of time, then you have to wire everything together. In typical custom ways. If someone makes a off the shelf version typically the learning curve is greater than building a custom version. I think software takes so log because each dev tries to rebuild the wheel. And often times the wheel does need to be rebuilt. But due to time issues things never get finished to the degree you planned and your custom code has been rewritten 10 times and each new feature take a logx longer to not break the old stuff.
- tonyedgecombe 6y agoI wonder if part of this is because the commercial pressures aren't there, that there is so much money sloshing about the industry that we can get away with sloppy practices.
- InvOfSmallC 6y agoWhat does it mean long? Long for whom? Your client? The final customer? In general, in my experience, the software can go wrong due to humans being present in the process. There are mainly 3 types of humans: engineers, product people, customers (clients). These 3 types of people sometimes lose track of what is really important in terms of features and engineering. Overengineering and overfeatures kill time to market. Keep it simple.
- pajko 6y agoFor me, the main thing causing slowdowns is the bad quality or complete lack of documentation about how the existing/external APIs work, and a big part of the development is trial-and-error.
- junippor 6y agoWhen someone asks "Why does it take so long to build software?" and you want to verify whether said person has any intelligent thoughts on the matter, ask them: "How long do you think it should take to build software?"
- username90 6y ago> How long do you think it should take to build software? About as long as it takes to figure out what the software should do. Add one day for each 1000 lines of code for typing carefully and adding automated tests.
- napier 6y agoProgrammers rarely think like users or in the case of business or specialist software, those who have domain knowledge; and vice versa. Skill barriers to contribution remain high and efforts to scale them like ‘low-code’ tools seem forever in their infancy. You rarely get a rounded combination of required developer-designer-user qualities in one individual or small team. Nor is there, in my opinion, widely distributed recognition of this within the industry. There still exists a lack of formalized design methodology enabling to processes to flow through iteratively from ideation, to prototyping, to production. Costs and time taken snowball as a result and project failure rates remain high compared to other engineering disciplines. I think the high profit payoffs and normative structures due to distribution costs being marginal contribute to the stickiness of this comfy buy rickety state of affairs.
- cryptica 6y agoMaybe because successful companies in tech got rich so quick that their leaders never learned how to code properly. None of the developers who work for big successful companies know how to code efficiently. Initially, they were hacking together all the code as quickly as possible (of course that didn't scale and had to be rewritten completely) and then they later got enough money to just brute-force development by throwing hundreds of developers at it. Then they started pushing their naive ideas to everyone else (e.g. static typing, functional programming, 100% unit test coverage, Elixir...) and they put 0 focus on stuff that really matters such as keeping method parameters and return values as simple as possible, consuming events using for-await loops instead of event listener callbacks, naming variables well, separation of concerns, etc... So now most of the industry knows two kinds of code: Dirty hacks or bureaucratic bloatware. Nobody knows how to code properly. There is nobody around to teach people the correct approach and there are a lot of people around to teach the incorrect approach.
- tom_walters 6y agoI fundamentally disagree with the conclusions of this article. It doesn't take long to "build software" - git was built in a weekend, Facebook a similar timeline. When the environment is right there's no upper bound on the pace of delivery, it's just that modern day dev is, in many places, less about quality of the output (in terms of product/market fit and user value, not code quality) and more about the satisfaction of ceremony. You couldn't product manage Google into existence, or any truly valuable piece of software, hardware, or any other innovation, but it's customary for organisations to create structures which feel grown-up in order to yield software. The talents now required to enter the field are also different, which has naturally played a part in the perceived slow-down. Development is a new field, and research into what makes teams effective is limited - we're still using the ideas of industrial steel production to try and bolster the present manufacturing line. This means there are plenty of undesirable behaviours. But ultimately, it's about what you're optimising for. If you hire outstanding people and give them an excellent brief, you can deliver incredible software at pace. Most modern companies don't optimise for this, it's more about satisfying sprawling teams, polishing egos, and chasing incremental gains. In that environment you can bet delivery is slow.
- jstimpfle 6y agoThat's an overstatement. You can build impressive MVP and tech demos in a short amount of time, yes. But that requires that the author has already been thinking about the types of problems that come up in this domain for a long long time. Rest assured that Git certainly hasn't been created in a weekend. Also, you can't create a product in this short amount of time. (There are some websites that do almost nothing at all, and that are very profitable, but those aren't engineering problems). Think how long git has been maintained, polished, and extended since its inception. And still people complain. Software is a learning process, otherwise people wouldn't be so obsessed about it. And learning takes time. No matter which way you're approaching it.
- ozim 6y agoI agree, saying Git was created in a weekend is like saying olympic gold medalist in 100m dash won competition in 10 seconds. Linus was working with DVCS software already and was annoyed with it so he had an idea on how to do it, he did not came up with it on Saturday like it never existed and coded it on Sunday. Other part about Facebook - well if you take first version that was just well photos + some description and disregard all stuff that was refined next years where it started to be real product instead of novelty page for Harvard students. In a company I work for we built first version of application in 1-2 years to catch up with what other companies already had and what customers expected. We could do really simplistic version in a weekend but no one would pay for it.
- jcun4128 6y agoEh pointless gripe but if this is a blog/article should omit that intercom widget or whatever on that page.
- KingOfCoders 6y agoToo long often means forgetting the iceberg principle [1] by Joel Spolsky. Business people only see the tip of the iceberg, the UI button, but don't see the huge chunk below water. This chunk is complex and not UI and takes time to develop or change. [1] https://www.joelonsoftware.com/2002/02/13/the-iceberg-secret-revealed/ https://www.joelonsoftware.com/2002/02/13/the-iceberg-secret...
- sarah2good 6y agoI'm Sarah content writer at https://headsetreviews.org/ https://headsetreviews.org/
- zmmmmm 6y agoMany valid comments and points of view. This is but one part of it, but what I see is that software has a uniqueness to it because so much of the complexity is hidden. Really, nobody can see it being created except the actual developer building that piece and maybe one level up if they are good enough to review the code. But to everybody else its a mysterious black box. Now this not only hides the complexity but actually amplifies it because at the ground level people are highly incentivised to inject complexity into their work. It feels good to make something complex. You feel productive and it definitely helps your resume if you can claim to have worked on something highly complex. Everybody else is impressed. The team gets more resources to support this amazing thing being created. So hiding the complexity not only prevents exposure but means many people in the production chain incentivised to create complexity can get away with gratuitously injecting it into things. Whole frameworks will be deployed where 10 lines of code would have worked, new libraries will mysteriously appear and get used for 1 function. Layers of indirection in the design will appear to abstract things that have only 1 concrete implementation. etc etc. All of this is invisible above 1 management layer and therefore unmeasurable and unmanageable. But the outcome is, the end result takes much longer than you would surmise from the bare bones functionality or requirements.
- qwertox 6y agoWhat I find the most painful is that you can't rely on much to decrease accidental complexity. A couple of years ago I settled on the JavaScript Dojo Framework. It was the most solid framework available, but then AngularJS came out, and it had some very compelling arguments on it's side. So I moved over to AngularJS, being happy that there finally a good, modern solutions to many problems. Then Angular 2 came. Then AngularJS 1.x stopped being updated. Angular 2 was nowhere near what I needed, so I had to find an alternative. I switched to Vue, being really happy about it. Now I'm finding myself in the transition to Vue3, where frameworks like Quasar still need to get ported and it is unclear what will happen to all the code I already wrote. Or Python2 vs Python3. All this progress makes me feel burned out, barely having time to tackle the actual problem to be solved.
- cjfd 6y ago"splitting it up" is only accidental complexity if one splits things up in services. If one has a monolith I would argue that "splitting it up", in that case known as 'improving coherence' and 'reducing dependency' is much easier and falls under essential complexity. Generally, I would say that tools are a very big part of it. One example. Why did we go from svn to git again? O yes, git can do so much more. But now you actually have to do all of these 'so much more' things. This gives you a very beautiful commit history if you do it well but is a very beautiful commit history really that important? You tell me.... maybe it is and maybe it isn't and maybe it depends on the nature of the project....
- hamandcheese 6y agoI think there is a cost disease in software where baseline requirements only increase depending on the maturity of a company. Accessibility, localization, scalability, permissioning, observability and alerting, reliable deploy and testing pipeline... all these things are table stakes for a new project at the company I work at, represent A LOT of complexity, yet an application delivered without them might have a nearly identical user experience... That’s not even to mention the added burdens on the planning side of things, e.g. getting infosec and legal and compliance to sign off before breaking ground, gathering requirements from 10 different teams across the world, appeasing more stakeholders, etc. The difference just in table stakes between a young startup and a mature company can easily account for an order of magnitude difference in effort required to deliver a feature, and it shouldn’t be surprising. Edit: and this is why I weep when I see mature companies under-investing in developer tooling.
- p0nce 6y agoWriting software is basically going in debt, so you should write the 20% of software that will deliver 80% of the value. The problem begins when not considering costs and then being "surprised".
- beckingz 6y agoManager: "All those 'nice to have' things are too expensive. Let's cut them" Manager, 3 months later: "Why are there no nice things in the software!"
- wdiamond 6y agoSoftware is like writing a book. A good book fits all new pieces in a new story and makes sense. A fast book is just copy of known pieces and known story and don't really fits well. A "PRO" in market steal not old ideas, a "PRO" in the field create detailed raw new sketchs that are not ready to sell.
- kwanbix 6y ago"... programming is an art form, whose real value can only be appreciated by another versed in the same arcane art; there are lovely gems and brilliant coups hidden from human view and admiration, sometimes forever, by the very nature of the process. You can learn a lot about an individual just by reading through his code, even in hexadecimal..."
- deleted 6y ago[deleted]
- noisy_boy 6y agoI think it is relative. Compared to developing a car, a wordpress website can be completed in a relatively short time; an ERP system on the other hand will take substantially longer. It depends on what is being asked to be delivered when at what cost. Putting that aside, there is a time creep factor because people don't place limits on the demands - ask and the developer can do it. So it is developed and now you need to ensure that the custom piece works reliably and doesn't break and so on. Compared to that, a house needs to be carefully designed upfront and there are limits to what modifications you can reasonably ask for down the line - you don't ask the builders to drag and drop the kitchen to the other side because you don't like how it looks on mobile.
- bkirkby 6y agoi believe one of the culprits for software taking so long is planning. this is alluded to in marty cagan's excellent book _Inspired_. first, the caveat: a software dev project will take up as much time as is allotted to it. when you have more than enough time allotted for a project, most people either spend more time in research or allow themselves partial implementation paths of multiple solutions to help decide which one is best. on the other end of the project, every project can be polished forever. so dev projects will take as least as much time as has been allotted to it. when we go through the planning process, it usually follows something like this: 1. dev estimates how many "points" (which translates into time in most peoples mind) to allot to a task. dev then pads it to account for dev optimism and wanting to make sure they have the chance of meeting the "committment" 2. program/project/product manager pads the number a bit further because they've been burned in the past on dev optimistic estimates and it's better to underpromise and overdeliver 3. dev proceeds on the task with the bloated estimate baked in and the task takes the full time allotted to it. it's baked inefficiency. part of the problem is the concept of "committment" for estimates. good scrum organizations have changed that term to "prediction" instead of "committment" since this has been such a big problem. but even that isn't enough to solve the political capital lost when you "predict" wrong. i think that any estimation above "t-shirt size" is going to bake this inefficiency into your process. the solution is less planning and more doing.
- Cyberthal 6y agoThis answer is facile, but missing: It takes so long to build software because it can. One can't construct a building forever. A novel is published and done. But software can be developed over its useful lifetime. Similar followup: The parts that take a long time, do so because the quick parts were finished quickly. Lengthy software development isn't a problem with software, but rather reflects the frictionless malleability of code. "Why does software dev take so long," isn't the same question as, "How to develop software more quickly?"
- mbrodersen 6y agoWhy does it take so long to make a movie/software? Because it is an act of invention. Yes the camera/widgets, lights/libraries are all reused. But the way they are reused is unique for each movie/application. And a large number of external constraints/forces impact how the movie/application is made. Yes you can quickly make an amateur movie/app in a few hours. People do it all the time. But that’s not the same as making AAA movies/software.
- tabtab 6y agoTypical internal CRUD applications took about 1/3 the time and 1/3 the coding to produce in my experience with the desktop IDE's of the late 90's. The web bloated things up so that you spend time hooking layers to more layers and debugging layers instead of focusing on business logic and UI in terms of users' needs. Now you micromanage technology instead of actual work. People often say, "yes, but we have so much wonderful choice now!" Perhaps, but organizations are paying dearly for that choice. Oracle Forms may have been esthetically ugly, but it did the CRUD job fairly well without fuss and muss, and developers were quite productive with it. The client was kind of a GUI browser so that you didn't need to install each application on each user's PC. It was also multi-platform. (Oracle mucked up the client by migrating it to Java applets.) Some point out they don't work well on phones, but few of our apps are used on phones at our org. The UI was crippled to be mobile-friendly, but nobody is mobile-ing for real-work stuff. Make a special phone portal for the 5% or so of apps that need it instead of tangle up the 95% "incase" someday someone will want mobile. YAGNI. If the industry would just learn to live with ugly K.I.S.S., they could save a lot of money and time. Warren Buffett says one of his greatest strengths is the courage to say "no". Few have that, and bloat the IT world as a result. Maybe fear of missing the Buzzword of the Week turns our stacks into buzzword pack-rats.