An Open Letter: You’re Doing It Wrong

Airing Out Dirty Laundry

I’m sending this to you as an open letter, as a public airing is needed: the whole group needs to see how ignorant you really are, and how flawed your decisions are.

Your choice for database platform is simply ridiculous, and makes me question your technical chops. I could provide a long list of web references demonstrating why you’ve made a terrible choice (did you not read the horror story that I sent around? The one that got to the front page of Hacker News?), but I wonder whether it’s worth my time?

I honestly don’t know how you could have gone down that path at all.

And I heard about your decision regarding interacting with the database (is this going to be the whole stored procedure argument again?), going against every worthwhile tome of best practices. Again, you know my position, and have seen the supporting links. How could you make that choice?

And really, the schema you’re using in the database…did you not think about the future? Didn’t you consider the most important facets of this database? I can think of at least a dozen situations that your schema does not cleanly capture. It doesn’t properly prioritize future proofing/obviousness/performance/versatility or modeling at all.

Just incredible. But we’re just getting started, and sadly those aren’t your worst crimes.

The way you designed the service/app/presentation layer is a muddled mess, in my opinion. I do not agree with the scope of the items involved, and think that the number of components and services is simply a magnitude outside of where it should be. The decisions on separations of concerns and the domain of each integration point is just….I don’t know where to even begin. Again, I’ve sent web links regarding this before, so I don’t think anything is open to discussion and you simply did it wrong. I’m pretty sure they did something like what you’re proposing back in the 90s so maybe you should read up on some of the new techniques?

Your technology choices are simply bizarre, and fail to appropriately prioritize the considerations of maintenance, performance, security, verbosity and code clarity, code size and expressiveness, scalability, accessibility, integration, proven technologies, search optimization, recruitment of talent and team skillset, vendor support, licensing and costs, excitement of platform, and cross-platform and system considerations.

Did you even really think of those, because I just don’t know whether you did: Did you consider the needs of marketing and how we present the technologies we use to clients, because we do face questions about whether we’re on the bleeding edge from clients all of the time, and you know how concerned they are about that.

Every Choice You Make Is Wrong

The above was illustrative, because the arguments meted out apply to virtually every implementation by every individual in this industry.

What you are doing is wrong, by many interpretations of wrong.

Whether you’re using Oracle or mySQL or MongoDB or Riak. Go, C#, Java, PHP or Python. Service-oriented, client-server, web based, native mobile or a hybrid. jQuery or raw or angularjs or server-render or client-render or hash-bangs. CDN, geofencing, SPDY or TLS. Minification or concentration or sprites or resource lists. One-off or designed. Configuration files or databases or json or parameters. AWS, Azure, Digital Ocean, colocation or office server. Local storage of S3 or SAN. Infiniband or ethernet or fiberchannel. Yellow ethernet wire or red. Dell or HP or SuperMicro servers. Cisco or Dell networking. SSDs or magnetic. CPU or GPU or ARM or x86, CUDA or OpenCL.

A practitioner of the arts can present a very compelling argument against any interesting technology decision or implementation choice.

I know because I’ve constructed many of those counterpoints, often simply for the purposes of getting the advocate of a position to fully understand the real downsides of it. Other times simply to be argumentative…sometimes “winning” the argument with a position that I don’t actually believe in.

Whether justification you’ve built for your choices, you are wrong to many other people, and there are many citations that can demonstrate how wrong you are.

Years back, for instance, I wrote several popular entries about NoSQL (I intended it as nothing more than an even-keeled counter-argument to a rising level of hype, though many took them as indictments of NoSQL in general), and on those rare occasions that I go log-diving it is an unpleasant finding to see that many of the references to my entries are to support “why I am right and everyone who thinks otherwise is a dummy“, which is altogether too common in this industry.

Right now some of you are shaking your heads, declaring that no you’ve done right: Your aspect-oriented, test-driven-development, agile built MVC code using the esteemed library and built on that great stack is beyond reproach. But it isn’t. And the counter-arguments actually have merit because there are consequences and downsides to the vast majority of the choices that we make.

We are always wrong from some perspective. Understand that. Embrace it. You must embrace it or it will become a demon that will rob you of productivity.

Procrastination

I face the avoid-being-wrong demon daily. At times it has been an incredible impediment to progress, and is the primary cause of procrastination.

Every single decision, from the naming pattern of service calls to the URL structure to the serialization has the potential of becoming a major hangup because it represents a point where someone, from some position, can declare your choices incorrect.

It’s tough to get past, and the moment you do, the next opportunity to be wrong presents itself.

Every fork in the road ends up having the potential of dramatically reducing progress, where knowing less, or having fewer tools at your disposal (see the fantastic TED video Embrace the Shake) might have been liberating: In some ways I envy those people who truly believe that their positions are unassailable, their ignorance allowing for blissful forward progress.

But we’re empowered. And we know countless options for every choice. And with ignorance not being, at least in the long term, bliss, we know that what we’re doing is wrong.

We are cursed.

It is what it is.

Embrace being wrong. Understand that you’re vulnerable to criticism for your choices, and simply need to move on. Avoid trying to make your position unassailable, because you simply can’t.