Live data from Hacker News

Why writing software is not like engineering (2008)

cs.usfca.edu

51–60 of 62 posts

Re: Why writing software is not like engineering (2008)

#51
I designed buildings for 5 years and switched into software for cultural reasons. Traditional engineering and software are extremely similar. The mindset of successful engineers and developers are virtually identical to the point where if you showed me a great developer I would be willing to bet that they would be a great traditional engineer and vice versa [all else being equal]. Even the organization of how people work together while not exactly the same is quite similar in that many traditional engineering firms will have a technical PM or project lead role and several junior engineers etc. Both industries have the same notorious technical vs management fork. Trad jr engineers will need to work cross-functionally with other non-technical groups like architects and contractors just like their developer counterparts work with marketing/sales people etc.

The way we approach problems is the same. We are not doing research or science. We are using our judgment to pick a particular solution from a large solution space to a problem(s) that must meet different user specifications/requirements.

Don't get me wrong there are massive differences but IMO they are largely cultural and macro economic related. I'll get to this in a bit but first I want to rant about what the author misses.

The author is conflating levels of design abstraction. He sees that traditional engineering has coordinated on common engineered components for example the Bethlehem Steel plant was so prolific it became the de facto standard for steel wide flange shapes for the whole country. So the author is correct in that now since engineers aren't busy designing every single minutia of every beam like they did back in the day when there were no standards they can start from a higher complexity point and focus on more complex designs. However, software developers can do the exact same thing. Software definitely has "engineered components" we call them frameworks, libraries, modules etc. They allow us to "spin" up new tools and working concept level designs very quickly since we're not busy coding all of our data structures from scratch every single time.

I'm not going to get into his risk argument since I'm already ranting too much, am lazy and it's a complex topic but I'll just say that the ability to revert a software project back a couple months means you only really lose labor/productivity and not capital. Reverting a building or part of one back a couple of months is a nightmare scenario and on average "rework" is ~25% of a typical construction project's final cost (this includes both capital and labor costs but the point still stands).

The midcourse design change argument is flat out wrong. I've been on several large projects that never got built or were unrecognizable from beginning to the final product. There are many reasons for this but traditional engineering design software is mostly to blame since there's more flexibility now (compared to the 1960s) in how people can render buildings so as a fraction of a projects lifespan projects stay in the "development" phase much longer as opposed to the "building" phase which means designers can change A LOT of the project before they need to get buy in from all construction parties and agree on what they're all building. This is one reason among many why construction productivity has gone down and costs have gone up.

Alright so what are the biggest differences between traditional engineering and software development? IMO the macro economic moment means that software is higher reward financially which means that software developers have TONS of room to grow in their field either technically, managerially, operationally, professionally etc. There's A LOT of choice and room on where you can take your software development career. This is not so on the traditional engineering side of things. There is limited growth so many many firms are top heavy and put in de facto brakes, check boxes and licensure requirements on the career ladder since there simply isn't enough room for the new incoming grad class every year. It's essentially a pyramid scheme. This makes the work culture very traditional, stagnant, and risk averse. Nobody wants to fall out of line because they can be replaced. There aren't interesting niches to explore or exploit since everything is very full and competitive.

The growth in software allows developers the breathing room to sharpen their skills and generally the culture in software really encourages this self improvement. Not so in traditional engineering. Gaining productivity in some new skill means rocking the boat and challenging orthodoxy. The margins are already slim and the boss really needs the reliable bonus he's been depending on so why take a chance on something new? Just wait your turn in line like he did.

Allowing developers the time to build technical skill means there's incentive for employers with larger margins to leverage those skills. So developers get more responsibility this is a virtuous cycle which leads to faster career growth. IMO junior devs get much more responsibility earlier in their career than their traditional engineering counterparts.

My take is on the pessimistic side but I can't in good faith encourage a smart, ambitious, technical/analytical person to go into the traditional engineering disciplines. EE/CS as far as I can tell is still the best route.

Re: Why writing software is not like engineering (2008)

#52
Earlier this year I wrote a piece interviewing ex-traditional engineers to compare and contrast with software engineering. [1] Pieces like this were a lot of my inspiration: there's big difference between how we conceive of trad engineering and how it's actually practiced. Couple of misconceptions from this piece:

