Why Seemingly Small Changes Never Get Made, Or: Technological Debt, Explained

If you were to log into StarCityGames about two years back, you’d have logged in with your username.  And once you’d chosen your username, you could never ever change it.  If you had, in a fit of pique, chosen “SirPoopyhead” as your user name, that was what you’d have to use forever.
The reason you couldn’t change it was because of a silly choice that had been made back in the year 2000, when we’d first purchased our shopping cart software.  The people who had designed that shopping cart decided to use the login name as the unique way of determining who you were – and when we’d created our own customized shopping cart, we hadn’t changed that.  So for all intents and purposes, that arbitrary string of characters – “SirPoopyhead” – was the single factor that made you you.
Problem is, that’s actually terrible design.
See, on the back end of an application, we have literally hundreds of places where we store the answer to the question, “What customer did this?”  What customer placed this order? What customer tried to log in at 4:56:15 am?  What customer ordered a Premium subscription?  What customer has $14.15 in store credit?  And the answer to each of those questions, each answer stored in a separate location, was “SirPoopyhead.”
The problem is that if we changed that string of characters to, say, “SirGalahad,” then we’d have to manually change that string in every one of the hundreds of tables that referenced it.  If we forgot to update just one table (or something went wrong in the middle of all these updates), then somewhere lurking in our database there would be a bunch of records that referenced the now-no-longer existing “SirPoopyhead,” which means that we’d have lost data.  This could be very troubling if we were asking the question, “What customer had paid us money?” when we needed to give you a refund.
And with every new feature we added, this problem got worse.  We added gift certificates, so here’s yet another place we need to store “SirPoopyhead.”  We added wishlists, each of which was duly recorded under “SirPoopyhead.”  Hundreds, thousands, of locations each keyed to this arbitrary string of letters.
Worse, turns out logins are a terrible idea.  Customers forget their logins all the time, having made them up to check out.  If their login was associated with an old email address, they might not even be able to get access to their old login without manual intervention.  We literally had, in some cases, customers who’d created twelve separate accounts because they kept forgetting what their login was supposed to be.
No, what we needed was a nice clean email login like Facebook.  Everybody remembers their emails.  But people change their email addresses a lot – and as noted, having to constantly change “SirPoopyhead@hotmail.com” to something else had a nonzero risk of something going wrong.
What you need, as it turns out, is a unique ID to reference each customer that never changes!  You!  SirPoopyhead!   You’re now customer #123456, and every question we’ll ever ask about you now returns the answer, “Customer #123456.”   Then you can change your email, you can change your login, you can change anything you want – all we’ll be doing is looking up the information for Customer #123456.
But.
But.
Come this point in our shopping cart’s development, we had literally thousands of places in the code that used the login name instead of the customer ID to answer questions.  And it wasn’t as simple as a “search-and-replace”; some of these were complex queries that we’d completely have to rewrite from scratch.  And then, because we’re responsible website owners, we’d want to test all of these changes thoroughly to make sure nothing got broken.
Yet if we wanted to do this, we’d have to do it soon.  Because we were hiring more and more programmers, and adding new features daily, each of which referenced “SirPoopyhead.”  The longer we put this change off, the more places we’d have to change the code.
That’s what’s called technological debt.  Thanks to a bad decision made literally twelve years ago, we had a ton of code that caused us to have to jump through a lot of hoops for what seemed like it should be a simple thing.  And every month that went by without changing this sprawling, underlying code was another month’s worth of updates that would also, eventually, have to be changed.
What followed next was a tedious and gruellng five-week project where I looked through each of the hundreds of thousands of lines of code that touched literally every page on StarCityGames.com, changing instances of “login name” to “customer ID.”  You cannot understand how magnificently boring this was.  There are fun things a programmer can do, usually learning new techniques or doing something flashy – this was basically me, being a smart search-and-replace, doing something a computer wasn’t quite equipped to do.
When it was done, we ran some conversion scripts, and then rolled it out.  Zingo!  To you, the customer, the only change was that there was now a notification saying, “Please log in using your email.”  But to the back end, there was literally a whole new day.
That’s why it’s sometimes hard to change software.  How difficult could it be to change your user name?  Well, as it turns out, thanks to factors that are hard to explain to your average customer, it can be incredibly hard – an unpleasant task requiring weeks to fix, one that adds almost no new features whatsoever, one that can introduce bugs into stable sections of code that haven’t had problems in years…. yet one that ultimately needs to get done in order to make way for bigger changes later on.
That’s why programming is weird.

