In Spring of 2024, a good friend contacted me saying he’d heard of an opportunity to help finish an augmented reality bus tour of a Beijing park.
He’d gotten the impression the California-based client were in a pinch, and said they’d mentioned by way of referral the names of some folks we both knew and respected.
In the past, I’d consulted on AR bus bids for both The Mill and IDEO, and from those I was well aware how many hard problems AR buses involved.
I was very curious to find out how these folks had addressed them, and on our introductory call I told them as much.
They demurred.
This was my first warning not all was right.
We spoke briefly about the nature of the project and their need for help, and agreed I’d immediately try to get a work visa and come out to China for as long as I could spare - we determined it’d be a month.
Fortunately I found I still had a valid visa from a previous project, so I was good to head out immediately.
When I arrived I found the project in shambles.
Multiple very junior developers were touching (binary, TouchDesigner) code and deploying straight to production via thumb drive, with zero version control.
In fact, they didn’t know what version control was.
They were attempting to pull off AR effects on the transparent OLED windows of the bus without accounting for lens distortion, field of view, parallax, occlusion, etc., and were frustrated and mystified when things didn’t appear to line up.
They were completely naive to what depth and scale cues are and how to deploy them.
Their gyroscopes had an axis flipped, and the pitch of the bus was producing an opposite reaction in the virtual content.
GPS was highly unreliable (because China) and there was no workaround in place.
Their render pipeline was drawing everything - including their renders - to fullscreen quads, which were then used for basic compositing with alpha and re-rendered - all 35+ and counting layers , using alpha-to-transparency.
Their (consumer, air-cooled) gaming PC’s intake was exposed directly to the dusty air outside the bus.
Their consumer OLED panels were roasting in the direct sun coming through the windows.
Their ‘rack’ was an MDF shelf in the passenger seat of the bus, which was bumping along on rutted dirt roads.
Their ‘code’ was the absolute worst kind of fucked-up node spaghetti, not a thought given to legibility or maintainability or standards - basically the reason people hate node-based programming.
They couldn’t deliver even the very basics of what they’d sold and worked on and delayed and cost-overrun for years, much less the exciting effects they kept promising the client.
The quiet office rang with a still-unheard answer to their “how hard could it be”: “fuck around and find out.” They were in the deep dark forest of unknown unknowns, drowning in hubris.
I was, I fully believe, endlessly patient.
I suggested they measure the intrinsics of their lenses to flatten the image.
I suggested they implement some (any) color science.
I suggested they get a second (just one more) of each of the bus’ cameras, so I could work camera issues in the office and not on the bus, in the hot sun, sitting sideways on a bench seat with the keyboard in my lap and the mouse on my leg, using the ridiculous 3x OLED arrangement as a coding environment.
I begged them to let me rebuild their render pipeline in a less psychotic way.
I begged them to let me standardize their Windows builds before they rolled out this alpha template to the remaining ~20 buses, a process that had already begun.
I agreed against my judgement and objections to drop these necessary things on a regular basis so I could build flashy gags that did nothing to address their root issues, or to accelerate dev — sequenced particle effects and sparkly animations that were given to me not with animatics or storyboards or reference images but rather just a quick verbal explanation.
I was exhorted to have them ready immediately for client review, often the same day, at which point the client repeatedly became openly upset to find out that the result was not what he expected, or thought they had agreed on.
When I realized this was happening I gently suggested the client could implement a process for new work — one that moved inexorably from lower to higher fidelity with a fixed number of revisions and explicit client sign-off at each step.
I negotiated a touchy situation where I discovered one of their junior devs was secretly being abusive to one of the others.
I worked 11-14 hours a day for 24 days straight with no time off.
We used my gear - my depth camera (I brought my own — bringing everything is a habit I acquired in my previous life in showbiz), my laptop, my software keys.
I came out of pocket for all expenses.
I had arrived with a massively inflamed wrist from a Muay Thai injury and working in this situation was excruciating.
They knew this - they bought me some chinese tiger balm pads.
I missed the month of May with my 2-year-old kid.
My wife cared for a 2-year-old alone.
I’d received a deposit for less than 1/4 of the contract amount.
I did all of this on faith.
The faith was that, as you’ve surmised from the title, they’d pay me, and — spoiler alert — they did not.
A few years later I can say for sure these people won’t pay me the $35k they owe me.
The faith was that if they could’t pay, they’d let me know because I was actively digging their asses out of a hole they’d dug, and doing so tirelessly and professionally, without complaint.
The faith was that if they didn’t pay, the legal system would enforce our California-law contract and make them pay.
I hired debt collectors - they did the usual nastygram process and eventually told me it’d be unwise to sue - the debtors could simply close up shop dissolve the entity.
I would be holding this particular bag.
Now I’m aware this all sounds like a complaint, and I suppose you could say to this point that it has been.
The constructive thing to do is to ask “well what have we learned now that we’ve touched the stove?”
Related Stories
Source: This article was originally published by Hacker News
Read Full Original Article →
Comments (0)
No comments yet. Be the first to comment!
Leave a Comment