> Engineering is less risky than software because engineering experiences fewer constituent component interactions. While minor changes to one part of a car's structure can easily affect the crash robustness of another, it would be unusual for a design flaw in the dome light to cause intermittent engine stalls. In a home construction project, you would have to work pretty hard to make a toilet flush every time someone rang the doorbell.

While software has more "component interactions", each component is also more consistent than physical components can be. One example: using stainless steel screws on an aluminum plate can cause your building to collapse. [2] That's a bit of an extreme case, but many fields of engineering, like electrical and chemical, regularly struggle with small changes leading to wild differences in the emergent phenomena.

> The final reason that software is more difficult to get right than engineering projects concerns midcourse design changes. The physical world is not as malleable as the insubstantial world of software and, consequently, clients simply have lower expectations. Congress does not go to NASA halfway through a moonshot and ask them to go to Mars instead. Most engineering projects are able to actually use the waterfall design method: determine functional requirements, design, implement, test. For most software projects, this is a recipe for disaster.

Very few projects are built using "waterfall", and everybody I interviewed had horror stories of requirements changing mid-construction. At least a couple people I talked to had to move buildings after they were built. One ex-industrial engineer worked for Boeing and his sole job was to manage midcourse design changes.

One story I didn't put in the essays: a naval engineer worked on an oil rig. They needed to add a new piece of equipment, but it would have caused the rig to violate certain liveability constraints. It could stay on for short periods of time, but not 24/7. So they built a nearby platform to store the equipment, and then airlifted it in by helicopter every time they needed to use it, and airlifted it out immediately right after.

> Writing software is most similar to writing fiction novels.

Almost everybody I interviewed said that writing software was very similar to their old work in engineering. A lot of people I've talked to outside the project said it was most similar to cooking, or planning an event, or doing surgery, or whatever. Most fields are like other fields, which is why interdisciplinary studies teach us so much.

[1] https://www.hillelwayne.com/tags/crossover-project/

[2] https://www.fastenal.com/en/70/corrosion

Re: Why writing software is not like engineering (2008)

#53

Earlier quoted context omitted.

You can't be both a craft and engineering. I think the issue is misunderstanding what it means for something to be engineered. There is a correct answer. (Especially because you can always optimize for cost or a different quality metric)

You are so wrong. Software is both a craft and engineering. All software fits your definition of cost and quality optimization. It is a craft in that a software engineer isn’t taught how to write the software you want, they’ve built a toolbox from crafting different types of solutions because their existing tools didn’t fit.

The optimization is complete in engineering. In programming optimization is optional and unless you are doing safety critical C or assembly, it's not truly optimized.

Re: Why writing software is not like engineering (2008)

#54
post #48

Earlier quoted context omitted.

You can't be both a craft and engineering. I think the issue is misunderstanding what it means for something to be engineered. There is a correct answer. (Especially because you can always optimize for cost or a different quality metric)

Many mechanical and electrical engineers see their work as craft.

Lots of engineers suck, and they often don't actually do engineering.

Re: Why writing software is not like engineering (2008)

#55
post #48

Earlier quoted context omitted.

You can't be both a craft and engineering. I think the issue is misunderstanding what it means for something to be engineered. There is a correct answer. (Especially because you can always optimize for cost or a different quality metric)

Many mechanical and electrical engineers see their work as craft.

I started as an EE (actually, as an electronic technician). I never came up through the "traditional" CS tree.

As a result, I regularly see the insides of many snotty noses. It was the main reason that I stopped looking for work in the field; but I was shipping stuff from my very first project[0]. My entire career has consisted of architecting and implementing shipping solutions.

Meh. Whatever creams your Twinkie. I'm not losing much sleep over it, but it is annoying.

[0] https://littlegreenviper.com/TF30194/TF30194-Manual-1987.pdf (Downloads a PDF)

Re: Why writing software is not like engineering (2008)

#56

Earlier quoted context omitted.

You are so wrong. Software is both a craft and engineering. All software fits your definition of cost and quality optimization. It is a craft in that a software engineer isn’t taught how to write the software you want, they’ve built a toolbox from crafting different types of solutions because their existing tools didn’t fit.

The optimization is complete in engineering. In programming optimization is optional and unless you are doing safety critical C or assembly, it's not truly optimized.

