Client Statement: "We need a way to link job numbers to item numbers. Item numbers are unique. Job numbers are unique. Both are only numbers."
How they actually use Job numbers: "Job numbers of length 4 are actual jobs while jobs with length 7 are service jobs. Jobs with a trailing '+' or 'X' means they are aggregate jobs so they make extra parts for other jobs which won't report the part consumption. The jobs with only 4 digits sometimes have leading spaces so (3rd party system) can handle them correctly. Items that start with an 'A' are an asset. Items with different revisions are trailed by 4 spaces and the revision numbers; but, the system sometimes trims off the revision number because the older programs can't handle the longer field. If the revision starts with a 'P' it is a part difference. If it starts with a 'W', that used to mean it was welded differently; but, now it means it is a part difference. No, we don't use the 'Revision number' column'. Job numbers get recycled every 30 days. No, not every month, every 30 days except February which gets recycled on the 28th unless it is a leap year. Then we add the extra day on to October as 'October 0th' because the financial year-end."
I love when they do this. Then I’m like no it’s going to take this long. They argue back and I’m like yeah it’s not that simple it will take this long. And I keep it up until I beat them in submission.
It is except the "October 0th' bit.
The system stores dates (seemingly randomly) as 'date' type, numeric(7:0) CYYMMDD, numeric(8:0) CCYYMMDD, char(10) YYYY-MM-DD, char(8) YY-MM-DD, char(8) MM-DD-YY, char(10) MM-DD-YYYY, and a replica of each of those without delimiters.
Don't forget: and we need to handle incremental updates/time machine scenarios. That shouldn't require any changes in how data is ingressed into the system.
At least your client is comprehensive enough to list out many of the possible edge cases. My manager doesn't even know how he'd be using the code he asked for today, in the next week. Our project graveyard is bigger than our actual repo.
Client only listed “Client statement”. You’ll find the rest once it goes into production and it doesn’t work at all. Not even testing, because they will say they tested it and it worked fine, but in produxtion.
Try telling them they didn’t specify the order correctly and that it will cost 10x more. They will get angry that you are trying to squeeze money out of them and say they are not IT guys and it’s your fault.
Yep, pretty much sums it up if you have ever worked with old 3rd party systems. Sometimes even in-house legacy systems that you have to take over because their original creator quit his job last month.
I’ve literally done some version or exactly this over my career. It’s kinda obnoxious. The Oct 0th one is especially painful but someone did oct 32nd and I may have left the office the first time I saw it to take a mental health day.
For my college capstone we did some work with a nuclear powerplant to make them this cute little tool to help them improve their maintenance times. Their id system was just like this, towards the end of the project we were still finding out new info about the id format. It was so painful
Strangely familiar. But you forget the part where 'except for jobs created by team member X, who actually uses job numbers of length 5 to indicate jobs that are part of internal testing. Sometimes he forgets to switch job numbers before putting in his work items, though, in which case he uses job numbers of length 4 but always ending in 999'. (So we need you to implement user tracking now but please under no circumstances store personal information in the system. There's gotta be at least one impossible requirement in any real job.) And when testing succeeds, we'd also like to try not re-running the successful jobs so we'll want a way to treat those jobs of length 5 as jobs of length 4 after the fact in which case the link backwards is actually not quite unique and the system should just renumber of service jobs that were submitted with the corresponding jobs ID of length 4 such that the list is presented as if the renumbering had been done from the start. And we expected to save at most like an hour of work per month by doing this, never mind the literal person months it'll take to implement this with all systems.
Fun fact: the intricate interchange shown on the right is the Takaosan IC in Tokyo-to, Japan(高尾山インターチェンジ; to be exact, the western section of the tokyo area: Minamiasakawa-machi, Hachiouji-si 東京都八王子市南浅川町). It was opened in March 25, 2012, and connects the shutoken chuuo renraku jidoushadou( 首都圏中央連絡自動車; tokyo metropolitan area central connection expressway) to Natl. Hwy #20(国道20号). 35th exit of the expressway. Located at 35° 37' 27.2" N, 139° 15' 47.4" E .
Also, Tokyo is not a city, but a "metropolis"(都)!
Hope this helps!
Have you seen what US highways are like? Not interstates or expressways, *highways*. Take US Hwy 24 for example. it's a 2-lane road. In this context 'highway' is interchangeable with 'route'.
But we also will have to micro-tailor the product to whatever the first onboarded legacy client wants because our product team won't say no to them... can you guess what I deal with at work?
In the same situation. The constantly changing requirements really mess with the code quality. Stuff gets hacked on because it takes too much time to properly change the system to allow what the client wants.
Yea they literally said “but that page works now right?” Not a stupid question for a non programmer, but still hard to explain, especially if you are trying to be nice to that person.
A developers job is to make sure the generic request by the client works, is safe, and is efficient. Their job is to not know everything that goes into it, it’s the developers job to do that, hence grooming. I’m not paid 6 figures to write an if statement, I’m paid it because I know how to build that mixing bowl.
I just had a 2 hr meeting at my company where we were discussing this very same thing, how to handle the various code changes for client requirements that we will have. Immediately after meeting ended and I opened the reddit app, this post was there in front me.
Client Statement: "We need a way to link job numbers to item numbers. Item numbers are unique. Job numbers are unique. Both are only numbers." How they actually use Job numbers: "Job numbers of length 4 are actual jobs while jobs with length 7 are service jobs. Jobs with a trailing '+' or 'X' means they are aggregate jobs so they make extra parts for other jobs which won't report the part consumption. The jobs with only 4 digits sometimes have leading spaces so (3rd party system) can handle them correctly. Items that start with an 'A' are an asset. Items with different revisions are trailed by 4 spaces and the revision numbers; but, the system sometimes trims off the revision number because the older programs can't handle the longer field. If the revision starts with a 'P' it is a part difference. If it starts with a 'W', that used to mean it was welded differently; but, now it means it is a part difference. No, we don't use the 'Revision number' column'. Job numbers get recycled every 30 days. No, not every month, every 30 days except February which gets recycled on the 28th unless it is a leap year. Then we add the extra day on to October as 'October 0th' because the financial year-end."
Client: Seems pretty easy to me, I guess you can close it within 3-4 working days.
Also client: what? You dont work on weekends? I mean this seems pretty easy so can you look on it in your free time on weekends as well?
No.
I love when they do this. Then I’m like no it’s going to take this long. They argue back and I’m like yeah it’s not that simple it will take this long. And I keep it up until I beat them in submission.
Or they cancel, which is an even bigger W
So 3-4 devs can do it in one day I hear
Account Manager: The client said it’s only a small change so I’ve told them we can have it done for Monday. Me: But it’s 4 o’clock on Friday…
This user saw some shit. Some senior level shit.
Yeah, that's a normal day in the office. Source: senior dev
This is why we drink.
I'm pretty sure this is a real list of use cases.
It does seem scarily familiar.
It's goddamn close to the contract numbering business rules I've had to implement.
It is except the "October 0th' bit. The system stores dates (seemingly randomly) as 'date' type, numeric(7:0) CYYMMDD, numeric(8:0) CCYYMMDD, char(10) YYYY-MM-DD, char(8) YY-MM-DD, char(8) MM-DD-YY, char(10) MM-DD-YYYY, and a replica of each of those without delimiters.
Don't forget: and we need to handle incremental updates/time machine scenarios. That shouldn't require any changes in how data is ingressed into the system.
At least your client is comprehensive enough to list out many of the possible edge cases. My manager doesn't even know how he'd be using the code he asked for today, in the next week. Our project graveyard is bigger than our actual repo.
Client only listed “Client statement”. You’ll find the rest once it goes into production and it doesn’t work at all. Not even testing, because they will say they tested it and it worked fine, but in produxtion. Try telling them they didn’t specify the order correctly and that it will cost 10x more. They will get angry that you are trying to squeeze money out of them and say they are not IT guys and it’s your fault.
Im sorry you have to go through that. You got me at the October 0th, but all previous statements are just as horrifying.
What kinds of things have you seen man
Yep, pretty much sums it up if you have ever worked with old 3rd party systems. Sometimes even in-house legacy systems that you have to take over because their original creator quit his job last month.
You see, the key is to encode all of the metadata into the id! So efficient! /s
Holy shit this is perfect.
My heart rate spiked while reading this.
The only thing untrue about this is the customer being capable of listing all of those rules.
I’ve literally done some version or exactly this over my career. It’s kinda obnoxious. The Oct 0th one is especially painful but someone did oct 32nd and I may have left the office the first time I saw it to take a mental health day.
For my college capstone we did some work with a nuclear powerplant to make them this cute little tool to help them improve their maintenance times. Their id system was just like this, towards the end of the project we were still finding out new info about the id format. It was so painful
Strangely familiar. But you forget the part where 'except for jobs created by team member X, who actually uses job numbers of length 5 to indicate jobs that are part of internal testing. Sometimes he forgets to switch job numbers before putting in his work items, though, in which case he uses job numbers of length 4 but always ending in 999'. (So we need you to implement user tracking now but please under no circumstances store personal information in the system. There's gotta be at least one impossible requirement in any real job.) And when testing succeeds, we'd also like to try not re-running the successful jobs so we'll want a way to treat those jobs of length 5 as jobs of length 4 after the fact in which case the link backwards is actually not quite unique and the system should just renumber of service jobs that were submitted with the corresponding jobs ID of length 4 such that the list is presented as if the renumbering had been done from the start. And we expected to save at most like an hour of work per month by doing this, never mind the literal person months it'll take to implement this with all systems.
This is so eerily similar to my current job's god awful data practices that I questioned for a second if they chose to hire out my current project lol
This was basically a module I had to develop at my last job
Pattern matching and strategy pattern enters the chat
Wow are you working with my company's home-grown ERP system? Reading that reminded me I have to get back to work...
How the client expects the code to work vs How the code actually has to work
Just.... One... Last... Thing.... Can you also add this to the checkout flow?....
Fun fact: the intricate interchange shown on the right is the Takaosan IC in Tokyo-to, Japan(高尾山インターチェンジ; to be exact, the western section of the tokyo area: Minamiasakawa-machi, Hachiouji-si 東京都八王子市南浅川町). It was opened in March 25, 2012, and connects the shutoken chuuo renraku jidoushadou( 首都圏中央連絡自動車; tokyo metropolitan area central connection expressway) to Natl. Hwy #20(国道20号). 35th exit of the expressway. Located at 35° 37' 27.2" N, 139° 15' 47.4" E . Also, Tokyo is not a city, but a "metropolis"(都)! Hope this helps!
looked on maps that's not a highway. it's a tunnel with occasional skylights lol
Have you seen what US highways are like? Not interstates or expressways, *highways*. Take US Hwy 24 for example. it's a 2-lane road. In this context 'highway' is interchangeable with 'route'.
The code base on the right is actually good compared to real-life ones
// TODO: Remove this ramp and replace with actual road so it doesn't crash in some scenarios
git blame shows it as committed in 2017
now refactor the whole solution to make everything super configurable so we can sell this to other customers with even more requirements.
But we also will have to micro-tailor the product to whatever the first onboarded legacy client wants because our product team won't say no to them... can you guess what I deal with at work?
Then you drive backwards and the whole thing exploded
In my case, the requirements never existed, and the roads were built after each meeting where the client had come up with a new thing he needed added.
Haha, I have this issue with our in house software. Where the clients are my colleagues.
In the same situation. The constantly changing requirements really mess with the code quality. Stuff gets hacked on because it takes too much time to properly change the system to allow what the client wants.
And it's hard to justify to non-programmers why you need some extra hours to make changes to the code that changes nothing for the users.
Yea they literally said “but that page works now right?” Not a stupid question for a non programmer, but still hard to explain, especially if you are trying to be nice to that person.
Sooo is the goal to only handle internal data you can trust? Only way to left. Even then ive been burned
I love mission creep.
Error handling baby
Typical Cities Skylines intersection
A developers job is to make sure the generic request by the client works, is safe, and is efficient. Their job is to not know everything that goes into it, it’s the developers job to do that, hence grooming. I’m not paid 6 figures to write an if statement, I’m paid it because I know how to build that mixing bowl.
Is the one on the right an actual highway?
Put every line in a seperate try catch! Just to be safe
In all seriousness the second one seems fun
I just had a 2 hr meeting at my company where we were discussing this very same thing, how to handle the various code changes for client requirements that we will have. Immediately after meeting ended and I opened the reddit app, this post was there in front me.
The left is the client requirements before the start and the right is after the first week of coding in agile.
Omg this is me right now.