Live data from Hacker News

What is negative engineering?

future.com

21–30 of 61 posts

Re: What is negative engineering?

#21

See, treating this as an add-on is why software has a reputation as "not real engineering". Engineering is all about turning science into products . Anyone with a chemical lab and enough post-grad grunt can make a compound. That's just the start. Getting it to customers, at scale, with a saleable price and not selling poison, contamination, or thin air and not turning your plant into a crater or superfund site is the…

> when we did it in a flask worked fine

kinda funny how Flask has a toy server that's probably behind a lot of startup MVPs....

Re: What is negative engineering?

#22
post #20

See, treating this as an add-on is why software has a reputation as "not real engineering". Engineering is all about turning science into products . Anyone with a chemical lab and enough post-grad grunt can make a compound. That's just the start. Getting it to customers, at scale, with a saleable price and not selling poison, contamination, or thin air and not turning your plant into a crater or superfund site is the…

> See, treating this as an add-on is why software has a reputation as "not real engineering". Software is way more of a craft than engineering.

>The creative application of scientific principles to design or develop structures, machines, apparatus, or manufacturing processes, or works utilizing them singly or in combination; or to construct or operate the same with full cognizance of their design; or to forecast their behavior under specific operating conditions; all as respects an intended function, economics of operation and safety to life and property

Fits software eng. just fine

Re: What is negative engineering?

#23
post #20

Earlier quoted context omitted.

> See, treating this as an add-on is why software has a reputation as "not real engineering". Software is way more of a craft than engineering.

>The creative application of scientific principles to design or develop structures, machines, apparatus, or manufacturing processes, or works utilizing them singly or in combination; or to construct or operate the same with full cognizance of their design; or to forecast their behavior under specific operating conditions; all as respects an intended function, economics of operation and safety to life and property Fit…

> The creative application of scientific principles to design or develop

Not even close. But we sure love to claim the principles were scientific. A programmer becomes good at his craft with time and experience. Not by studying in school and learning the principles there. A classic difference between a craft and engineering.

How many large construction projects fail due to incorrect engineering compared to large software projects?

> or to construct or operate the same with full cognizance of their design; or to forecast their behavior under specific operating conditions;

Almost never.

Re: What is negative engineering?

#24
As I was reading this article, that itch in the back of my head kept being triggered. I didn't encounter anything obvious, but I felt like something was missing. Then I remembered a project I inherited at a past job.

tl;dr Good idea, but it can be easy to end up with very complex code flow if best practices/language-specific patterns aren't followed.

I'm not sure if my experience is an example of Negative Engineering success or failure (a bit of both, perhaps). I had inherited a tool that monitored a conferencing environment looking for specific conferences that also were not started and had non-moderators waiting to be admitted[0]. It was a code base written by someone who was not familiar with the language it was written in, resulting in code that was very non-ideal.

I had joked that the fact that the system worked was "an accident". It was a perfect example of "failing it's way to success". Every time a targeted conference was discovered, an exception was thrown. When the exception was thrown, the catch block would retry the request slightly differently. It would then add an invisible (which started the conference), monitor for the conference state to indicate it was started and remove the invisible user from the conference. The add/remove had to be done because the "invisible users" could not join two conferences, so we had a pool that would grow/shrink as needed. Nearly every step of the way, of course, there were many circumstances that were appropriate to retry, to catch and recover and (ultimately) to crash[1].

Now, my approach to this kind of a problem is "if you can check that a request will fail and fix it before making it, do that", so I have the "invisible user pool" ensure it adds users before the pool is empty (and if it is empty, creates/returns a fresh user instead of throwing). Nearly every command that could throw had an invariant that could be confirmed before the call yet the developer opted to let things crash and handle the problems as they surfaced.

You can imagine the kind of Rube Goldberg device each part of this solution was. Part of that was the language and the developer's inexperience with it. Abusing Try/Catch, as this developer did, made the code feel like it was just a bunch of GOTO statements. The fixed solution had nearly as many Try/Catch blocks -- it's a distributed network application, after all, nearly every call had something external that could go awry. The difference was that there was an obvious "happy path" and the "catch" logic had been limited to either "sleep/retry", "abandon" or "fix; returning to the happy path".

On the balance, my experience would suggest that Negative Engineering, when applied exclusively ... works[2]. You just might not be able to explain why it works very easily if it's designed carelessly and (at least in some languages) the patterns you're required to use lend themselves to code that can be challenging to follow.

[0] Not a terribly difficult thing to do but not something that the API provided a way to solve so it involved listening for conferences with the API and reading data from the reverse-engineered database the service used... not a difficult task.

[1] The service had its own supervisor which handled recovery so for application failures (database unreachable/conferencing environment down), the right thing to do was exit.

[2] It logged critical errors left and right, but I wasn't put on the project to fix bugs, I was put on it to add a feature ... something that could no longer realistically be done due to the tech debt/complexity the solution had reached being designed the way it was.

Re: What is negative engineering?

#25

>Negative engineering is the time-consuming and sometimes frustrating work that engineers undertake to ensure the success of their primary objectives You don't need another name for this. This is part of the engineering process.

