[HN Gopher] Software engineering research is a train wreck
       ___________________________________________________________________
        
       Software engineering research is a train wreck
        
       Author : martincmartin
       Score  : 243 points
       Date   : 2021-07-20 11:52 UTC (11 hours ago)
        
 (HTM) web link (buttondown.email)
 (TXT) w3m dump (buttondown.email)
        
       | MengerSponge wrote:
       | Sci-hub is great, but it should be your last resort. University
       | librarians have explained this to me, but it has to do with how
       | Sci-hub counts towards access counts of obscure journals.
       | 
       | Unpaywall provides an excellent browser extension.
       | https://unpaywall.org/
       | 
       | If you have time, you can request a copy of a paper directly from
       | the corresponding author. We love for people to be interested in
       | our work, and we would rather you put that $40 access fee towards
       | something that benefits society.
        
         | arkitaip wrote:
         | Amazing extension. Thank you.
        
       | zabzonk wrote:
       | If you search for "science" in this article, you will have great
       | difficulty in figuring out what the title means, unless you are
       | smarter than me, which is entirely possible.
        
         | coldtea wrote:
         | Try figuring it out through the context. There are paragraphs
         | upon paragraphs of it in the article.
        
         | routerl wrote:
         | There's another strategy that works better than searching for a
         | keyword, which is to read the article.
         | 
         | It's about the difficulty/expense of systematically and
         | scientifically studying the software development process (e.g.
         | finding out what data actually exists to support the claim that
         | "a bug is cheaper to squash when it is caught during the
         | specification process").
         | 
         | The title expresses frustration not at science itself, but at
         | how needlessly difficult this process is, since both the
         | secondary and primary academic literature surrounding it are of
         | extremely low quality.
        
           | AnimalMuppet wrote:
           | But specifically with respect to software engineering, it's
           | really hard to do solid, repeatable experiments. It's not
           | like physics, it's like sociology or psychology - which also
           | have trouble doing precise, repeatable science.
           | 
           | Why is it like sociology or psychology? Because it's about
           | _people_ , not about _things_. Software engineering is not
           | just about languages and programming techniques; it 's about
           | how _people_ interact with those languages and techniques.
           | The people have far more variability than the languages and
           | techniques do. Cutting through that to be able to accurately
           | say something about any language or technique is... really
           | hard.
        
             | deregulateMed wrote:
             | I think at the present time, software can be more like
             | science than sociology.
             | 
             | Both suffer from abstraction.
             | 
             | I think psychology when closer to biology is similar to
             | programming like running the programming language C
             | experiments.
        
           | deregulateMed wrote:
           | Despite insistence of programmers wanting to be scientists
           | and engineers, it's not true to the definition.
           | 
           | Maybe safety critical C or assembly is engineering.
           | 
           | Maybe testing code for speed can be considered science.
           | 
           | By the time any useful program is finished, there's
           | significantly more tradition and art than Science and
           | engineering.
        
       | shusson wrote:
       | > ..."bugs found in requirements are 100x cheaper than bugs found
       | in implementations." ... There's one tiny problem with the IBM
       | Systems Sciences Institute study: it doesn't exist
       | 
       | It's funny to think how much of an effect this chart had on
       | software engineering as a whole. I remember learning it at
       | university and until today I thought it had some basis in
       | science.
        
         | eschneider wrote:
         | It "feels right" and is therefore "truthy."
        
           | krisoft wrote:
           | Do you guys doubt that it is right? What kind of information
           | would you require to show you that it is true?
           | 
           | I'm one of the lucky ones who tends to work on safety
           | critical "complex cyber-physical systems". Is that maybe the
           | difference?
           | 
           | There is the case where a developer runs unit tests before a
           | commit. Some of the tests are unhappy. Developer fixes it and
           | commits it up. Maybe hours spent?
           | 
           | Then there is the case where something goes funky in the
           | real-world all-up integrated system at the test range. Even
           | in the best case tens of people waste a day. If we are
           | unlucky it is a hard one and a small army of the most senior
           | developers with the best operators and hardware people are
           | hunting the bug for weeks. I fear to even sum op the wasted
           | cumulative work days.
           | 
           | I lived through multiple of these at different companies on
           | different projects. (Both the first kind and the second
           | kind.)
           | 
           | Is the question if this is true? Or maybe the question is if
           | this is true for your area of the industry too?
           | 
           | Obviously I won't be able to provide sources for the ones I
           | worked on. I bet no company really would want to release the
           | hard data on these things. So let's look at some well-
           | publicised problem caught in production: The Boeing 737 MAX
           | MCAS issue. 346 deaths, 1 year, 8 months and 5 days grounding
           | and the estimated direct costs are US$20 billion.
           | 
           | Obviously this is all super anecdotal. I just want to
           | understand what part of the question/problem you have doubts
           | about.
        
             | twobitshifter wrote:
             | I think that's the point - the chart confirm your bias and
             | everyone else's so we accept the results at face value.
             | Nobody really knows if those bar heights were ever measured
             | but of the millions of people to see that chart few
             | questioned it.
        
               | krisoft wrote:
               | I never had to quote those charts though. Instead the
               | conversation went like this: "Hello boss, do you remember
               | that fubar two months ago?" I even mention the concrete
               | ticket number, and when the number alone makes my boss
               | face twitch then I know i choose the right fubar. "We
               | just merges a CI change. If that whole category of
               | problems happens again we will know within the hour,
               | instead of spending two weeks debuging."
               | 
               | Its he same wisdom, but communicated in a more direct
               | way.
        
             | marcosdumay wrote:
             | The chart very likely has the correct direction, and the
             | numbers are probably completely wrong. From another point
             | of view, the literal phase division there is nonsensical,
             | but the idea it communicates isn't.
             | 
             | But that's not relevant. What's relevant is that this is
             | not how you do research. You can't just assume that. Yeah,
             | there are plenty of examples of high-cost production
             | failures. There are plenty of examples of low-cost
             | production failures too, and plenty of examples of projects
             | that failed because people spent all their time fixing the
             | same few issues. If you want to state it as a fact, you
             | have to count all of those and see how they compare.
        
       | Helmut10001 wrote:
       | Wow, thanks for the link to sci-hub.st - this is awesome! I can
       | finally access Elsevier's "walled" content again.
        
         | teddyh wrote:
         | https://whereisscihub.now.sh/
         | 
         | Currently redirects to: https://whereisscihub.vercel.app/
        
           | Vinnl wrote:
           | Oh hey, I made that, but it was taken down by what was then
           | called Zeit. Looks like that didn't persist through their
           | Vercel rename.
           | 
           | Note that it just fetches the current URL from Wikidata.
        
       | dogorman wrote:
       | > _I've checked a few other papers and think I'm tentatively
       | confident in this line of reasoning: certain bugs take more time
       | to fix (and cause more damage) than others, and said bugs tend to
       | be issues in the design. I haven't vetted these papers to see if
       | they don't make major mistakes, though. It's more time-consuming
       | to do that when you're trying to synthesize an stance based on
       | lots of indirect pieces of evidence. You're using a lot more
       | papers but doing a lot less with each one, so the cost gets
       | higher._
       | 
       | Empiricism and quantitative metrics have indispensable value,
       | that much should be clear to everybody I hope. But too often
       | people forget (or have active contempt for) the value of
       | qualitative metrics which can only be judged subjectively. Such
       | considerations are naturally harder to deal with than cold hard
       | data, so it doesn't surprise me that people want to avoid it. But
       | when you blind yourself to the qualitative and subjective, you do
       | yourself a huge disservice. Just ask McNamara; he thought he
       | could win the Vietnam War with quantitative metrics and utterly
       | neglected difficult to quantify metrics like public sentiment,
       | both in Vietnam and America. I see echos of this in our industry
       | today; we love to talk about empirical measures like the number
       | of bugs, but subjective metrics, like the severity of those bugs,
       | receive less attention.
       | 
       | Many university programs are set up to address this, by making
       | engineering students earn credits in the humanities as well. But
       | I fear the value of this is often inadequately explained.
       | Contempt for the humanities and scientism go hand-in-hand, and
       | are a worrying trend particularly in the tech industry.
        
       | Quanttek wrote:
       | > The average developer thinks empirical software engineering is
       | a waste of time. How can you possibly study something as complex
       | as software engineering?! You've got different languages and
       | projects and teams and experience levels and problem domains and
       | constraints and timelines and everything else. Why should they
       | believe your giant incoherent mess of sadness over their personal
       | experience or their favorite speaker's logical arguments?
       | 
       | This argument could be used for literally any science but, for
       | some reason, it seems to fall on attentive ears mostly in the
       | software industry.
        
         | hwayne wrote:
         | I think it's common in a lot of fields. It's def prevalent in
         | medicine, for example: people are skeptical of any research on
         | doctor behavior.
        
         | twobitshifter wrote:
         | I think the issue is that management is not done
         | scientifically. You can see this with something as estimating
         | for a project. Higher ups just ask "how many hours and when can
         | you get it done" - they don't want you to go through past
         | similar work review it's timeliness and hours, divide it into
         | smaller tasks, build a project schedule, review productivity
         | trends and resource loadings, or any scientific way of arriving
         | at the number. What they really want is a seat of the pants
         | WAG, which isn't too big to scare the client, that they can use
         | to get going, with the understanding that shit happens along
         | the way.
        
       | SebastianFish wrote:
       | Testing different methods of development in terms of speed, cost
       | and quality is really hard. The most convincing approach to me
       | would be a single blind experiment to hire two software
       | development teams and have them build to the same set of
       | requirements in two different ways. But then it is hard to know
       | whether you are really comparing the method of software
       | development or the quality of the software teams. So two software
       | teams isn't enough to get a statistically valid inference. You
       | can see that, given software development rates, this could become
       | a very expensive experiment.
       | 
       | Last point. I think that even writing a specification down to the
       | level that it could be implemented using formal methods might be
       | the biggest game changer. Agile stories rarely come even close to
       | covering all of the potential edge cases. If we had a process
       | that required product owners to literally think through all
       | possible failure modes (what systems of formal methods do) and
       | write out how to handle them then the cost of writing
       | specifications would go way up. Per economics, I think we would
       | end-up with simpler specifications which might be its own
       | benefit.
        
         | NohatCoder wrote:
         | "A specification that can be implemented using formal methods".
         | That is just source code. If the specification can completely
         | define arbitrary programs it is necessarily Turing complete on
         | its own, and as such prone to the same type of bugs as any
         | other program.
        
           | nonameiguess wrote:
           | As soon as you need to interface with arbitrary external
           | components, you see the value in good specifications. If
           | JPEG-2000 was just a reference implementation and not a spec,
           | that would work fine if only one team ever had to develop a
           | JPEG library, and every application that read or wrote JPEG
           | files used exactly that one library.
           | 
           | Since that isn't the case, having something sit at a higher
           | level of abstraction than the actual source code is quite
           | valuable. Additionally, it allows domain experts like image
           | scientists and physicists, who are experts in how to compress
           | and decompress data with minimal quality loss but may not be
           | experts in any particular programming language, to still
           | contribute to the spec.
        
             | jkaptur wrote:
             | Is there a machine-readable spec for JPEGs? Did it find
             | interesting bugs and oversights?
        
             | the_af wrote:
             | I understand your last point, but my question is:
             | 
             | In order for domain experts to contribute to a formal
             | specification, this specification must be, well, formal,
             | and also serve as a very precise shared language among all
             | domain experts _and_ implementors (i.e. the people who are
             | going to read the spec and build something out of it). Once
             | you go down this road, the specification language becomes
             | as complex as any programming language -- or maybe even
             | more! -- and must be learned by all involved, just like any
             | given programming language. Some people will find it easier
             | to learn, some will struggle or find it bizarrely
             | unfamiliar -- again, just like any given programming
             | language. Any sufficiently expressive specification
             | language will also be subject to the kinds of bugs and
             | complexity that affect programming languages.
             | 
             | So my question is: isn't learning a shared formal
             | specification language more or less as difficult as
             | learning an unfamiliar programming language?
        
           | SebastianFish wrote:
           | I think you are speaking to one of the core tensions in
           | formal methods. The difference between a specification and an
           | implementation can get blurry. Where formal methods get
           | interesting is statically proving properties about the
           | specification. Take a simple example of a sorting algorithm.
           | The two most commonly proved properties of these algorithms
           | are that they 1) return a permutation of the input list (no
           | items removed or duplicated) and 2) that the output of the
           | list follow some sort of ordering.
           | 
           | One way to look at things is to say the permutation and
           | ordering property checkers are the specification and the
           | actual sorting algorithm is the implementation.
           | 
           | To your point about the specifications being Turing complete,
           | some tools will put restrictions on the specifications to
           | make function termination highly likely. COQ for instance
           | requires that recursive functions be "decreasing in their
           | inputs" AKA that subsequent calls to the same function are
           | passed fewer items or elements than the parent.
        
             | NohatCoder wrote:
             | Sorting is one of the more favorable tasks for being
             | specified this way, for much code there is no simpler way
             | to verify the output than running the same or equivalent
             | code again.
             | 
             | If your specification language is not Turing complete then
             | there is simply stuff you cannot specify. Of course, just
             | because it isn't Turing complete doesn't mean it isn't
             | perfectly adequate for writing bugs.
        
           | hwayne wrote:
           | Purely from an industrial perspective, interest in formal
           | methods tends to split two ways:
           | 
           | 1. Verifying _really_ nasty algorithms, the kind you see in
           | cryptography and embedded systems and stuff where the bugs
           | are triggered by horrific race conditions or incredibly
           | specific malicious inputs that even experts won 't think of
           | testing
           | 
           | 2. High level specifications of requirements and abstract
           | machines and stuff, where the spec is like 100 lines and the
           | implementation is 10k and you'd prefer to catch some design
           | bugs before you're ten sprints into coding
           | 
           | A lot of bugs in (1) end up being memory-related, which is
           | why you're seeing languages with borrow checking as part of
           | the semantics (Rust). A lot of hype these days is in (2)
           | because it's a lot cheaper and easier to learn, at the cost
           | of having a lower power ceiling.
        
         | moksly wrote:
         | It's not that hard is it? There recently was a study on the
         | value of testing and best practices linked here on HN, that I
         | of course can't find now, where the researchers looked a
         | thousands of projects. Over all there was no scientific proof
         | that testing and best practices lead to better results than
         | just making spaghetti without a recipe.
         | 
         | Having worked in an public enterprise organisation that buys a
         | lot of different software for some decades, it sort of fits
         | with our completely anecdotal data. We still prefer suppliers
         | that have all the nice buzzwords, but if you look at our
         | projects there is just no correlation between their methods and
         | how the software project goes through its livecycle. And this
         | is with everything from the old COBOL systems to modern micro
         | service this and that cloud solutions.
         | 
         | For the past five years I've had a near little sidejob as an
         | external censor for CS students, and it's been interesting to
         | follow how their software design metrology changes rather
         | rapidly, without any real scientific reason as to why that is.
         | Mostly it seems like there is an entire field of "education"
         | dedicated to getting people to do software design and project
         | management in the way that sells the most licenses to Atlassian
         | or whatever else, or simply the most books. It's really very
         | comparable to the self-health industry, where you'll have
         | answers for everything.
         | 
         | Sure it's mostly anecdotal, but preaching that test driven
         | development or going Agile SOLID wild turkey is the holy grail
         | is exactly the same as preaching some diet where you get to eat
         | as much you want as long as it isn't carbs. Sure you can lose
         | weight, but it's not like it's the only way to lose weight and
         | next year it'll be about going on a juice cleansing or
         | something and then something different after that.
        
           | Rd6n6 wrote:
           | > Over all there was no scientific proof that testing and
           | best practices lead to better results than just making
           | spaghetti without a recipe.
           | 
           | Which best practices? I can't see how a team without certain
           | practices could be that effective. Eg, version control,
           | having good backups, a good communication culture, code
           | review, config management to prevent "it works in my machine"
           | problems, and many other things
        
           | nonameiguess wrote:
           | A study design like that is called an epidemiological study
           | and is far behind the gold standard of a random controlled
           | trial, reason being the teams that choose to do testing or
           | not are not randomly assigned to experimental and control
           | groups. There are ways outside of study design of controlling
           | for confounders when you can't randomly assign experimental
           | and control groups, such as in this instance only looking at
           | teams that directly tried similar projects with tests and
           | without, but it is rare to see anyone do that.
           | 
           | Otherwise, you hit a rather obvious issue. Testing and
           | following best practices are not the only policies impacting
           | project quality, and in particular they exist in large part
           | to help less experienced or hastily assembled teams. If
           | you're comparing their output to the output of several core
           | maintainers who have been working on the same project for 20
           | years, in the absence of other information, you expect the
           | latter group to produce better quality work, and the fact
           | that they actually do even if they aren't following industry
           | best practices doesn't tell you those practices aren't useful
           | to the former group or even that the latter group couldn't
           | have produced an even better product if they'd followed them.
           | 
           | Be aware I'm not at all trying to advocate for either
           | approach, just the issues with various flavors of scientific
           | evidence that vary tremendously in how valuable they are
           | depending on study design. I'm just saying we can't know with
           | any level of scientific validity because the studies
           | themselves are near worthless. Software management is in the
           | state today that major league baseball was in 30 years ago,
           | no statistically valid evidence and a whole lot of gut eye
           | test from grizzled veterans. But unlike with baseball, nobody
           | is keeping rich troves of every imaginable counting stat that
           | can be counted going back a century on all of the developers,
           | so a pure data science approach to making management more
           | scientific like the moneyball guys accomplished in pro sports
           | is not likely to work, since it would necessarily be data
           | science without the data.
        
         | nradov wrote:
         | Requirements analysis is an integral part of the development
         | process. Giving teams fully specified requirements at the
         | beginning of the experiment wouldn't be realistic.
        
           | AnimalMuppet wrote:
           | Depends. You could then run experiments on team performance
           | in the requirements-to-code phase, separate from the
           | generating-requirements phase. That has its place. And then
           | you could experiment with teams trying to convert informal
           | requirements to formal requirements. That might let you learn
           | some things about the parts that you couldn't learn if you
           | dealt with the whole.
        
             | nradov wrote:
             | Those are not separate phases, they take place
             | simultaneously. No one does waterfall development anymore.
        
               | mattchamb wrote:
               | Waterfall development is still pervasive in a lot of
               | industries and companies.
        
         | igouy wrote:
         | > The most convincing approach to me would be a single blind
         | experiment
         | 
         | http://www.plat-forms.org/
        
       | kragen wrote:
       | "View Source" may be helpful if you're just seeing a blank page.
        
       | Bayart wrote:
       | It's completely besides the point, but the capitalizing of the I
       | of << **Ing >> in the title makes me unreasonably grumpy.
        
         | [deleted]
        
       | sseagull wrote:
       | I generally agree with everything, but thought I would just use
       | this as a springboard into a related topic:
       | 
       | > What's the difference between a "bug" and "defect"? Well, one's
       | a bug and the other's a defect, duh!
       | 
       | This kind of issue is common but I'm not sure how to avoid it.
       | Any group of people > 1 will start to use their own lingo, which
       | often is made up of similar words from "outside" but have
       | different connotations. This is true in science, medicine,
       | software engineering, law, everywhere.
       | 
       | (I mean, why would I search for "bug"? Like, I'm searching for
       | problems with computer code, not insects!)
       | 
       | This phenomenon unfortunately leads to misunderstandings with the
       | general public, which leads to mistrust. Part of it is on
       | scientists (and lawyers...) to be clearer in their communication,
       | but I think it is also on the public to recognize that when
       | reading scientific literature they are not the intended audience
       | and are therefore missing a ton of context that is not explicitly
       | stated.
       | 
       | Also:
       | 
       | >I'm sure this is slightly easier if you're deeply embedded in
       | academia
       | 
       | Also depends on the field. Chemistry has SciFinder, which
       | although very expensive for institutions, is very good. It is
       | fairly specific to chemistry though (and some overlapping
       | fields).
       | 
       | His process for finding node papers and grinding through
       | citations is pretty much how most scientists do it, though. And
       | conferences.
        
       | JohnFen wrote:
       | It sounds like the author doesn't hate science (which is a
       | nonsensical thing to hate), but academia. Those are two different
       | things.
        
       | lazyant wrote:
       | I don't know what "FM" and other initializations are. Please when
       | writing an article, expand them in parenthesis the first time
       | they are mentioned.
        
         | MiscIdeaMaker99 wrote:
         | I didn't catch that either. Sucks you're getting downvoted for
         | it when it isn't as obvious as others seem to think.
        
           | hwayne wrote:
           | I'll put a quick link in
        
         | cpeterso wrote:
         | FM = Formal Methods
        
         | raldi wrote:
         | It's expanded the first time it's used (in the sentence
         | preceding the one with the abbreviation).
        
       | ftio wrote:
       | I worked on engineering productivity research and measurement at
       | Google for two years until about a month ago. (Opinions my own.)
       | Compared to my former colleagues, I'm an infant in this area, so
       | take this with a heaping of salt.
       | 
       | In general, I think the author's cynicism about productivity
       | research is justified, but I think it could have been directed
       | more productively. (NB: the following comments say nothing about
       | areas of software engineering research outside of productivity.)
       | 
       | Commercial software engineering is a _creative_ endeavor; it is
       | not a science, nor is it a manufacturing process. It does not
       | have natural, universal laws. What makes a team  'productive'
       | varies massively based on constraints imposed by business model,
       | product, customer expectations, leadership values, and of course
       | the individuals of which it consists.
       | 
       | I do not believe in the possibility of a "General Theory of
       | Productivity." I'm highly skeptical of attempts to quantify the
       | precise relationship between error discovery stage and cost in a
       | way that is generalizable, although I think it might be possible
       | given a large group of engineers using a highly homogenous
       | process, tools, and accounting. Google is pretty close to this
       | (common dev infrastructure across tens of thousands of
       | engineers), and even across Google this kind of generalization
       | would be extremely difficult.
       | 
       | There is no universal physics of software engineering. As a
       | result, academic research into productivity can be difficult to
       | generalize (which is why, I think, you often see researchers
       | twisting themselves into knots). Instead, my rec is to focus on a
       | few key metrics that are aligned with your business' or team's
       | goals (search for DORA for a good starting set) and to reflect
       | often on what you feel makes your team work well and what
       | doesn't.
        
         | phkahler wrote:
         | >> I'm highly skeptical of attempts to quantify the precise
         | relationship between error discovery stage and cost in a way
         | that is generalizable...
         | 
         | I would say universally that bugs found prior to shipping are
         | lower cost (not just cost to fix) than those found after. I've
         | heard from an auto industry friend that over-the-air update
         | capabilities are becoming mandatory for more components. That
         | sounds good because critical fixes can be issued without the
         | cost of a recall (very expensive - if you're a tier 2 supplier
         | you may be out of business). The down side is that the software
         | teams are starting to think they don't actually need to be
         | "done" by launch day, which leads to a bunch of harder to
         | quantify costs.
         | 
         | Another example from a different industry: a bug that caused
         | file import compatibility issues between two versions of the
         | same software. Had that been caught before shipping it would
         | have been no problem to fix. But instead the fix involved
         | trapping an error and rereading the file with a different code
         | path. Also, we didn't realize the change mattered so the file
         | header info was not updated, so we couldn't tell in advance if
         | a file was "old" or "new" when reading it. Once files of both
         | "versions" were in the wild with our customers the simplest
         | (most correct) fix was not possible without braking
         | compatibility.
        
           | mikepurvis wrote:
           | > The down side is that the software teams are starting to
           | think they don't actually need to be "done" by launch day,
           | which leads to a bunch of harder to quantify costs.
           | 
           | See: the disastrous technical state of many modern video
           | games at launch, seemingly _especially_ those extra chunky
           | "live service" titles that are meant to be around for years
           | instead of just a few months like a normal AAA single player
           | game. Examples:
           | 
           | - https://kotaku.com/how-biowares-anthem-went-
           | wrong-1833731964
           | 
           | - https://www.forbes.com/sites/insertcoin/2018/11/27/bethesda
           | s...
           | 
           | - https://www.ign.com/articles/marvels-avengers-keeps-
           | fixing-t...
           | 
           | No one would have dreamed of shipping a title on the Gamecube
           | or Playstation 2 that had these kinds of problems-- whatever
           | it was you put on that day-one disc was going to be the game
           | forever.
        
           | WalterBright wrote:
           | > over-the-air update capabilities are becoming mandatory
           | 
           | Looking forward to the mass injection of malware into cars
           | exploiting the usual bugs. How about ransomware to get your
           | car started? Lots of fun!
           | 
           | > the cost of a recall
           | 
           | Mail me a USB stick with the update.
        
             | concernedtroll wrote:
             | But think of how easy OTA updates will make apprehending
             | criminals!
             | 
             | For instance, if a government needs to institute a lockdown
             | to prevent spread of a novel virus, they can just disable
             | all affected citizens' ability to drive anywhere
             | inessential, and the original software doesn't have to
             | support it
        
         | shusson wrote:
         | > Commercial software engineering is a creative endeavor; it is
         | not a science, nor is it a manufacturing process.
         | 
         | Do you think software engineering will remain a creative
         | endeavour in the future?
         | 
         | We've only been programming in high level languages for 60-70
         | years. All the while Moore's law has been in effect.
        
           | narag wrote:
           | My two cents: is that really the problem? I don't think so.
           | 
           | I mean that the non-creative part is the problem. Why would
           | anybody want to eliminate the creative part and leave the
           | mindless factory-like part?
           | 
           | And there is a huge non-creative, tedious work in
           | programming. A lot of workarounds, minutiae, leaky
           | abstractions, kludges and plain simple idiocy that doesn't
           | get removed because "it's too much work".
        
           | pvarangot wrote:
           | Music has remained pretty much a creative thing through most
           | exponential explosions of technology that affected it
           | profoundly. What's the most crazy futuristic scenario where
           | software engineering stops being a creative field?
           | 
           | We have programming languages for creating and evolving
           | organic lifeforms? You are basically creating plants, pets,
           | "superworkers" or "super soldiers", or artists? That's going
           | to still be creative. Like raising a child is creative. Same
           | thing for stuff that can have an ego driven consciousness
           | like most forms of AGI.
        
           | ftio wrote:
           | Oof. I have no idea. But since it'll be fun to guess:
           | 
           | Absent some kind of magical (from today's POV) AGI, I think
           | I'd probably say yes, but I'm not sure that means software
           | engineering will continue to look the way it does today, at
           | least not universally.
           | 
           | My expectation is a pretty linear extrapolation of history. I
           | think new tools and higher levels of abstraction will emerge
           | that will make certain types of tasks unnecessary or a lot
           | faster. We'll still need people working on compilers and
           | embedded software, but a lot of really basic forms of
           | software development (think Excel replacements) will be A LOT
           | faster and easier to do.
           | 
           | Fundamentally, though, business problems are really fucking
           | specific, and you need a really fucking specific language to
           | express and solve those problems. The process of applying
           | those languages to problems is a creative one. I don't think
           | this dynamic will change for a really long time, if ever.
        
             | svachalek wrote:
             | That's what tools like Visual Basic and Delphi were meant
             | to do, and actually were pretty good at for their time. As
             | far as I can tell, we still haven't nearly caught up to the
             | browser/cloud equivalent of these tools.
             | 
             | Things need to sit still for a while longer I guess, but I
             | think there's also some industry changes to blame. In the
             | 90s there was big money in making tools and components for
             | software engineers, while nowadays everyone just uses the
             | best free thing they can find. Granted the free things are
             | way better than they were in the 90s, but I think they're
             | largely killing the market for better things that cost
             | money.
        
           | sanderjd wrote:
           | I think doing the engineering design of structures and
           | machines (buildings, bridges, engines, etc.) is still a
           | creative endeavor after many hundreds of years, and I think
           | this is the closest analogue to what software engineers do.
           | The difference is that once we have the blueprints drawn (ie.
           | the code written), a computer can just execute them rather
           | than requiring a lot more material and labor inputs. Program
           | execution is the right analogue to manufacturing, not program
           | creation.
        
             | notJim wrote:
             | I agree with this, but those things have also moved from
             | essentially being artisanal to being more formalized and
             | scientific. I don't think we're at that point in software
             | engineering.
        
               | sanderjd wrote:
               | We're definitely earlier in the timeline with software
               | engineering, but I personally think it seems like
               | structural and mechanical engineering designs are a lot
               | more "artisanal" than is the general conception.
               | Certainly the primitives involved are very well
               | understand scientifically (and this is where we're
               | definitely a long way behind them), but the specific
               | combinations of those primitives strike me as remaining
               | very bespoke and creative, as does the process for
               | creating the designs. All of this looks familiar to me,
               | just further down the maturity timeline.
        
           | spaetzleesser wrote:
           | "Do you think software engineering will remain a creative
           | endeavour in the future?"
           | 
           | I would think so. If something can be automated or be done
           | with a reproducible process it will get automated or
           | performed by lower paid people. But I can easily see how
           | software and automated processes will reach a point of "good
           | enough" for most purposes sometime in the future and there
           | will be much less software engineers doing creative work. For
           | example I would expect a lot of repetitive front end backend
           | work will go away.
        
             | justanotherguy0 wrote:
             | I would expect the opposite. As the mechanical stuff
             | becomes cheaper and more automated, the creative work
             | decreases in proportion but increases in absolute terms.
        
         | jeddy3 wrote:
         | I seems like many posters in this thread try to classify
         | software enineering as either creative or "mindless factory-
         | work".
         | 
         | Where actual enineering disciplines has the risk of removing
         | the creative part.
         | 
         | I think this classification is wrong. There IS NO mindless
         | factory-work.
         | 
         | Just as in other enineering disciplines, our work is not
         | manufacturing. It's just that the actual manufacturing does not
         | exist (or rather is done by compiler)
         | 
         | Software enineering can (just like other enineering) be:
         | - more scientific       - more pragmatic       - helped by
         | formal methods
         | 
         | without removing the creativity.
         | 
         | Just as "other" enineering (like software):                 -
         | is highly creative       - can be artisanal (if wanted, rarely
         | in all projects)
         | 
         | I REALLY feel we can mature in SWE without being afraid of
         | losing creativity.
        
           | hwayne wrote:
           | Agreed; a while back I interviewed of ex-trad, now-software
           | engineers and found out that                   1. Engineering
           | is a lot more personal and creative than we think         2.
           | A large amount of software development is very similar to
           | trad engineering         3. Never walk over a bridge.
        
           | [deleted]
        
           | madhadron wrote:
           | > It's just that the actual manufacturing does not exist (or
           | rather is done by compiler)
           | 
           | In good conditions, yes, the drudgery is all done by the
           | compiler. There's still a terrifying number of cases where
           | something hasn't been automated and still qualifies as
           | factory work.
        
         | pmarreck wrote:
         | I can prove that languages may differ in productivity (without
         | regards to other variables like the ones you mention) with a
         | simple "proof by extremes": No one would likely dispute the
         | fact that it will be more productive overall to code in
         | Javascript than in Brainfuck (although perhaps not by much).
        
         | Karrot_Kream wrote:
         | > do not believe in the possibility of a "General Theory of
         | Productivity." I'm highly skeptical of attempts to quantify the
         | precise relationship between error discovery stage and cost in
         | a way that is generalizable, although I think it might be
         | possible given a large group of engineers using a highly
         | homogenous process, tools, and accounting. Google is pretty
         | close to this (common dev infrastructure across tens of
         | thousands of engineers), and even across Google this kind of
         | generalization would be extremely difficult.
         | 
         | I don't think you are incorrect, but I think a lot of the
         | aspirants behind ESE just want to have a better sense of what
         | works and what doesn't; I'd even welcome negative results! The
         | current state of things is to read 100 opinionated people and
         | their blog posts. And given enough time, you'll encounter
         | someone who swears that after drinking their morning coffee and
         | jumping on one foot for 1 min, they enter a VRChat standup with
         | their team and hit max flow. There's just so little knowledge
         | right now about what works and what doesn't that I'd welcome
         | more clarity, especially negative results.
         | 
         | > As a result, academic research into productivity can be
         | difficult to generalize
         | 
         | I think defects are what we should measure for, not
         | productivity because of the subjectivity of measuring
         | productivity. But even measuring defects is complicated. The
         | best way I see to measure defects is to ask a Team Under Test
         | to document bugs that they encounter along with resolution
         | times, but this is not only expensive, but something I doubt
         | most corporations will be willing to share outside of their
         | walls. Perhaps open source projects can try to store this data,
         | like curl's stats [1].
         | 
         | [1]: https://github.com/curl/stats
        
         | musicale wrote:
         | > Commercial software engineering is a creative endeavor; it is
         | not a science, nor is it a manufacturing process
         | 
         | Exactly. And it's less like movie production and more like
         | 4,000 people trying to collaborate to produce a million-page
         | novel.
         | 
         | It does bear some resemblance to design and engineering, but
         | with custom materials and components that have never been used
         | before and need to be created specifically for the project.
        
           | osigurdson wrote:
           | Generally, analogies to software engineering are not helpful.
           | 
           | Certainly, software engineering may be a little like problem
           | domain A, B and C but probably less so than we think. After
           | all, how acute is our knowledge of these problem domains to
           | begin with?
        
           | pas wrote:
           | Hm. Every action movie is different, but similar. Every
           | apartment complex is different, but similar. Every webshop is
           | different, but similar.
           | 
           | Yes, usually if you have a bad scene it rarely matters, if
           | you have a lot of amazing ones too. And amazing actors, and
           | editing, and ... Similarly, if you build a nice condo, if one
           | face of it looks bad from the street, but the internal
           | spacing of the units are great, then it's still a success.
           | And if your checkout page is shit, but you have amazing
           | search, good prices, great quality products, then your shop
           | is generally great.
           | 
           | Of course this makes it sound like engineering, or a specific
           | profession (like that of plumbing, HVAC, electrician
           | tradespeople). It's always never an end in itself. It's
           | complex like a bridge or a dam, sure, but without looking at
           | the big picture (traffic, environment, costs, environment,
           | etc..) it cannot be really evaluated. Even safety eval
           | requires assumption (100 year floods, wind loads, min max
           | temperature, max. traffic load, max ship height under the
           | bridge, max electricity load).
           | 
           | And there are patterns, architectures, frameworks. (Like
           | building codes.) There are audits (pentests, like the
           | collision tests for new cars, or synthetic load testing for
           | new sites).
           | 
           | The big difference is that usually movies are done in a few
           | years. Scope change rarely affects bridges. After the basic
           | outline of the dam is checked for basic structural sanity,
           | it's done. After a condo master plan is approved the changes
           | are minimal (because there have been many lives lost due to
           | deviations from the plans).
        
           | madelyn wrote:
           | I mean, considering how much code, especially scripting and
           | pipeline work, is required to produce most modern movies,
           | these days most movies are programming projects in one way or
           | another.
        
       | aeturnum wrote:
       | Software engineering research is immature and, as such, has few
       | (no?) strongly-supported claims that the entire field relies on.
       | I agree this is a frustrating state of the field, but the way
       | this is written makes the author appear to be unfamiliar with the
       | state of things.
       | 
       | For example:
       | 
       | > _Did I mention that all three of those papers use different
       | definitions of "defect"?_
       | 
       | This kind of thing is really common in academia. I do not know
       | software engineering research in detail, but there are older and
       | more basic definitional fights in the social sciences. Defining a
       | defect, as I'm sure the author of the blog would agree, is not a
       | trivial decision.
       | 
       | In general, this piece contains (perhaps hyperbolic?) dismissals
       | of people trying to do work. It doesn't seem to respect what I
       | imagine is earnest effort. Taken all together, it seems like the
       | author either thinks the entire field is charlatans (which I
       | doubt as they use the fields' conclusions at the end) or is
       | making light of people working on problems they themselves do not
       | have answers to in order to have a more lively writing style. It
       | was fun to read and left a bad taste in my mouth.
        
       | jeffreyrogers wrote:
       | I was reading this thesis the other day[0], which is on precision
       | machine design. It got me comparing precision machine design to
       | software engineering.
       | 
       | A big part of why we're able to design extremely precise machines
       | (the author worked on a lathe used for machining optical parts
       | for the National Ignition Facility) is because we can
       | characterize exactly where errors will come from (e.g. structure
       | isn't rigid enough, temperature variation causes parts to expand
       | by different amounts, parts not round or flat enough, etc.). Once
       | we know what errors we need to control and their rough order of
       | importance we can start improving the machine design to control
       | them better.
       | 
       | In theory, something similar could be done in software
       | engineering (formal methods are part of this, but not a full
       | solution). Rather than an error budget, you'd have some sort of
       | bug budget, where you tracked what sort of bugs were caused by
       | what sort of constructs, and design your program in such a way to
       | minimize their chance of being introduced. I've never heard of
       | anyone except Dan Bernstein[1] actually doing anything
       | approximating this. Probably because the perceived level of
       | effort is too high.
       | 
       | I actually don't think it would take that much _effort_ , but it
       | would require quite a bit of organization to track where bugs are
       | introduced and what their root causes are. This is probably why
       | Bernstein, an individual, is able to do this, while no large team
       | (that I'm aware of) has done anything similar.
       | 
       | Of course, just like your toaster doesn't need to use precision
       | machine design techniques (an over-engineered toaster is a bad
       | toaster), most software doesn't need the effort/expense of a
       | rigorous design process either, but some would benefit from it.
       | 
       | [0]: https://dspace.mit.edu/handle/1721.1/9414
       | 
       | [1]: https://cr.yp.to/djb.html
        
         | [deleted]
        
         | stonemetal12 wrote:
         | > Rather than an error budget, you'd have some sort of bug
         | budget, where you tracked what sort of bugs were caused by what
         | sort of constructs, and design your program in such a way to
         | minimize their chance of being introduced.
         | 
         | Aren't we more or less doing that at the language level? C had
         | lots of memory bugs, so C++ tried to fix it with collections,
         | iterators, and smart pointers. It was still hard, so Java came
         | along with GC and null ref exceptions. The situation was less
         | bad, but multithreading became popular and Java didn't help as
         | much as we would like so the Rust people gave it a go.
         | 
         | Though I really do suggest trying it yourself. If you want to
         | be a better programmer, developing a style that minimizes bugs
         | you write is pretty much pure win.
        
           | likeabbas wrote:
           | This would make sense if we migrated existing software
           | projects to different languages.
        
         | shusson wrote:
         | > It got me comparing precision machine design to software
         | engineering.
         | 
         | I think the problem is that the failure of physical systems are
         | often caused by random failures, which can be tested for and
         | probabilities determined e.g how long before a bolt breaks.
         | This as opposed to software, which most often fail due to
         | systematic errors and cannot be tested completely.
        
           | jeffreyrogers wrote:
           | In precision machine design the failures are typically not
           | statistical (like in fatigue failures) but due to errors of
           | design. E.g. the tool spindle can maintain the desired
           | tolerance when running from a cold start but after several
           | minutes thermal effects cause it to be out of tolerance.
        
             | shusson wrote:
             | Yeah ok I did not know that, but compared to software it's
             | still practical to test the design for all known inputs.
        
         | snidane wrote:
         | Software errors which are traceable usually get dealt with with
         | ease. The remaining majority are unknown and governed by power
         | law - eg. a bug uncovers a major redesign, but there is no time
         | for rewrites so we have to roll along with it, complicating the
         | design until next big rewrite if it ever happens. Power law
         | phenomena are quantitatively untraceable. Averages mean
         | nothing.
         | 
         | Ergo software engineering is largely untraceable and better
         | treated as a discovery or research process. To make things
         | efficient, focus on removing impediments and continual
         | simplification, but don't expect to predict much in advance.
         | Unless it is an instance of a previous task, in which case why
         | isn't there a function/library/framework for it yet?
        
           | jeffreyrogers wrote:
           | This sort of thinking precludes the possibility of ever
           | developing better methods though. And this statistical
           | argument was actually quite common in machine design until
           | people started actually building machines that were more
           | precise than many believed possible. The thesis I linked has
           | examples of arguments analogous to what you're saying for why
           | precision machine design is impossible.
           | 
           | Edit: I don't mean to be too harsh, you could be right, but
           | software engineering is a young discipline. Mechanical
           | engineering is much older and it was only recently that
           | precision machine design became possible (and, just as
           | importantly, teachable). I believe software engineering has
           | the potential for a similar change in how it is done, at
           | least for projects that warrant it.
        
         | tephra wrote:
         | I just finished Donald Knuth's "Literate programming" book and
         | in there is one of the most wonderful papers I've read: "The
         | errors of TeX".
         | 
         | The version in the book goes up to 1991 but on ctan you should
         | be able to find "errorlog.tex" if you want to read the updated
         | (I think the last one is from this year) paper.
         | 
         | Knuth has documented every bug and feature fix in TeX since its
         | first version and categorised it into categories A-T.
        
         | indigochill wrote:
         | It's also difficult because software despite being a realm of
         | abstract constructs still exists in the physical world.
         | Hardware corruption can introduce bugs despite the software
         | being formally correct. It's fascinating learning about
         | hardware manufacturing for satellites and needing to build in
         | hardware redundancy and error checking for bits getting flipped
         | by solar radiation. And of course there was the famous
         | rowhammer attack.
         | 
         | So you need not just software expertise but also hardware
         | expertise if you're going to get serious about writing error-
         | proof code, which Dan Bernstein happens to have.
        
         | dangerlibrary wrote:
         | The FoundationDB team took a different approach, that I found
         | pretty interesting. They created a fully deterministic (single
         | threaded) simulation of a distributed database, and then use
         | that simulation to test their implementation of the database
         | under difference scenarios. They'd probably be interested in
         | something like what you describe, as the bulk of their work
         | seems to be rooting out and squashing bugs caused by factors
         | out of their control (dropped connections, etc.)
         | 
         | https://www.youtube.com/watch?v=4fFDFbi3toc
        
         | ska wrote:
         | > while no large team (that I'm aware of) has done anything
         | similar.
         | 
         | In areas like avionics, medical devices etc., there are formal
         | production engineering methods applied to software as a matter
         | of course. It can very work well, but it is definitely
         | expensive compared to industry average.
        
           | JimTheMan wrote:
           | I have my suspicion that medical devices aren't as rigidly
           | programmed as the general public would like. Ie programmed by
           | a biomedical/electrical engineer who isn't really a software
           | specialist. But I'd be keen to hear from someone in the
           | trenches.
        
             | ska wrote:
             | The industry changes slowly, and definitely regulators like
             | the FDA were too hardware focused for a long time. Less so
             | in the last 10-20 years.
             | 
             | They've always been pretty good about critical systems but
             | less so about "secondary" ones, and there are old devices
             | out there where it shows.
             | 
             | These days most of the industry has reasonable guidance and
             | standards to follow. Characterizing "the industry" is hard;
             | it includes cloud based data handling products and embedded
             | devices with minimal software, etc. - a huge range.
        
         | justicezyx wrote:
         | I happened to also delved into machining tools and work as SWE
         | full time.
         | 
         | This comparison to me, is not workable between machine building
         | and software.
         | 
         | So the difference is that machines do simple things and not
         | changing. But software do complicated things and always
         | changing.
         | 
         | You can easily understand which parts and/or ways of operating
         | that cause machine misbehaving. Because you have full grasp of
         | the parts and how they assembled and work
         | 
         | But you cannot achieve the same for software, as each time it
         | will be a new problem, or a new feature not working as
         | expected.
         | 
         | Actually, if you think a bit more, you might realize that we
         | actually cares very little about the microscopic features of
         | machines. For example, no one cares about screws, as long as
         | they are machined according to spec, and torqued correctly
         | during installation. The chance that a random screw to bring
         | down a whole machine is close to zero.
         | 
         | But any function in a software can bring down the whole
         | software...
        
           | MattGaiser wrote:
           | > as long as they are machined according to spec, and torqued
           | correctly during installation.
           | 
           | Isn't it more correct to say that nobody cares about screws
           | because we have worked out the problems with screws to the
           | point that we can trust they are machined to spec and torqued
           | correctly?
        
           | lolinder wrote:
           | > For example, no one cares about screws, as long as they are
           | machined according to spec, and torqued correctly during
           | installation. The chance that a random screw to bring down a
           | whole machine is close to zero.
           | 
           | This sounds like people _do_ care about screws. You identify
           | two specific failure modes: they could be machined
           | incorrectly, or they could be torqued incorrectly during
           | installation. In either case, it is entirely possible that a
           | single screw could cause the whole machine to fall apart
           | (depending on which screw fails).
           | 
           | Software is very similar. The smaller the function, the fewer
           | things that could possibly go wrong (similar to a screw) but
           | there's always the possibility that _something_ goes wrong.
           | Like screws, some functions won 't do much harm if they're
           | wrong, but some are keystones that, if they fail, will bring
           | the whole thing down.
        
             | eschneider wrote:
             | Depending on your application, you learn to care very, very
             | deeply about screws and bolts. Screw and bolt failures kill
             | people, and they usually fail in conjunction with other
             | design mistakes. Like software, it's not just one thing and
             | you do need to sweat the details.
        
               | lolinder wrote:
               | Yep. I think we have a tendency to assume that our field
               | is somehow unique, because we know it so intimately.
               | "Everyone else has it simpler."
               | 
               | The actual fact is that everyone else has it just as
               | complicated, but we never see that complexity because
               | it's not what we are experts in.
        
             | sly010 wrote:
             | Have you heard about jesus nuts? [0]
             | 
             | [0] https://en.wikipedia.org/wiki/Jesus_nut
        
           | ska wrote:
           | > For example, no one cares about screws, as long as they are
           | machined according to spec, and torqued correctly during
           | installation.
           | 
           | This just isn't true. Off the top list:
           | 
           | - are they the right spec for the load
           | 
           | - are they the correct material and finish for environment
           | 
           | - do they have the right head (for manufacture, but also
           | support, etc.)
           | 
           | - what vendor options do we have (the more unusual, the more
           | this gets interesting) and what risk
           | 
           | - are the manufacturing SOPs correct for this
           | 
           | - are the manufacturing SOPs being followed
           | 
           | - etc.
           | 
           | And that's the simple things like screws. You may not care
           | about any of this stuff until it fails; but if nobody cares,
           | things will fail.
           | 
           | The _real_ difference between stuff like this an software
           | engineering is that in far more cases for hardware an
           | engineer can look up the correct solution and use it. You
           | still have to care enough to check that, and check it against
           | any change, etc.
        
           | hwayne wrote:
           | One of my favorite online discoveries is Fastenal labs, where
           | they talk about properties of screws. Here's one that says
           | your machine can break because you put a stainless steel
           | screw through an aluminum plate:
           | https://www.fastenal.com/en/70/corrosion
        
           | [deleted]
        
           | jamincan wrote:
           | A random screw can have a huge difference. Just pull up
           | McMaster-Carr and look up the hundreds of different types of
           | fasteners that all have different properties that make them
           | suitable in some cases or others. Someone has to choose the
           | screw, and it's not necessarily a straightforward choice.
        
       | TeeMassive wrote:
       | The only truths that I've known so far to be true:
       | 
       | 1) Small patches with quick feedback
       | 
       | 2) Automate the manual stuff, even if you're not doing it often
       | you'll probably like having that script ready and tested when
       | you'll have to do it again in one year.
        
       | qznc wrote:
       | Greg Wilson is more positive. Though he does agree that nobody
       | cares.
       | 
       | https://third-bit.com/2021/07/17/software-engineerings-great...
        
         | dang wrote:
         | That (or more likely https://www.youtube.com/watch?v=HrVtA-
         | ue-x0 since that's where the info is) would make a good HN
         | submission in its own right. Probably best to wait a few days
         | to let the hivemind caches clear (followup/copycat posts aren't
         | great: https://hn.algolia.com/?dateRange=all&page=0&prefix=true
         | &sor...).
         | 
         | If you submit it, let us know at hn@ycombinator.com so we can
         | put it in the second-chance pool
         | (https://news.ycombinator.com/pool, explained at
         | https://news.ycombinator.com/item?id=26998308), so it will get
         | a random placement on HN's front page.
        
           | hwayne wrote:
           | This is a cool system!
        
         | jdlshore wrote:
         | I'm skeptical of Wilson's reporting. One of his quoted studies
         | looked interesting (slide 20, Fucci 2016, "An External
         | Replication on the Effects of Test-driven Development Using a
         | Multi-site Blind Analysis Approach"), so I looked it up.
         | 
         | Wilson describes that study as involving 39 professionals on
         | real projects.
         | 
         | But when I looked at the actual study [1], it involved 21
         | graduate students working on two toy problems, the Bowling Game
         | kata and "Mars Rover API." This is a disappointing
         | misrepresentation of the study.
         | 
         | A charitable interpretation is that he was referring to a
         | different study, and accidentally put the wrong reference on
         | that slide. Or maybe the actual talk explains the difference.
         | I'm not sure--I didn't look deeper.
         | 
         | [1] http://people.brunel.ac.uk/~csstmms/FucciEtAl_ESEM2016.pdf
        
       | Joeri wrote:
       | I went into this software engineering productivity research
       | rabbit hole a decade ago and came away similarly depressed with
       | the lack of rigor in our field.
       | 
       | What I've come to believe:
       | 
       | - Software engineering is not an engineering discipline, it is a
       | craft. It may or may not one day become an engineering
       | discipline, I find this impossible to tell.
       | 
       | - The difference between a feature and a bug is largely one of
       | semantics, not of substance. A defect is a mismatch between
       | expected behavior and actual behavior. A bug is when the
       | expectation was that of the programmer that wrote the code. A
       | feature request is when the expectation was that of a user. There
       | is no real difference for the user between a missing feature and
       | a broken feature. Hence why we so often get side-tracked into
       | fruitless "bug or feature" discussions and why users don't care
       | when we say it is by design.
       | 
       | - Errors will happen. People are flawed and produce errors at a
       | more or less set average rate for each person (unless they're
       | tired or enjoying a ballmer peak). Errors in every step of the
       | process, from design to deployment, are inevitable. We can
       | however catch these inevitable errors, with automated error
       | detection tools, or by having a fresh set of eyes look at the
       | work. The consequence is that making high quality software
       | necessitates taking a look at the whole process and introducing
       | error detection steps in every part of it, whether they be
       | automated like linters and unit tests, or human like design and
       | code review or mentoring and pair programming.
       | 
       | - Errors in design are more costly because they cause entire
       | features to need to be written or rewritten, which is the most
       | costly kind of defect to resolve. We do not need research to know
       | this to be true. We solve this by having short feedback loops
       | with real users, which is the only real form of agile
       | development.
        
       | walshemj wrote:
       | The Bug Vs Defect made me laugh back at my first job we partnered
       | with the BSI to do research that went into BS5750 / ISO 9000.
       | 
       | The Head of software side at the BSI commented that tat for old
       | timers in QA - software was odd as they "did not know wear to
       | hang the defect tags"
        
       | mkl95 wrote:
       | A lot of software in production is designed like a bunch of
       | railroads that are unnecessarily twisted and dangerously run into
       | each other for no apparent reason. So train wrecks are to be
       | expected.
        
       | aranchelk wrote:
       | > The average developer thinks empirical software engineering is
       | a waste of time.
       | 
       | Bold claim. Any data at all to back that up?
       | 
       | My guess based on experience would be most developers are
       | unfamiliar with the term and haven't made a judgement one way or
       | the other.
        
       | [deleted]
        
       | mcguire wrote:
       | " _Here's the only technique I've found that works, which I call
       | scrobbling even though that means something totally different:_
       | 
       | " _1. Search seed terms you know, like "cost of bugs", in an
       | appropriate journal (here's one)._
       | 
       | " _2. Find papers that look kinda relevant, skim their abstracts
       | and conclusions._
       | 
       | " _3. Make a list of all the papers that either cite or are cited
       | by these papers and repeat._
       | 
       | " _4. Find more useful terms and repeat._ "
       | 
       | Congratulations! You're a grad student now!
       | 
       | P.S. When I graduated, I had a filing cabinet with two drawers
       | full of papers that felt important enough to save printed copies,
       | from just this process. A couple of months ago, I carted them out
       | to the burn pile, threw them on the pile of leaves and brush, and
       | held a Viking funeral. And I didn't even feel bad. :-)
        
         | hyperhopper wrote:
         | The problem stated is that instead of being able to find widely
         | cited or good papers, any amount of research involves trudging
         | through hundreds of bad, off topic, outdated, unrelated, or
         | otherwise useless papers, just to get an idea of what is being
         | talked about in the field. And even when getting there, what
         | you find may be completely non-practically relevant in the end.
         | 
         | Just saying "yeah thats how things work in academia" Doesn't
         | help anything; this article is pointing out a very real
         | problem: the state of things now is a mess.
        
         | anonymousDan wrote:
         | If you're really in a hurry, filter out all those not published
         | at top venues (e.g. ICSE or FSE as top tier for SW engineering,
         | or ASE ISSTA the tier below), or at the very least cited by
         | several papers at top venues.
        
         | titzer wrote:
         | My impression on reading this list was, uh yeah, there's no
         | avoiding that. Except if you know an expert. Then just ask an
         | expert.
         | 
         | Search engines for papers suck, bad. At the fringes of human
         | knowledge, you need an actual brain to process cutting-edge
         | research. Either your own non-expert brain, or an expert brain
         | to help guide you.
         | 
         | That process is the same in every field. Older fields have
         | textbooks with knowledge distilled from experts. That's a good
         | place to start to get the state of the art > 20 years ago.
        
         | hwayne wrote:
         | I got into software specifically because I _didn 't_ want to go
         | to physics grad school, and now I read more papers than I ever
         | did in physics. Man plans, God laughs.
        
       | blunte wrote:
       | > But first you gotta find the primary sources.
       | 
       | Yeah, and the real primary sources are the companies building and
       | running software. They don't have time or interest in the long
       | term research. And likely they aren't even concerned with their
       | own technical situation 12 months in advance. They just need to
       | "deliver", they think.
       | 
       | So unless you can find some clever way to gather all their data
       | (Sentry, AppSignal, ...?), you will never know what's really
       | happening in most places. Your research will be artificial
       | without that real world data.
        
       | cycomanic wrote:
       | I found the complains about how reading papers, do literature
       | research, evaluating papers and the field etc., is difficult
       | somewhat amusing. That's actually what a large portion of the PhD
       | education and becoming an academic is about. Yes, it is not easy,
       | if it was a PhD wouldn't take between 3 and 6 years.
       | 
       | Generally, the author makes some good points and there is
       | definitely often a disconnect between academia and industry. I
       | think it is important to remember that science is much more like
       | a directed random walk toward an unknown goal. If industry wants
       | specific answers to specific questions they could (should)
       | finance the studies that provide them the answers. However, my
       | impression is that when industry finances significant studies it
       | is much more toward validating/confirming their already
       | established practices, products... (the topic of these "bought"
       | studies is another can of worms in the topics of academia and
       | industry interactions)
        
       | lifeisstillgood wrote:
       | My two cents: Software is a form of literacy not engineering. One
       | good bridge looks and acts almost exactly like every other bridge
       | in the world. Good software that does a given job can be
       | unrecognisable compared to other good software that does exactly
       | the same job.
       | 
       | Software is more like a novel than a bridge.
       | 
       | Maybe, maybe we can apply engineering terms to machine code or
       | assembly. But the abstract levels we all work at - not a hope.
       | 
       | I mean this is a good thing. It changes how we think about
       | software - engineering has changed the world - and it's in the
       | hands of a few professionals. Imagine software in the hands of
       | ... everyone. It's like Eric Idle gather mud in the Dark Ages
       | imagining what a literate world that reads the New york times
       | will be like
        
         | hwayne wrote:
         | > My two cents: Software is a form of literacy not engineering.
         | One good bridge looks and acts almost exactly like every other
         | bridge in the world. Good software that does a given job can be
         | unrecognisable compared to other good software that does
         | exactly the same job.
         | 
         | 1. This is false. One of the reasons making bridges is so
         | expensive is because each bridge is a precious special
         | snowflake with lots of challenges specific to that bridge
         | project _and no other bridges._
         | 
         | 2. Bridge building is a very small part of civil engineering,
         | and civil engineering is a very small part of traditional
         | engineering. Maybe software is more like process engineering,
         | or chipset design, or subsystem integration, or workflow
         | optimization.
        
           | lifeisstillgood wrote:
           | 1. I agree bridges have special challenges, but ... well for
           | 2,000 years there was a keystone, and an arch. Yes the soil
           | and the land were challenging, but I find it hard to argue
           | that every stone bridge was a special snowflake. Snap a
           | supporting cable on any suspension bridge and they all have
           | the same failure mode. I think we are stretching analogies -
           | is "build a CRM for the sales department" simple as in "there
           | is a keystone data design common across all CRMS - and all
           | the rest is "shifting sands of the river are same as shifting
           | alliances in the boardroom"
           | 
           | I just try to keep this simple. Coding uses symbolic
           | representation to describe a model - this is what _language_
           | is. Compilers do  / can do things that simply don't exist
           | conceptually in Engineering.
           | 
           | Coder manipulate symbols. It really is a language thing.
           | 
           | 2. yes. I was just using bridges as an example of
           | engineering. As CRUD websites are an example of software
           | engineering.
        
             | lolinder wrote:
             | > I just try to keep this simple. Coding uses symbolic
             | representation to describe a model - this is what language
             | is. Compilers do / can do things that simply don't exist
             | conceptually in Engineering.
             | 
             | > Coder manipulate symbols. It really is a language thing.
             | 
             | What is conceptually different here between software
             | engineering and civil or mechanical engineering?
             | 
             | Engineers use symbolic representations (math, diagrams,
             | computer models, etc.) to describe a model of what will
             | eventually be manufactured or built in the real world.
             | They're typically not the people who actually build the
             | thing, they're the ones who describe it in sufficient
             | detail that someone else can build it. This is as much a
             | language problem as it is in software. The designs need to
             | be readable by the entire team of engineers as well as the
             | people who will make the design real.
             | 
             | The primary difference I see is that in software
             | engineering, the "someone else" who will build the thing is
             | a computer program called a compiler rather than a factory
             | worker or a construction crew.
        
         | mym1990 wrote:
         | But the risk is that bad software or a bad bridge can pose as
         | good software or a good bridge until something catastrophic
         | happens.
         | 
         | Software might be more like a novel if you are consuming the
         | code/design, but to write a good novel one must be far more
         | than just literate.
        
       | IshKebab wrote:
       | This tallies with my experience. It isn't early _bugs_ that are
       | expensive to fix. It 's early design mistakes. For example
       | choosing the wrong language, framework or architecture.
       | 
       | Dropbox using Python is a good example. Or Python's GIL.
        
         | foobiekr wrote:
         | The GIL is a good example because it removed optionality from
         | Python by having its semantics leak out. Using a poorly
         | performing tool is a different problem entirely.
         | 
         | Most of the really horrible errors in SW design involve choices
         | where the semantics above will be visible and encoded as a
         | subtle (or not so subtle) dependency that cannot later be fixed
         | without an infeasible level of effort. I deal with these
         | regularly and they are the true original sin in most sizable
         | software projects.
        
         | klysm wrote:
         | They aren't really exclusive at all. Early design mistakes can
         | also be really expensive, but a really scary bug that nukes all
         | your data could also suck.
        
           | IshKebab wrote:
           | They mean the cost of fixing the defect, not the severity of
           | bugs.
        
       | truenindb wrote:
       | this problem where published science is often wrong and you don't
       | need to actually be an engineer that history will not record the
       | name of is completely new, and also, airplanes are impossible and
       | where actually invented by The Wright Bros, because they had the
       | Wright stuff, right?
        
       ___________________________________________________________________
       (page generated 2021-07-20 23:00 UTC)