Hacker News new | ask | show | jobs
by steeeeeve 579 days ago
You know there's a software engineer somewhere that saw this as a potential problem, brought up a solution, and had that solution rejected because handling it would add 40 hours of work to a project.
4 comments

I don't know that and I don't like this assumption that only 'managers' make mistakes, or that software engineers are always right. I thinks needlessly adversarial, biased and largely incorrect.
Agreed. And most of the people with these attitudes have never written actual safety critical code where everything is written to a very detailed spec. Most likely the designers of the system thought of this edge case and required adding a runtime check and fatal assertion if it was ever encountered.
Spoken like a manager.

Look, when you're barking orders at the guys in the trenches who, understandably in fear for their jobs, do the stupid "business-smart" thing, then it is entirely the fault of management.

I can't tell you how many times just in the last year I've been blamed-by-proxy for doing something that was decreed upon me by some moron in a corner office. Everything is an emergency, everything needs to be done yesterday, everything is changing all the time because King Shit and his merry band of boot-licking middle managers decide it should be.

Software engineers, especially ones with significant experience, are almost surely more right than middle managers. "Shouldn't we consider this case?" is almost always met with some parable about "overengineering" and followed up by a healthy dose of "that's not AGILE". I have grown so tired of this and thanks to the massive crater in job mobility most of us just do as we are told.

It's the power imbalance. In this light, all blame should fall on the manager unless it can be explicitly shown to be developer problems. The addage "those who can, do, and those who can't, teach" applies equally to management.

When it's my f@#$U neck on the line and the only option to keep my job is do the stupid thing you can bet I'll do the stupid thing. Thank god there's no malpractice law in software.

Poor you - only one of our jobs is getting shipped overseas.

Wow that was adversarial. You are making an assumption about me that is wrong. I'm a high level engineer and have written an absolute boat load of code over my career. I've never been a manager.
I don't think either of your jobs are getting shipped overseas.

> Thank god there's no malpractice law in software.

This is aerospace, there are such things, but there's also blameless postmortems. And it happened overseas!

Your attitude is super antagonistic and your relationship with management is not representative of the industry. I recommend you consider a different job or if this pattern repeats at every job that you reflect on how you interact with managers to improve.
C dev: "You are telling me that the three digit codes are not globally unique??? And now we have to add more bits to the struct?? That's going to kill our perfectly optimized bit layout in memory! F***! This whole app is going to sh**"
> C dev: "You are telling me that the three digit codes are not globally unique???

They are understood not to be. They are generally known to be regionally unique.

The "DVL" code is unique with-in FAA/Transport Canada control, and the "DVL" is unique with-in EASA space.

There are pre-defined three-letter codes:

* https://en.wikipedia.org/wiki/IATA_airport_code

And pre-defined four-letter codes:

* https://en.wikipedia.org/wiki/ICAO_airport_code

There are also five-letter names for major route points:

* https://data.icao.int/icads/Product/View/98

* https://ruk.ca/content/icao-icard-and-5lnc-how-those-5-lette...

If there are duplicates there is a resolution process:

* https://www.icao.int/WACAF/Documents/Meetings/2014/ICARD/ICA...

> They are understood not to be. They are generally known to be regionally unique.

Then why aren’t they namespaced? Attach to each code its issuing authority, so it is obvious to the code that DVL@FAA and DVL@EASA are two different things?

Maybe for backward compatibility/ human factors reasons, the code needs to be displayed without the namespace to pilots and air traffic controllers, but it should be a field in the data formats.

Given airport codes are namespaced by ICAO, it seems a bit of an oversight that the same scheme hasn’t been extended to other infrastructure like VORs and waypoints for systems exactly like this one, for cases when uniqueness is required.
> […] like VORs and waypoints for systems exactly like this one, for cases when uniqueness is required.

AIUI, most VORs (and in the past, NDBs) are located at airports. And there is an airport at Deauville (DOL/LFRG):

* https://en.wikipedia.org/wiki/Deauville–Normandie_Airport

But the beacon is elsewhere, apparently in some random(?) field:

* https://www.google.com/maps/place/49°18'38.0%22N+0°18'45.0%2...

* https://opennav.com/navaid/FR/DVL/DEAUVILLE+SAINT+GATIEN

There are plenty of navaids that aren’t associated with an airport, there’s probably around a dozen like this just south-east England.
Some history/explanation [1]

[1] https://news.ycombinator.com/item?id=33948915

It seems like tasking a software engineer to figure this out when the industry at large hasn't figured this out just isn't fair.

Best I can see (using Rust) is a hashmap on UTF-8 string keys and every code in existence gets inserted into the hash map with an enum struct based on the code type. So you are forced to switch over each enum case and handle each case no matter what region code type.

It becomes apparent that the problem must be handled with app logic earlier in the system; to query a database of codes, you must also know which code and "what type" of code it is. Users are going to want to give the code only, so there's some interesting mis-direction introduced; the system has to somehow fuzzy match the best code for the itinerary. Correct me if i'm wrong, but the above seems like a mandatory step in solving the problem which would have caught the exception.

I echo other comments that say that there's probably 60% more work involved than your manager realizes.

Hum... Somebody has a list of foreign local-codes sharing the same space as the local ones?

I assumed IATA messed up, not I'm wondering how that even happens. It's not even easy to discover the local codes of remote aviation authorities.

> I assumed IATA messed up,

This isn’t IATA. IATA manages codes used for passenger and cargo bookings, which are distinct from the codes used by pilots and air traffic control we are talking about here-ultimately overseen by ICAO. These codes include a lot of stuff which is irrelevant to passengers/freight, such as navigation waypoints, military airbases (which normally would never accept a civilian flight, but still could be used for an emergency landing-plus civilian and military ATC coordinate with each other to avoid conflicts)

Hum, no. It's not about ICAO codes. It's about local UK codes, and IATA ones used by mistake.
The code that caused the issue is DVL, which isn’t a “local UK code”, it is a code used by the FAA for a location in the US and a code used by EASA for a location in France. And I didn’t say ICAO issued the codes, I said the process of issuing them by regional/national aviation authorities is “ultimately overseen by ICAO”, which I believe is correct.
CGP Grey The Maddening Mess of Airport Codes! https://youtu.be/jfOUVYQnuhw

I'd rather deal with designing tables to properly represent names.

... or there's a software engineer somewhere who simply assumed that three letter navaid identifiers were globally unique, and baked that assumption into the code.

I guess we now need a "Falsehoods Programmers Believe About Aviation Data" site :)

Did aviation software for 7 years. This is 100% the first assumption about waypoint / navaid when new devs come in.
And this is why you always use surrogate keys and not natural keys. No matter how much you convince yourself that your natural key is unique and will never change, if a human created the value then a human can change the value or create duplicates, and eventually will.
But that wouldn't help you here. The flight plan will come in with the code and you'll still have to resolve that to your keys.
Sure, but that means you are putting in the infrastructure to resolve it, instead of assuming there will never be a need to.
Or even more straightforward, just don’t believe anyone 100% knows what they are doing until they exhaustively list every assumption they are making.
Even more straightforward, just don’t believe anyone 100% knows what they are doing.
Which also means never assume the exhaustive list is 100%.
I wouldn't be able to produce such a list, even for areas where I totally do know everything that would be on the list.
Bingo, without some means of credible verification, then assume it’s incomplete.
or falsehoods programmers believe about global identifiers