I just prevailed in a design discussion with my boss. The result: I get to implement the feature.
I have been working on a big project for the better part of a year now. It is a massive overhaul of the systems my department uses in their daily grind. Over time, those systems have become downright awful, and much of the awfulness was beyond our ability to address. A key part of the system was run by our IT department.
That system was never very good, but as our needs changed, the system… stayed the same. Any change would cost hundreds of thousands of funny-money dollars and take a year just to find out that it was going to be another year, and another bucket of funny-money. It’s budget-dollars, not real dollars, but spending on that system would take budget-dollars away from other projects.
This antique system left the rest of our tools making terrible compromises so that the missing functionality could be wedged in. It was time for a change, and I set out to replace that system we didn’t control with a better one that we did.
Hand in hand with that, is that my department’s servers are very, very old in server years. My employer, meanwhile, has created new services so departments like ours don’t need to maintain our own hardware. So this change became not just a massive software update, but a major infrastructure upgrade as well.
I underestimated just how much our applications had been warped to accommodate the crazy compromises. Unwarping them was worthwhile, but time-consuming, and none of these applications had been built with testing in mind. On top of that, the new infrastructure placed its own limits on the applications that required further refactoring.
The goal: to pull the tablecloth off the table without disturbing the dishes, then to slip in a new tablecloth.
For the first few months I worked alone, but as the Big Day approached (and receded), the rest of my team got increasingly involved. I managed to hand off the DNS and server config stuff to my boss just in the nick of time, before the complexity of that exploded in my face.
Not totally alone; I must amend. There were people in many other groups — the people creating the pretty dang awesome new infrastructure tools we are using, who went out of their way to accommodate me and help me along, even though my group is tiny in the scheme of things.
I mentioned the Big Day. That’s not quite accurate. Much like “Happy Hour from 3-7 p.m.”, the Big Day started three hours ago and lasts through the weekend. Right now a script is running, a complex bit of software I have devoted hundreds of hours to, that pulls the data out of the old databases, reconciles an incredible number of different ways the data can disagree, patches the Definitive Data together and houses them in their new, shiny home. When the script is done tomorrow morning, it will never be run again. It will be archived as a historical curiosity and that’s that.
So this evening my boss put all our systems on hold, and we began the migration. After the first giddy flurry of excitement as we all worked to make sure we were ready, I started my script. “And now we wait,” I wrote to the team.
Monday morning two weeks ago, I, along with about fifty other shuffling citizens in group 45A, made the bleary trek to report to the Hall of Justice at the ungodly hour of 9 am. I chose to take the bus to town, as the Web site implied that parking was a hassle.
I tromped down to the bus stop in a light rain (the weather lingered an ENTIRE HOUR longer than my phone said it would), loaded up the transit app that gives real-time bus updates, loaded the other app to purchase my bus tickets, and then stood in the rain wearing a sweater and cargo shorts.
While I waited two men all bundled up in brightly-colored foul-weather gear, hoods pulled up over their heads, walked by. They both smiled at me, and when I smiled back one gestured at the clouds overhead and said, “Something something Amigo! Something something something!” and laughed.
I laughed also, shook my head sadly and said, “Yeah…” Even though I understood only one word he spoke, I knew exactly what he was saying. We parted friends. Or at least, amigos.
But honestly, unless hypothermia is an issue, getting wet doesn’t bother me that much. It’s an attitude I consciously adopted from a good friend of mine who went to college in Washington and didn’t carry an umbrella during gentle rains, to the bemusement of his peers. That attitude was reinforced when I started biking to work, and I realized that rain was not a big deal except for the mess — and that’s what fenders are for.
But I digress. The bus ride was uneventful. After I had I reached the Hall of Justice, set off the metal detector with my belt buckle, nearly mooned the people in line behind me when I took my belt off, and finally got through and regathered, I went up to the second floor to discover a long line of new jurors.
The line moved quickly; when I reached the front the barcode on my jury-summons postcard was scanned and I was handed a piece of paper and instructed where to go to do my next bit of waiting. I was not asked for any sort of identification. I guess Jury Imposters are not a prevalent problem. Or are they? How would we know? Is someone out there searching mailboxes for jury summons so that they can go and decide the fates of strangers? Or perhaps there’s an underground industry of Jury-Substitutes that people hire so they don’t have to report themselves.
I found my way to the Jury waiting room, which was already overfilled and people were still coming in. Department 45 was not the only courtroom seating a new jury that day, it appeared. It was warm in that room, and there weren’t enough seats, but I am still healthy enough to stand for a little while at least. But you know what happens when you pack a bunch of people from different communities into a room like that? I’ll tell you in a future episode. (Hint: that episode may or may not be called “Jury Plague”.)
After a while the announcement came for group 45A to proceed from the waiting room, down the stairs, across a walkway to the brown elevators, and back up to the second floor in the other wing to Department 45.
Yeah, the courtrooms are called “departments” at the Hall of Justice. I think that’s odd, too.
So all the people in group 45A stood and filed from the waiting room. I just went with the flow, and when the flow bypassed the brown elevators to find the stairs, I was good with that. It would have taken half the morning to get us all up in the elevator — one of the two brown elevators was in use to move prisoners.
When I say “all the people in Group 45”, I actually mean “all but one.” As we filed into Department 45 we checked in and then the bailiff had us fill the seats in the gallery in an orderly fashion. When that exercise was over, there was an empty seat. One potential juror was missing. So we waited. And waited.
After a couple of phone calls it was established that our erstwhile peer had got lost on the way from the waiting room to the courtroom, and had gone back to the waiting room without telling anyone about it. He was given new instructions and sent on his way once more. “He’ll be right here,” the bailiff said. The bailiff was a nice guy, but this time he was wrong.
Meanwhile, I’m sitting in a seat that was low to start with, and had a squishy seat. Next to me is a woman (who would become Juror #1) who was almost a foot taller than I was when we were standing up, and now the top of my head didn’t even reach her shoulder. I am not a tall man, but I don’t need to be reminded of that quite so forcefully.
Another call. More paging. Once more the stray juror was tracked down. The jury-handlers, already struggling with the surge of new jurors that day, found someone to walk 45A’s last member right to the door of Department 45.
Finally we were all assembled, and we were ready to begin. What followed was a discussion that was as disturbing as it was interesting.
Tune in next time for Jury Life Pt. 2: Voir dire!
I made a foolish commitment at work, and now I’m paying the price. The big day for the project is April 2, 2014, which some of you might recognize as 10.0 on the Muddled Calendar. A Big Day indeed.
In the meantime, things will continue to be pretty quiet around here. Sorry about that.
I once explained in great detail why HTML is the worst thing that ever happened to the Internet. In that episode I was a bit disingenuous — I also snuck in flaws with the protocol that delivers most of that HTML rubbish to your computer: HTTP.
Finally, finally, twenty years later than necessary, the tools are available to make Web applications work like all the other apps on your computer. (If you’re willing to set down your browser, World of Warcraft and its predecessors have been doing this for a long time now. But finally we can have good application design through the browser as well.)
While the primary benefit of this revolution is for the engineers making the apps (whom you as a user have to pay eventually), there are tangible benefits for Joe Websurfer as well. Mainly, things will work better and be snappier. You will curse at your browser about 30% less. (That number brought to you courtesy of the dark place I pulled it from.)
I work in a blissful world where my stuff doesn’t have to work on older browsers, and especially not on Internet Explorer. That means what might be ‘bleeding edge’ for most Web developers is merely ‘leading edge’ for me. I’m starting a new Web application, and it won’t use HTTP. It won’t even use AJAX.
Quick description of HTTP:
Your browser asks the server for something. The server gives it to you, then forgets you ever existed. This is especially crazy when you want your connection to be secure (https), because you have to negotiate encryption keys every damn time. That’s huge overhead when all you want is the user’s middle initial.
And what if something changes on the server that the page showing in the browser should know about? Tough shit, pal. Unless the browser specifically asks for updates, it will never know. Say that item in your shopping cart isn’t available anymore — someone else snapped up the last one. You won’t know your order is obsolete until you hit the ‘check out’ button. The server cannot send messages to the page running in your browser when conditions warrant.
Lots of work has gone into mitigating what a pain in the ass that all is, but the most obvious solution is don’t do it that way. Keep your encrypted connection open, have each side listening for messages from the other, and off you go. The security layer in my new app is so much simpler (and therefore sturdier) that I’m going to save days of development. (Those days saved will go straight to the bottom line at my company, since I’m an operating expense. The effect of my app will also go straight to the bottom line, as I save other people time and energy. Better yet, the people who will be made more efficient are dedicated to making the company more efficient. Those days of development time saved go through three stages of gain. Shareholders, rejoice.)
So, that makes me happy. Web Sockets, event-driven servers, a chance to create the Missing Middleware to make the tools out there fly. Bindings over the wire.
Of course, I’m not building it all from scratch; I’m using and improving tools created by those who have gone before me into this ‘software working right’ revolution. It means picking up a whole toolbox at one time, from database to server to client library to extensions of all of the above. There are times while I’m trying to put it all together that it feels like my head is going to explode. In a good way.
But boy, the difference a good book can make. In technical writing, there are two kinds of documentation: tutorial and reference. Mostly I gravitate toward reference materials: I have a specific question and I want to get a specific answer. References are raw information, organized to allow you to get to the nugget you need. Tutorials are training documents; they take you through a sequence to help you build complete understanding of a system.
There are many technical documents that try to be both, or don’t know which they are. We call those docs “shitty”. Then there are videos. SPARE ME THE FUCKING VIDEOS. Videos as a reference: completely worthless; videos as a tutorial: rarely adequate – what was that again?
(I’d be interested to hear from my formally-trainied tech writer pals about my above assertions.)
Anyway, On the client side I’m using a library called Backbone, and on top of that Marionette. I like them, but I was starting to get lost in the weeds. The reference material is pretty good, but getting an overall understanding of how the pieces worked together was slow and frustrating. Too many new ideas at once.
So I found a book endorsed by The Guy Who Made Marionette (yeah, The Guy. One guy, having a huge impact on the next generation of Internet applications. Could have been anyone, but there had to be The Guy.) that not only puts the pieces together, but introduces best practices and the reasoning behind them along the way. It may well be the best tutorial-style documentation I’ve run across in this industry. So, hats off for Backbone.Marionette.js: A Gentle Introduction. This book really helped me get my ducks in a row. My fastest learning curve since Big Nerd Ranch oh so very long ago.
So all that makes me a pretty happy geek. Lots to learn, Web applications built right, a new project with lots of creative freedom. And while I’m coming up to speed on the new tools, I already see gaps — the tools are young — including a potentially ground-breaking idea, that I will get to explore.
Can you believe they pay me to do this?
A few years ago a handful of companies, notably WorldCom and Enron but plenty of others, faked up their books and defrauded investors and their own employees of billions of dollars. This despite requirements that the books of companies be audited by an independent accounting firm.
It turns out that in some cases the big accounting firms were more interested in keeping the client than in protecting investors. They allowed the fraudulent behavior continue, so that WorldCom and Enron would continue to pay them for their other services. Not really the independent audit that was needed.
The government stepped in, and passed the Sarbanes-Oxley act, lovingly called SOx. What this did was to provide a vast set of new accounting requirements demanding that companies be able to prove that every important number in every system was properly protected and any monkey business would be traceable. This is a gigantically complex undertaking for a business. Also added was an audit of the audit, and a review of how every number is checked and double-checked. The US government for the first time takes a direct role in looking at corporate ledgers.
A system my department developed and hosts has now been declared to be SOx-related. That means that the server it sits on has to be extra-super-secure, and that we have to document checking the security of the server periodically. (Different aspects of the security have to be checked at different intervals.) Every change to a line of code has to be documented as well, and justified, and audited. Likewise the database has to be extra-super-secure. I’m a big fan of secure, actually, so for the most part I’m totally down with all this. Extra-super-secure is many times more of a hassle than secure, but if someone monkeyed with the numbers in this system, our CEO could go to jail. So, yeah, best to be careful.
Getting the servers set up properly was not really that difficult. Actually, I wasn’t allowed to configure the servers, because I was the only one able to test if it had been done right. Every setting has to be tested by someone other than the one who did the work. Then the test document I create is audited by my boss before being sent over to the Internal Audit department.
Documenting the security of the servers to the satisfaction of the law just plunged me into several long, long days of bureaucratic hell. I had templates for the documentation from the IT department’s setups, but those docs had some surprising holes and some parts that were simply badly written. I spent several hours trying to figure out how to meet a requirement in those docs that was simply wrong. An IT expert probably could have identified the problem at a glance and said, “I expect the writer meant this…” I am not an IT expert, and honestly I like that sort of arcane activity almost as little as I like paperwork.
So, yeah, this was a perfect storm of things I don’t like to do, and I underestimated the time it would take me to do them, which led to a lost weekend and almost every waking hour for a week devoted to the task. Now my work goes on to be audited, and it’s hard to imagine that after a push like that there isn’t an error somewhere.
Here’s the thing: as I was doing all this, I wasn’t mad at the government. Red tape driving up taxes and costing companies millions of dollars usually will make me call for revolution. This is all deadweight on our economy. But who I’m really mad at is Enron et. al., and I’m ready to murder the leadership of the major accounting firms whose dereliction led to this whole fiasco. They owe me. Bigtime.
The marketers of pop icons understand this: When the world knows you by only your first name, you win. Pop stars resort to contrived names to achieve this goal; I’ve never met any other Madonnas or Beyonces (I know there’s an accent in there somewhere). But then there’s Steve. Where I work, you say ‘Steve’ and there’s only one person you could be talking about, and he doesn’t even work there anymore. We also have Jonny, Tim, and Peter.
Peter may only have first-nam mojo within the finance group, but where I sit, when I hear “Peter wants this by Friday” there’s no question of who Peter is and there’s no question of when the project will be finished.
Tim. Peter. Steve. Jonny. Simple, non-manufactured names that have reached their stature by earning the respect of tens of thousands of people. There’s not a Jerry here. Yet. First I have to get that thing done for Jodee by next Friday.
Steve Jobs came to visit me in a dream last night. He was a younger version with badly-bleached hair that turned out on the orange side. He was very animated as we discussed the best way to add advanced table features to Safari. Steve was as intense as people say he was when he was alive, and we got along great.
It was my quiet way of marking the passing of a great man.
Ask yourself this: at the company where you work, would they offer grief counseling if your former CEO died? You’ve probably read plenty about Steve Jobs’ accomplishments in the last 24. I hesitate to add to that, but I think a lot of pundits and journalists are missing the mark on what made Steve great.
Steve didn’t invent personal computers. He didn’t invent the Graphical User Interface. He didn’t invent smart phones or tablet computers or mp3 players. His genius was making all those things useful. He’s been called a visionary, and I’m not going to argue that, but his vision was “If this stuff was intuitive to use, it would be a hell of a lot better. And I can fix that.” Macintosh was “the computer for the rest of us.” It was the first personal computer with a GUI, with point-and-click and drag-and-drop, the first computer that made an effort to make tasks you accomplish with technology more similar to things you do in the physical world.
He stole that idea (with permission) from Xerox. Xerox had, to paraphrase some pundit whose name I can’t recall, spent huge amounts of money to see the future. Then they gave Steve a tour of their facility, and he went and made their ideas useful. Steve himself has regrets about that fateful day; he was so blown away by the GUI that he didn’t appreciate the network and the new approach to programming Xerox had developed.
Xerox gave Steve Jobs a peek at the future of computing, and he was just the guy to take that glimpse and revolutionize the way humans and machines interacted, and just the guy to bend a successful company to his vision.
Almost immediately after the Mac was introduced, Steve was wedged out of Apple. The two events were probably related; to say that Steve was brutal on the development team would be an understatement (“Insanely Great” was his mantra; his unwillingness to compromise on the little details his curse), and he was neglecting the very successful Apple II. But the Apple II was the past. Computing the way it used to be done. Mac was a world-changer. Steve knew that. The board of directors wasn’t so sure.
After his departure Apple continued to refine and improve on his vision, and try with increasing futility to protect those inventions from imitators. To this day, Apple is ready to throw down a lawsuit at a moment’s notice, but the biggie, the one that got away, was the one against Microsoft for copying the windowed operating system. Losing that one almost killed Apple.
Then Steve came back. FiRST step: quit refining the OS and overhaul it. The competition was improving quickly. Next step: follow the power. The computing power, I mean, which was moving into smaller and smaller packages. I was pretty excited about Mac OS X, but I was dead stoked when I heard the phrase “A thousand songs in your pocket.” I bought one of those first iPods, and on airplanes and in bars people would ask me about it. The thing was, in a word, awesome. (“Insanely Great” has long been retired. The phrase is kind of like the Great Wall in China, I think – much more fun for people who don’t remember the cost.)
I’m pretty sure that wasn’t the first digital music player, but when it came out, something fundamental changed. This was the first player that was useful, that carried enough music, that you could fill up almost thoughtlessly, that was simple to use, often without looking. All the details were right, the little things that others compromised on. That was Steve’s genius. Do it right. He had the unwavering belief that he knew what right was, even if no one else did. Do it right, and people will agree with you in retrospect. I cringed when Apple got into the phone business. Don’t they know what a cutthroat, small-margin business that is? They did it right, and I stand corrected (provisionally).
I think this is why I enjoy working at Apple so much. Most of you out there will never see the fruits of my labors (except perhaps as a microscopic price reduction in Apple products), but always I strive to put that little bit of extra rightness into everything I make. It’s noticed here. The spirit of Steve, his uncompromising attitude, is still alive.
God: Welcome, Steve. Did you enjoy the heavenly choir?
Steve: They were awesome! Really stirring. But…
God: But what?
Steve: What if everyone could hear their own music? I mean, not music they wrote, but music that was perfect for them, right at that moment.
God: That’s kind of what we do…
Steve: Let me handle this.
One of the world’s most famous corporate icons resigned yesterday. I had my head deep in code when I started hearing the word ‘resigned’ buzzing around the office, but I had stuff to get done. It was my sweetie who actually gave me the news that Steve Jobs had resigned as CEO of Apple.
My first thought: I bet his badge still works. This was confirmed when I read his resignation letter; he will continue to be an Apple employee. The elevators in Infinite Loop 1 are not safe yet.
My second thought: A man who played a huge role in shaping what computing is these days is very sick. Sick enough that he has accepted that he will not be up to running Apple and smart enough to move aside gracefully and let the people who have been running the company continue to do so without uncertainty.
I hope he’s ok. That had to be a monumental decision, not just to let go of the reins but to accept that his own health might not improve. I hope Tim and Peter and the rest had a chance to sit and have a quiet beer with their boss one last time, a chance to think about all they’ve accomplished.
And Steve’s badge still works. He’ll be around.
As I slid into the morning rat-farce today heading north on 280 I saw your modern, aggressive grille in my rear-view mirror. Sleek, shiny, and black. Not some cheap-ass little 3-series.
You were behind me for perhaps two miles, the entire time maintaing a safe distance. I could have switched to a faster lane, but like hell I was going to give up the chance to have a courteous, safe driver behind me. Eventually, of course, someone had to move into the space you left in front of you, and climb into my tailpipe.
I remind myself that not all of the people who ride my bumper are impatient assholes; some of them are merely incompetent. You, Mr. Beemer Driver, were both courteous and competent, and obviously interested in not ramming your sweet ride into the rear of the guy in front of you.
Thank you, sir, for a few low-stress minutes on my drive to work this morning. Hopefully I’ll see you again.
Yes, It’s true. One of the people I work with touches his computer monitor with his fingers. I never suspected that a place like Apple could harbor such people.
Today we were in a meeting discussing our project. He’s doing the database stuff; I’m concentrating on the presentation layer (see my previous rants about HTML). We were sitting side-by-side, each with his laptop open. On his screen was a dump of the data structure he was sending over to my code. “Here is the list of …”
Actually, I’m not sure what he said after that. I was staring in horror at the end of his finger, where it was pressed firmly against the surface of his screen. “Data list value array,” my co-worker said. I heard none of it. Here’s what I was thinking: Fingerprints. Photons baffled and confused. Acidic oils burning through the surface. Pixels, suffocating, twisting in agony. His screen was covered in fingerprints, the oils from countless screen-touchings built up into a layer that my eyes could no longer focus past.
“Will that work?” he asked.
“Um…” I replied. I wondered what it was that he was talking about. I wondered how he could work when his screen was—
His hand shot out, left index finger extended, directly at my screen. My lovely, lovely, screen, only three weeks out of the box — pristine, innocent of the bruising touch of errant digits. Nooooooooooo!
Perhaps it was my sharp intake of breath that interrupted the course of his rampaging digit. Perhaps he’s already aware that while touching one’s own screen is one thing, touching the screen of another is quite something else. The tip of his finger stopped just above the surface of my virgin monitor and hovered there, twitching, as he described something about something. There was a corner of my mind sending up a flare that perhaps the actual words that my co-worker spoke might be important. The signal was lost among the klaxons and Emergency Broadcast System alerts that demanded that every neuron be devoted to ongoing analysis of the motion of The Finger. The Homeland Security lobe of my brain was altering the threat level meter a dozen times per second, adjusting duct tape and adrenaline with every minute vibration of the chemical-weapon-bearing heathen on the doorstep. The threat level never dipped below ‘orange’.
After two draining seconds the threat receded. My screen, even now, does not understand the horror that nearly came to pass. (Or does it? My laptop shares an intimate network with thousands of others. Perhaps there are legends and stories that pass between them. Perhaps those other computers smile to themselves at the excited puppylike banter of my computer — “Wow! I’m running MySQL server!” — while the grizzled veterans roll their eyes. Meanwhile, the old-timers quietly admire the stoicism of my co-worker’s laptop. “Someone did that to me, I’d just kernel panic,” the headless X-serve in its air-conditioned enclosure says.)
Meanwhile, my co-worker thinks he’s told me stuff. I was sitting right there and looking where he pointed, so I must have been paying attention. I’m reasonably confident that he was speaking, I think I would have noticed if his voice stopped. Probably. He isn’t talking now, however, so he must be waiting for me to say something.
“I’ll be working on that next,” I say. “Can you send me a summary in an email?”
On my second day of work, at 3:38 pm, the first shot was fired. Within moments my co-workers were bristling with sophisticated foam-dart-launching technology, and my first Nerf battle was underway. Someone loaned me a long, bolt-action sniper “rifle” with a magazine that held about ten darts. I didn’t dive into the thick of the conflict, but I did take opportune shots when targets presented themselves. I also experimented with bouncing shots off the ceiling, trying to hit my coworkers from above. That wasn’t very successful.
One thing was clear: If I intend to survive among Apple’s finance help line employees, I’d better start packing heat. Plastic-tipped foam heat, to be precise.
Toward that end the light of my life visited our local Target, where she discovered just how elaborate the Nerf arsenal has become. Not knowing what my co-workers were packing, she didn’t want me to have some completely over-the-top weapon if no one else was that crazy. So, she bought a pistol that fired suction-cup darts (which I have dubbed “hollow points”) and had a cool little laser-like sight mechanism.
My sweetie brought it home and, much like a ten-year-old on Christmas morning, I liberated the weapon from the confines of its packaging and checked it out.
The gun used a pneumatic plunger driven by a spring to propel the darts. Unfortunately, the plunger was not very good a plunging, and the darts barely made it out the end of the gun. I was thwarted by plastic/pneumatic impotence. Sad times.
My ever-supportive sweetie has made another trip to Target to trade in The Little Pistol that Couldn’t for another model. I have assured her that it will not be possible to upstage my co-workers. “Large magazine, short barrel,” I have told her.
When I get home this evening my new cubicle warfare equipment might be waiting for me. What will it be like? I can’t wait!