Better Living Through Functor Oriented Programming, Part One
Lately when you fall asleep in the salt breeze, bathed in the quiet whistle of your laptop's carburator, you dream of data validation.
Some nights, it's a dream about falling asleep covered in the loam of an eastern pine forest. You wake up to the sensation of a tarantula crawling on your shoulder. Unalarmed, you take out your cell phone. You google tarantulas and determine that there are no tarantulas in eastern pine forests. You are safe.
Other times the dreams are more oblique. You see a shriveling old man. You know him. He is speaking about sailboats, but his meaning is impenetrable. You wonder if the words are koans, or simple aphasia. The man is your father. Unalarmed, you take out your cell phone. You google fathers and determine that there are no fathers. You are safe.
You are sent these dreams because your team at Ocean First!, a wholly owned subsidiary of Mother Ocean, LLC., has recently taken over a failing TCMA effort from the Atlantis Group. The developers over there spent 14 months on the project and failed to deliver an MVP.
The Atlantean team claimed that this occurred because no one had defined "TCMA", which was true enough, and the requirements document they were able to tease out of the business was a protean mess, changing constantly. One junior developer swore that it would be a little different whenever he came back from the coffee machine. When they explain this to you, you feign compassionate understanding - "Yes, yes, that sounds like you were set up to fail." If you're being honest with yourself - and what sort of person isn't honest with themselves, in the almost private confines of their own mind? - you're pretty sure this is happening because they're using python. Whatever the reason for the failure, though, your team has a reputation for being a no-fail crackpot team, and you've been given the project to rescue.
"No, not crackpot. Crack. A crack team. We're hotshots. Keep it together," you think to yourself.
"What's that, Dion?" Agnes looks at you, gently. You notice that you're in a meeting room filled with people. A briefcase with a padlock is placed conspicuously on the table. The meeting is paused, apparently waiting on you.
You deflect, unsure of the topic. "I looked over the code, and we're going to have to scrap it and start over." You haven't actually looked at the code, but you know this is the responsible thing to say.
Expressions of alarm spread across the room, so you keep talking. You read in a leadership book once that good communicators use metaphors. You decide to try that.
"Atlantis has done good work, but the requirements problem..." You gesture at the briefcase. "It's like they've built an aqueduct without fully understanding gravity. Everything flows in the wrong direction. It's like Rome. It just won't scale." This sounds good. You nod, sagely.
Several others nod, less sagely. Agnes is still. Rick from Atlantis looks indignant, bordering on livid.
"Dion, could you be a little more specific? How exactly do aqueducts relate to our python codebase for this TCMA project? You're seriously proposing we throw away 14 months of work because, and I quote, 'it's like Rome'?" You feel anxious. You like Rick. He probably doesn't deserve this. You start to change the subject by explaining the Liskov substitution principle. As usual, Eddie interrupts you.
"Rick, you and your team has already fucked this situation up beyond all reason. Everyone was sympathetic for a while, but you can't just keep blaming everything on Decategorization. I'm sure you haven't forgotten that Dion and their team had to salvage your algal bioinformaesthetics project, too. As far as I'm concerned, what they say goes." Eddie is such a dick.
"Eddie, please. Raising your voice and repeating your favorite recriminations isn't going to..."
You only vaguely that particular bioinformaesthetics project, but since the Decategorisation Event, many things are like that. Everyone has holes - people in their lives they don't remember, backstory that doesn't entirely add up. Many people - the Eddies of the world - continued their changed lives without interruption or much examination. If they ever talked about it, they would shrug, and say things like "Life is how it is, not how it was." Others, however, - those prone to introspection and doubt - suffered more from the Decategorisation, and the uncertainty it imbued on daily life.
At moments, even you have a niggling sense of doubt about bioinformaesthetics. While the definition rolls easily off your tongue - "Bioinformaesthetics is the science of redesigning fundamental biology to better match human aesthetic preference and cognitive limitations" - you feel dissonance. Have humans always done this? Did you really go to school for it? You remember your graduation day so vividly that it's movie-like. The rousing speech: "Go forth, and make the categories for man!", the cheering. The sky blackened with graduation caps like locusts. You smile in recollection.
You notice that the meeting has continued, and your smile lingers too-long, edging towards rictus. Perhaps the vitriol has subsided. "Dion? Do you have something to add?"
"Um. One more thing. As we all know, there's a fine line between proper accountability and governance, and needless bureaucracy and interruption." You stand and reach over the table, and try to collect the briefcase. It's just barely in reach. "Since everything got decategorised, Agile is broken. Two week sprints just don't work anymore." You lunge, and manage to grab the briefcase without displacing too much on the table, and stand back up. "Now that we've got the requirements documents, we can probably dispense with the sprint planning phase. I think a better balance will be more like 6 month sprints."
There is a moment of silence. Blessed Eddie breaks it: "6 months? Yeah, Dion, that cadence feels a little long." He looks uneasy. You feel uneasy. You contemplate explaining Liskov substitution again. You decide against it.
"We'll provide monthly reports, and give you access to the beta as soon as its up. But paradoxically, delivering good software product means focusing on process over product. Our team can't compromise on this point." Process over product - that's good alliteration. You should write it down.
Eddie looks pained. "Okay. If you're sure, Dion. But you better not fuck this up."
You flex your cheek muscles graciously. "Thanks for your confidence, Eddie. If there's nothing else, I'm going to get back to... I've got a talk on SOLID design principles interposed onto…" You trail off, and let gently let yourself out of the room. As you the door shuts behind you, your rictus turns into a grin. You're giddy the entire walk - through the atrium, up the stairs, onto the deck - back to your open office. You did it. You got the project. Finally, you've got time. Time to rebuild what was lost. Time to build something better. Something perfect. Something pure.
You throw the requirements briefcase down carelessly besides your desk. You boot up your computer, and open your code editor. You create a file: functors.scala. Your breath catches in anticipation.