Why It Might Take A Year Before I Have Sex With You, And That's Okay

My poly bureaucracy creeps slow. Very slow. This is for my wife and girlfriend’s protection, because I am a dumbass.
See, I have a tendency of assuming that emotional intimacy == compatibility. Yes, it feels wonderfully cozy that we share all of these fears and concerns and relationship patterns, and finding your most sensitive feelings reflected in someone else is a beautiful thing.
The problem is that I’m fucking crazy. So finding someone I really resonate with immediately? It usually means they’re as bad as I am, and that we’re actually going to exacerbate each others’ issues.
I’ve been known to dive head-first into relationships without checking for compatibility first, just sort of assuming that because we have A Connection it’s going to work out. Then, after months of daily fights, me wringing my hands 24/7 about WHY WON’T SHE UNDERSTAND, and an eventual slow death by slices, I’ve learned that I need to spend more time getting to know people before I start getting committed…. if only so my wife isn’t obligated to play psychotherapist for me when things turn sideways.
So there’s a six-month cooldown time in place, where we can make out but not have Teh Sexx0r… and usually that cooldown time stretches to nine months, or even a year, as we just take it slow and not rush getting permissions.
The big question is, why don’t I find this limitation confining?
Part of it is, of course, is that I chose this lifestyle. This isn’t an externally-produced ruleset, created in a process tantamount to blackmail; it’s one I helped shape, because after a series of four disastrous relationships that imploded messily across my poly web, I took an honest look and said, “Okay, that’s a bad pattern, what’s a potential fix?”
But more importantly, sex is the least important bit for me.
Don’t get me wrong; anyone who’s ever made out with me will tell you that I’m passionate as hell. But sex is something that’s common; particularly in the kink communities, it’s not particularly difficult to get. If you’re open about your desires, reasonably personable, and are sapiosexual as I am, you’ll have a lot of options.
What I can’t get elsewhere is you.
Sure, maybe I’ll spend nine months hanging out with you on our once-a-month dates, getting to know each other… but that’s the best part. For me, “getting to know people” is an activity I find desirable in and of itself. Chatting, snuggling, dining out… that’s all stuff I like. And the level of flirtation/innuendo is a beautiful spice for that.
If and when we eventually hook up, that’s gonna be a wondrous new layer to what we share, and not the entirety of it. So I’m perfectly okay waiting for that to happen, since that is far from the whole reason I’m here.
I’m in no rush.
So yeah, it’s a long time. It’s not a process I’d recommend as standard for most poly groups. But that’s the glory of poly relationships: there’s no objective set of rules. What would be insanely restrictive for one set of people is actually a wise and stabilizing force in ours, just as what would be joyous freedom for some couples would actually cause harm if I tried it at this time in my life.
But does it matter if my rules would work for you? Lemme repeat: if it’s working for you and the people you’re dating, then it’s great.
This glacial proceeding helps me to choose better partners, and keeps my wife and girlfriend happier (even as neither of them are bound by this six-month rule), and hopefully the people I’m dating in this slow process are still happy to see me even if I’m not whipping out Little Elvis yet.
It’s an approach. Because there’s no the approach. And there never will be a the approach as long as humans are varied creatures with differing needs.

How To Handle The Despair That Comes With Writing

