Posts

Showing posts from October, 2018

We’ve All Been There…

Image
/via http://www.commitstrip.com/en/2013/10/09/la-pire-sensation-du-codeur/ It was a glorious Friday night in Hoboken, back in 2008. Ok, this  is  Hoboken we’re talking about, so it wasn’t all that glorious, but we’d been out for dinner with friends, friends who appreciated wine, and, thanks to the wine (and friends!) it was a glorious night. Our taxi had  just  pulled up by our house, and everyone was trooping up for  MOAR WINE YES LETS SEE WHAT WINES THERE ARE YES , when I got a call from one of the SysAdmins. Him: “ Uh, dude, I think I did something ” Me: “ ???? ” Him: “ I may have shutdown our primary DB ” Me: “ !!!! ” Him: “ I  shutdown  the DB on my desktop when I left, but now that I think of it, I may have done it in the wrong window ” Me: “ !!!! ” Him: “ And I’m on the freeway, which is backed up seven ways to Sunday… ” Me: “ !!!! ” Him: “ And I don’t think the secondary took over, because Customer Support is getting slammed ” Me: “ !!!! ” We had many many protectio

Adaptor-mageddon

Image
A long long time ago, back when dinosaurs used to roam the earth, there used to be these things called “ Overhead Projectors ”. You’d print — or write! — your presentation onto “ Transparencies ” (sheets of transparent plastic), and that would get thrown up on the screen, or much more commonly, the wall that you were projecting stuff against. You could also draw on the plastic in real-time, updating your preso to make a point. Mind you, there were no animated transitions, though that’s probably a Good Thing  . The best part to all of this was that there were basically three things that could go wrong 1.  The bulb blew out : Easy to deal with 2.  No screen : You moved the furniture out of the way, and used the wall. 3.  You forgot your slides : If I had a goat for every time somebody did a last minute “scribble the preso on the transparencies”, I’d be the world’s largest producer of goat cheese… And then, along came laptops. ( Ok, I know what you’re thinking, I’m about t

“Professional” does *Not* have to mean “Enterprise”

Image
What does “ Professional Management ” mean to you? It’s not an idle question, because the answer can have significant impact on your workplace environment. Think about it this way — if your company has had any degree of success, then, at some point, it’s probably going to bring in a “grownup” to deal with the inevitable issues around growth. These may be current issues (“ we need to scale our sales and marketing efforts ”), or upcoming ones (“ we’ll need a *real* customer support organization ”), but regardless, you’ll need to bring in someone who has learned from their mistakes elsewhere  . In this situation, there are typically two different approaches that can get taken here. You can bring in someone who has cut their teeth in  StartupLand, and has experience growing small companies into larger ones, and can do the same for you. Or, you can bring in someone from  EnterpriseWorld , who has seen how things work at scale, and can apply those lessons to your organization. Mind you

“Software Is An Art”

Image
It’s a great line, isn’t it? “ Software is an Art ” tells us that we’re doing is Craft, that we’re Creative, our work is Unique, and we’re all snowflakes. The problem, however, is that so much of our day-to-day work in the field is just so bloody mundane, there just doesn’t seem to be all that much Craft to it, let alone Art  . Think about it — so much of our work is some combination of looking stuff up on StackOverflow, adding in all the boilerplate around what we found to make sure it complies with whatever the internal guidelines are, and then adding in a metric ton of instrumentation, logging, and whatnot to deal with the inevitable late-night debugging sessions when it turns out that StackOverflow Is Not Infallible. This isn’t entirely an accident though — the Edison quote about genius being 1% inspiration and 99% perspiration has a tremendous amount of truth to it. Even more importantly, we tend to forget that so much of what we consider “craft” is actually mind-numbing

Web Bloat — The Eternal Lament

Image
Let’s wind back — way way back — to the early days of the InterWebs. The year was 1994, and a bunch of us were building out some of the first commercial “web sites”. ( Quotes because a decent chunk of the sales process actually involved explaining WTF was a “web site” was in the first place, why you should care, and just give me the damn money. But that’s a story for another day… Anyhow, back then we had a limit of 50KB per page. And even  that  was something that we had spent days — weeks even! — arguing about amongst ourselves. After all, 50KB? That would take  forever  to load! Also, how could you possible have that much stuff on a page in the first place? And then you had the other side, whose argument basically could be translated to “ As long as it looks good, I don’t give a shit about size ”. Of course, yes, there was a bit more about  aesthetics , and  the integrity of the design , and a whole bunch more. This argument, as far as I can tell, has been codified into the

Agile, Iterative Development, and Control Freaks

Image
There is a persistent myth — particularly prevalent amongst control freaks— that if you get the  requirements  detailed enough, you can assembly-line your way through  development . Dig deep enough, and you’ll find that to them,   Agile is the same as Iterative Development   . Oh, they absolutely get the bit about “ user feedback ”, “ short sprints ”, “ incremental releases ”, and so on. However, in their minds, all of these steps apply   only   to the development process, i.e., you do all of these things   after   you’ve nailed down all the requirements, as shown below From their perspective, you just iterate through the development cycle in a succession of sprints, in what is basically a linear progression. In each sprint, for example you cycle through  Design → Development → Release → Review  for 10% of the requirements, and at the end of 10 sprints,  voila! you’re done! Oh, if you want to get a little pedantic, there might be an extra sprint or two at the end for “ Chang

Replicating bugs is the *pits*

Image
/via https://www.monkeyuser.com/2017/steps-to-reproduce/ This, tragically, is entirely true. It takes you weeks of fiddling around with increasingly arcane maneuvers to replicate the precise set of circumstances in which that extremely weird edge-case that you didn’t account for shows up. But, and this is key, your end-user replicated it just a few femto-seconds after you deployed the release. Sigh…

The *Real* Threat of “Bad AI”

Image
/via http://www.commitstrip.com/en/2018/09/24/trolling-the-ai/ This  particular episode of CommitStrip  pretty much represents the popular take on AI. Mind you, “popular take” is, as usual,  not  the same as “realistic”. After all,  when you’re designing robust systems, one of the very first things you’ll do is correct for signs that are missing, misplaced, or mis-identified , and if/when self-driving cars actually make their way into the real world, one of the things that they  will  be is robust against errors at multiple levels. Heck, that’s pretty much the way  humans  work — our vision is pretty seriously fallible, but we correlate a lot of  other  information to make sure that we don’t f**k up! Think about how you process visual feedback when driving. You are, unconsciously, running rules like these in your head all the time • A sign saying “60 mph” in a residential neighborhood is clearly wrong •  If you are wondering if it is a Street Sign or a Banana, go with Street Si

Cowboy Developers, and Requirements

Image
“I don’t need requirements — I know what I’m doing” —  #CowboyDeveloper A paraphrased version of an actual PR-related discussion I had recently follows. And yes, I’ve had this conversation more than once in my career — there are a  lot  of #TechBros out there  . Hey Bob (let’s just call him Bob), I wanted to talk about this PR you just submitted. Specifically, this bit in the config file —  e nable_network_console: # Yes | No  — care to explain it?¹ Oh, I see, most of the users don’t want the network console, but some might? So you’ve got that in there, just in case anybody wants to enable it? Cool, cool. One more question though — why do we even have a network console in the first place? I mean, I was looking at the requirements behind this PR, and I don’t actually see anything about network consoles, let alone enabling/disabling them, y’know? Oh, right, you thought it might be a useful feature, so you put it in there. Make sense. And they’re not in the requirements  ‘cos