Wat?

Re: Why writing software is not like engineering (2008)

#57
post #5

Most engineering projects have standards. Not the cutting edge stuff, but most of it does. Many are from regulations and safety laws setting specifications for this and that, but some are simply there because they won by being the most popular. Software Development by contrast has no standards. You can hire two different enterprise sized companies with this and that certification in the exact same technologies, who c…

Standards can only happen when an industry has matured and moves slow enough for these standards not to be obsolete by next year. We have plenty of laws and standards regarding handling private information, payment systems, independent pen testing and so on. So it's incorrect to say we have "no standards" at all. Where it matters, we do. But to try and standardize a process that's evolving faster than a standard can…

There's also the issue of certain huge companies deciding that they don't care about worldwide accepted standards used by literally everyone else besides them, and would rather just ignore the standards and do things their own way, or undermine/corrupt an existing standard, or create their own "de facto standard".

Re: Why writing software is not like engineering (2008)

#59
post #12

Earlier quoted context omitted.

It happens with slow technologies that ought to have standards as well. I do work with OS2.eu (Danish public sector owned open source software organisation) and we recently brought the first project into multiple supplier territory. It’s a Drupal PHP project, and as I understand that means that everything that gets build should follow Drupal standards that are pretty much set in stone. After 6 months of governance go…

It's silly to standardise on a technology. Standardise on the output definitions: accessibility, performance, ergonomics, compatibility. In construction a standard isn't "use this make of hammer". It's "achieve this effect".

The standard in building is: “install this type of power outlet here”. Or “install power cables between a and x, capable of carrying a”.

We have somewhat similar standards in software development. Like, “build this type of API here, capable of handling this type of data model”.

The issue comes when I can buy that API from IBM and then can’t transfer it to Netcompany next year because they don’t agree on how to implement a REST API or how to handle the data model beyond the API. I don’t have that issue on construction. I can have a supplier hired to hand the electric installations on 300 buildings at a hospital, who go bankrupt half way through, and then I can painless hire a new contractor to finish up.

As long as software doesn’t have anything that comes near to this, it’s “just” art. I’m not saying this as a negative thing, but when two “engineers” who have gone through the same education and follow the same international “best practices” build the same thing, so differently that they can’t understand what the other build, then it’s just not worthy of the engineering description.

Re: Why writing software is not like engineering (2008)

#60
post #12

Earlier quoted context omitted.

It happens with slow technologies that ought to have standards as well. I do work with OS2.eu (Danish public sector owned open source software organisation) and we recently brought the first project into multiple supplier territory. It’s a Drupal PHP project, and as I understand that means that everything that gets build should follow Drupal standards that are pretty much set in stone. After 6 months of governance go…

Drupal and PHP is the standard chose? How? Were alternatives explored? This seems very odd as the choice for standardized websites. A better solution would be standardize a backend apis and setup standards around how data is queried and stored. Next standardize how that data is presented to the user and how the user can manipulate that data. None of this requires a specific technology and sounds like decisions were m…

> A better solution would be standardize a backend apis and setup standards around how data is queried and stored.

We have actually attempted to do this on a national scale in Denmark because it was silly to have 98 municipalities handle organisational data (and other things) in 98 different ways. So we created something called rammearkitekturen (framework architecture) which specifies what an “employee” is and how you’re supposed to transfer them between systems. The suppliers hired to build this, and these are companies like IBM, Systematic and Netcompany somehow still manage to build things in such a manner that the next company needs to spend a whole year beyond their estimate to get things running after a public procurement process that saw an ownership change. Some of these are complicated, bur most of them aren’t. Or at least they aren’t supposed to be. Now, either IBM is completely devoid of talent, or maybe software “engineering” just isn’t “engineering” at all. At least not on a level that is in any way acceptable to us as enterprise customers.

I’m still not sure why we tolerate year long delays on software projects. It’s not like building a new hospital never gets delayed, but the consequences of those delays are typically bosses losing their jobs and companies paying delay fines (or whatever you call that in English), where as with software the consequences are just a few shrugs and a joke about that pesky IT.

I actually don’t disagree with you as such. My point is simply that when you hire two talented engineers from the same background to build the exact same thing. Then they will both rather easily understand what the other did and how he/she did it, unless it was software.

Post reply on HN