Eventually, if you’re trying to make it as a writer, you’re going to despair.  You can’t write well enough. This story will never sell.  If you do sell it, it’ll never be popular.
This terrible feeling like you’re just wasting your time and nobody cares happens, absurdly enough, to very popular writers.  It happens to nobodys.  It happens to writers, period.  If you’re putting words down and trying to get people to read them, there will be times you’ll want to take everything you wrote, set it on fire, and then fling yourself in to burn with it.
Here is what you do when those down days come: you write more.
Took a nasty rejection straight to the sternum?  Write more.
Had a confidence-shredding bad review?  Write more.
This grand story in your head is completely beyond your ability to commit it to the page?  Write more.
This terrible book you’re reading made millions, and your better work can’t find a home?  Write more.
Feel like you’re a fraud who’s somehow lucked out when better writers languish behind you?  Write more.
Your favorite author just told you he abhorred what you wrote? Write more.
The thing about writing is that so much of it comes down to tenacity.  The most popular writers in the world can all tell you about this fellow they knew when they were starting out, a colleague who could write stories that would charm the petals from a rose… and yet these natural geniuses didn’t stick with it.  They either let life swamp them, or couldn’t stand the rejections, or didn’t feel like it.  And these magnificently talented people never became Writers, because for whatever reason they never pushed through.
It’s not that they weren’t very good.  It’s just that they stopped knocking on doors.  While the writer you’ve heard of kept ringing doorbells until she got an answer.
So pushing through is what you need to do.  Write when you’re sad.  Write when you’re busy.  Write when you’re uninspired.  Write when you’re utterly consumed with the idea that you cannot do this.  Learn to take all of that despondence and to transform it into beauty, for writing in the throes of despair will do two things: when you are writing sad scenes, you will have so many more emotions to cram into it, and when you are writing happy scenes, you will be forced to emulate joy. One will make for better writing, the other will elevate your mood.
The truth is, though I’ve written in both despair and elation, I can’t really tell which mood I was in when I go back to revise.  You must learn to write without hope.  Keep creating through those dry spells, keep sending out stories during the rejections; decouple your personal contentment from your creative muse and make that bitch dance for you.  She’ll be clumsy at first, foolish… but with time, you can make her do the most elaborate pirouettes when you’re barely able to move off the couch.
In fiction, there’s often a plot sequence: Try/fail, try/fail, try/succeed.  In real life, there may be a hundred try/fails before you get to that succeed.  But you’ll never know unless you stay in that execution loop.
Write.
Write more.
And then write more still.
(Inspired by Catherine Schaff-Stump’s Writers and Despair.)
 

Minor, Rampant Cruelty

Just discovered: I could pretty much ruin any woman’s day when she’s about to leave the house by asking, “Oh, you’re going out like that?” and then muttering that it’s fine, it’s fine.
I just said that to Erin hypothetically, and she knows I didn’t even mean it, and she’s still itching to change her clothes.
(Cue tides of women saying that they’re above that. You may thank me for making you feel superior.)

Hear My Ad-Faerie Story "Dead Merchandise" At Escape Pod!

I fricking love getting my stories read at Escape Pod – the narrators there are so good, the forums so full of awesome feedback, and there’s just something beautiful about hearing words I wrote become part of an old-time radio show.  So my singularity-as-horror tale “Dead Merchandise” is up – and the people at Escape Pod seem to be digging it, thus far.
In case you need a sample, it follows:

The ad-faeries danced around Sheryl, flickering cartoon holograms with fluoride-white smiles. They told her the gasoline that sloshed in the red plastic canister she held was high-octane, perfect for any vehicle, did she want to go for a drive?
She did not. That gasoline was for burning. Sheryl patted her pockets to make sure the matches were still there and kept moving forward, blinking away the videostreams. Her legs ached.
She squinted past a flurry of hair-coloring ads (“Sheryl, wash your gray away today!”), scanning the neon roads to find the breast-shaped marble dome of River Edge’s central collation unit. River’s Edge had been a sleepy Midwestern town when she was a girl, a place just big enough for a diner and a department store. Now River’s Edge had been given a mall-over like every other town — every wall lit up with billboards, colorful buildings topped with projectors to burn logos into the clouds. She was grateful for the dark patches that marked where garish shop-fronts had been bombed into ash-streaked metal tangles.
The smoke gave her hope. Others were trying to bring it all down — and if they were succeeding, maybe no one was left to stop her.

Anyway, you can listen to it here.  It’s about thirty-five minutes.  And another great production, but I’d expect no less from the ‘Pods.