How can you prove your blogging chops if you don't name stuff?

You see this a lot in academia as well, they absolutely love to name things, and think the teaching and learning of those names is important in some manner.

Re: What is negative engineering?

#26
post #23

Earlier quoted context omitted.

>The creative application of scientific principles to design or develop structures, machines, apparatus, or manufacturing processes, or works utilizing them singly or in combination; or to construct or operate the same with full cognizance of their design; or to forecast their behavior under specific operating conditions; all as respects an intended function, economics of operation and safety to life and property Fit…

> The creative application of scientific principles to design or develop Not even close. But we sure love to claim the principles were scientific. A programmer becomes good at his craft with time and experience. Not by studying in school and learning the principles there. A classic difference between a craft and engineering. How many large construction projects fail due to incorrect engineering compared to large soft…

> Almost never

Isn’t this the key point? That *most* “software engineering” is not engineering. I can build a bridge and not be an engineer; similarly I can build software and not be an engineer. The properties of the bridge/software is what makes the difference isn’t it?

> How many large construction projects fail due to incorrect engineering compared to large software projects?

Yes, poor engineering is rampant. But I will argue that malleability also plays a large role in the delta. In traditional engineering you build a car (and you are “done”). In software you build a car and get asked to make it an aeroplane without going back to the drawing board.

Re: What is negative engineering?

#27
post #7

Earlier quoted context omitted.

> Anyone with a chemical lab...not turning your plant into a crater or superfund site...how could we know it would be hard to make 50 tons of FOOF a day? For additional context to the mental imagery, I thought it would be appropriate to link FOOF: https://en.wikipedia.org/wiki/Dioxygen_difluoride

More imagery: https://www.science.org/content/blog-post/things-i-won-t-wor...

"Satan's Kimchi" is the name of my new KPop/Black Metal crossover band

Re: What is negative engineering?

#28
post #23

Earlier quoted context omitted.

>The creative application of scientific principles to design or develop structures, machines, apparatus, or manufacturing processes, or works utilizing them singly or in combination; or to construct or operate the same with full cognizance of their design; or to forecast their behavior under specific operating conditions; all as respects an intended function, economics of operation and safety to life and property Fit…

> The creative application of scientific principles to design or develop Not even close. But we sure love to claim the principles were scientific. A programmer becomes good at his craft with time and experience. Not by studying in school and learning the principles there. A classic difference between a craft and engineering. How many large construction projects fail due to incorrect engineering compared to large soft…

>Not even close. But we sure love to claim the principles were scientific.

Software engineer applies computer science theory in real world where he she is constrained by real world factors

If computer science is not enough "scientific" the idk

>A programmer becomes good at his craft with time and experience. Not by studying in school and learning the principles there. A classic difference between a craft and engineering.

All of them are required to become good software engineer.

Solid theory, proficiency in hands and exp.

Re: What is negative engineering?

#29
post #23

Earlier quoted context omitted.

> The creative application of scientific principles to design or develop Not even close. But we sure love to claim the principles were scientific. A programmer becomes good at his craft with time and experience. Not by studying in school and learning the principles there. A classic difference between a craft and engineering. How many large construction projects fail due to incorrect engineering compared to large soft…

> Almost never Isn’t this the key point? That *most* “software engineering” is not engineering. I can build a bridge and not be an engineer; similarly I can build software and not be an engineer. The properties of the bridge/software is what makes the difference isn’t it? > How many large construction projects fail due to incorrect engineering compared to large software projects? Yes, poor engineering is rampant. But…

Not comparable at all. You can pay to have a bridge constructed and the project will be defined by an architect, built and inspected following a rigorous and standardized set of steps.

You can also pay to have software built. The specs will not be even remotely as precisely defined and the building of the product will not even remotely follow a standardized set of steps. It will come down to a team and individual programmers implementing features as they see fit.

Software that was running space shuttles was famously engineered. The costs in terms of time and money was astronomical.

> Yes, poor engineering is rampant. But I will argue that malleability also plays a large role in the delta. In traditional engineering you build a car (and you are “done”). In software you build a car and get asked to make it an aeroplane without going back to the drawing board.

Which is why it is not engineering. It is a craft much closer to writing a novel than it is to engineering as it looks in other disciplines.

Re: What is negative engineering?

#30
For the naysayers, yes, this should be part of the engineering process. But there are thousands of teams of programmers not doing this. Arguably, they aren't doing engineering, they are coding, or something else. In which case you can correctly say "this is be part of the engineering process", and point out that teams (some of which I've consulted with) who ignore this aren't doing engineering.

And yet, the number of systems embedded in our daily lives that are built without "the engineering process" is stunning. They are not typically the essential systems, but just everyday things we depend on and for which the loss would be much more than inconvenient, but short of catastrophic.

The author's points may be a rehash of old news, or even trivial, for a substantial portion of HN readers, but for many programmers and their managers, this could make them part of the "lucky 10,000"[1].

1 https://xkcd.com/1053/

Post reply on HN