Knee Deep in Improvements
Right now I feel like Ludwig von Herbgaarten, Landscape Gardener extraordinaire, and three time German Gardening Monthly “Man of Hard Wood”. Ludwig has just laid down a spec-fucking-tacular garden under contract for the Crown Prince of Ubercashistan. He tells the rest of the team to finish up the fence and fertilize it and trots off to spend some well earned time in the palace harem. When he comes back there is a fence through the middle of the fucking duck pond, and the entire place is knee-deep in horse shit.
And all my pretty flowers died, you incompetent noobs.
You just lost the Game
You hand over a polished, well designed product. A maintenance team shouldn’t have any issues adding minor functionality on client branches with your well designed and documented setup. Yet every damn time you get called back six months later to help with some issue they are having, and find the size of the codebase has tripled, functionality is up 10%, and functioning functionality is down 50%.
Not that I claim that software engineering metrics are anything but complete bullshit, but if function points per kloc starts to go down like Paris Hilton, then it must be due to someone playing design doctor with their dick out.
Get off my lawn
Blame can be laid at the door of the juniors of course. They are positively itching to whip out their dicks and do some real software engineering so they can pull chicks at Sharepoint conferences or something. They ignore the fact that all the hard parts have been deliberately done for them because their role is suited to their ability (editing config files, and perhaps a new implementation of IShitSelector for some picky bastard of a client).
When a chance comes up like this to stamp their clumsy boot print all over my nice design, how can they resist? Can we really blame them? Of course we bloody well can. My recommendation is going to involve “your ass” and “fired”. GTFO.
The First Rule of Fail Club is
I’m a nice guy. A top bloke. I give credit where credit is due, and I don’t mind yielding when someone else has a better plan. If you’ve done well, I’m going to let you know about it. If it’s saved me time, then I’ll probably even buy you a pint.
That said, if your shit sucks I’m going to drop the cruel hammer of reality on your fragile ego.
I Never Less Than Three’d You
I contract for a place with a problem. Everyone happily works away like little beavers, and there is little interpersonal conflict. The problem is that nobody will ever say “Hey. Your shit is fucked. Fix it”. People are being too nice. It means problems are identified and instead of hurting someone’s ego by asking them for a fix, the issue is worked around. This leads to a great big back-slapping circle-jerk bukkake session, an architectural disaster. You do not talk about Fail Club.
If your server is taking data from 10Gbps fiber link and stuffing it down a low bandwidth connection to a client, then not having rate limiting is fail. Sending “only the changes” when you are talking analogue sensors means “sending shit constantly”. Maybe I’m just “pessimistic”, or just maybe people calling themselves a “Software Engineer” should understand the fucking concept of “less-than”.
Burn the heretic!
Their biggest problem is that their previous version worked – before they had the fiber link, it was 1200cps serial. It worked back then and I’m just being pessimistic. Or, see how my crazy “less-than” theory is holding up here?
This is only the beginning of the fail. Server dropping subscriptions? Add a resubscribomatic to the client. Patch, patch, and patch again. 30% of the codebase is dedicated to working around issues in or fixing issues in other components. The look of horror on peoples faces when I say “Welp, I guess Barry is just going to have to fix the Frobulator” is hilarious. They all hate me.
Solutions? Come up with a terrible design, pass it out for review. Anyone that claims to be happy with it should be immediately fired. Encourage a productive working environment by encouraging your staff to grow a pair of goddamn balls. Problem solved.
Lies, Damn Lies, and Ballistics
Lets say there exists a component which was implemented by a monkey. It needs some major work with the Refactoring Sledgehammer to bring it up to scratch, which would take a month or so. Lets just say its hypothetically a fairly important core component too, like a feature tracker for a UAV laser targeting system.
Lets also say the management team are a bunch of noobs, who think that by claiming a “final deadline” is approaching every two weeks it will motivate their staff into finishing early.
Shut Your Lying Whore Mouth
Of course I don’t give two shits about your stupid project. If I’m told its a two week deadline, then its definitely not my job to play Detective Dick Swinger and sniff out if I really have a month to do the required changes. Also I still get paid to give you advice based on your lies – so my recommendation is going to be a dodgy band-aid fix.
After six months of this shit, you are going to have so many layers of hot-fixing its amazing anything will work. So when the feature tracker jumps to your car, lights it up, and you get a Maverick up your asshole, don’t come complaining to me. You probably shouldn’t been driving around in Palestine anyway.
Basic Addition for Dummies (and PMs)
There’s a thousand hours left, retards. Even if we do “pull together” and “give it 110%” its still going to take 900 odd hours. You suck at project management, stop playing immature little games and thinking that a little “motivation” is going to magically fix your blown out schedule.
Are you are planning on asking for my opinion on how to fix your shitty project? I’m going to be equally motivated whether the deadline is next year, or tomorrow. I don’t give a shit how much money is on the line, because I was smart enough to not invest in your stupid idea.
You Nit Tests
People that have discovered unit tests for the first time act like little retarded Timmy in a candy store. Developers that have decided they deserve the title of “Senior” discover the joys of the percent-coverage metric. Surely full coverage will make up for them sucking at coding!
Like my Waffle House hash browns…
“We have 98% test coverage!” exclaimed the Senior Developer, with a smug expression on his face. His manager looked as proud as Timmy getting a participation certificate. I think they expected me to immediately kneel down and fellate them in awe, which I didn’t.
Taking a look over their test fixtures, it was pretty clear the tests had been written after the fact. Most of them were along the lines of “No Exception = Pass”. Some of them asserted some blatantly wrong results. Ninety-eight percent coverage and ninety-eight percent useless.
Hint: Writing your fucking tests to check the result is the same as what your first attempt outputted is going to ensure your results stay wrong.
Ensure_Adding_One_To_One_Results_In_Two()
Senior Dev, probably because he felt too important to do some useful work, had written some laughable Official Coding Standards. Part of this stressed the goal of “100% Test Coverage LOL” – and decreed that every goddamn property would be tested.
Here we are testing basic features of the CLR, using the CLR. Set the property, get the property, call Assert.Equals. Might as well stick in a few Adding One To One Results In Two tests while you are at it. If the platform is that retarded then it might well go like this:
3laws: Hey Timmy, can you remember the number 7 for me? Now can you press this big red exception button if the number you are remembering is different to 7?
Timmy: I like puppies!
For my sanity, please
Again, if you don’t know how to use a tool, put it down and walk away. Or at least take a step back and ask “Why am I doing this?”. Some pretentious fuckwad blogging about how your test coverage metric is linked directly to your epenis is not a good enough reason.
Still, I’m happy enough to get paid my consultancy rate to write unit tests for all my properties. Who am I to argue with the Official Standards if it makes it easier to do my job while drunk?
Cargo Cult Coding
During WW2 the US used to run some bases off tiny pacific islands and keep the natives happy with food, trinkets and cocaine. So after Uncle Sam upped and fucked off, these poor uneducated natives tried to bring back the magic delivery planes. I shit you not, these crazy bastards built wooden runways, wooden air traffic control towers, and made dudes sit in the tower with carved headsets to try and bring them back.
You can train a noob…
What do you get when a pro spends some time with your team of noobs and gives them advice? Trained noobs, bunches of them, blindly applying some mantra that once applied to a long-gone specific situation, and then exaggerated. “You could use an interface to expose that common functionality” becomes “You should use an interface all the damn time. Every class should have a matching interface.”
Its best practice… apparently.
You know what best practice is? Knowing what the fuck you are doing before you start banging out code, you fucking monkey.
Don’t even get me started on the 20 year old “optimization” tips. People not using properties, citing “performance” reasons. Heard of JIT inlining? Even your damn CPU reworks x86 into its own internal instruction set on the fly.
Do you really think that some 1990s C optimization trick carries over to C#? Its likely the changes you are making has zero effect on the binary that is actually running. Its equally likely that, even if the shit you are “optimizing” ran instantly, your app would still suck due to all the List<T>.Find you have used everywhere.
You suck more than the guy who wrote your compiler. Get over it.
Summer of Freetards
Hippies started off in the 1960s, peaked in popularity seven years later as millions of unwashed penniless hippies descending on San Francisco hoping to change the world with the Summer of Love. They failed, and finally in the late 70s people ceased to give a fuck, and the hippie movement became irrelevant.
Coincidently, Stallman started off the whole GPL freetard movement in 1989. Seven years later saw millions of unwashed penniless developers descend on Silicon Valley, hoping to change the world. They failed, the bubble burst, and now as we hit the late 2000’s the open source fanboy movement is on its way to becoming another bunch of crazies who sit around freeloading and refusing to shower.
Arrogant Primitives
The GPL is based on the laughable premise that your shitty scratching in vi is valued at “everything that ever uses this code”. Applause for the attempted strong application of Rule #1, but a swift kick to the nuts for not noticing that the market is prepared to give you either fifty bucks or the finger. Your pick.
Regardless, we abandoned your shitty barter systems when currency was invented four-fucking-thousand years ago. Not much later we came up with this thing called a “corporation” which can take in currency from interested parties, and output useful things (like complex software) in a more efficient manner than a bunch of loosely connected loonies. It can do this by hiring experts (instead of say murderers), which no single interested party could afford.
Move those jelly rolls Stallman!
The fail-train has left the station and is heading off into the sunset. You can probably catch up if you want to get aboard tubby. Back here in the real world we need money to buy things, and even if Ubuntu “Fellating Faggot” is twice as good as Vista, that values it at around twenty bucks – less than ten minutes of my time.
I guess I could give that back to the community in advice by banging out a short blog post of something. Oh wait… I see what I did there.
Agile: Cockburn and butthurt
In software, when noobs aren’t quite sure where they are going, and aren’t sure how they are going to get there, they whip out the Agile card. CIO Magazine put up an article about how the original signatories on the Agile Manifesto are crying about noobs failing under the Agile banner. Cockburn, it is your fault, quit trying to weasel out of responsibility for it.
Its like +5 to Fail
So with a bunch of noobs convinced that a bunch of buzzwords is going to let them skip the boring bits of software development, like… all the planning phases, they can get right down to coding the fun bits and add on the hard bits later, right? So when you can’t answer a simple question about the domain model 75% through the project, its all going to be fine?
Hint; not being able to use precise terminology to describe your domain model is a symptom of not knowing dick about your problem. Good luck writing anything but utter crap when you don’t have any idea what the fuck is going on.
And while I’m at it, no. No you cannot just agile in important things like cluster support and atomic transactions later.
Oh I See What You Did There
If you plan on using Agile to get out of writing proper documentation, then get ready to agile your sphincter for the angry client. Properly written user stories are hard work, harder than a traditional func spec.
Forget the “we are all independent professionals” bullshit as well. Most likely you have perhaps one pro guy who can keep a handle on the requirements and design – if you are lucky, and the rest are a bunch of clueless noobs.
glhf
Kicking off (in the nuts)
So to kick off this extravaganza of web two point uh madness I would like to point out how I keen I am to meet the chap who coined the phrase “Software Engineering”. I would very much like to kick this asshole square in the cods.
Millions of monkeys.
“Software Engineering” has convinced hoards of low rent CS graduates, who never quite had the grades to get a real engineering degree, that all they have to do to qualify for the title is make shit as complex as goddamn possible and then walk around like dick swingin’ motherfuckers while talking about how the project is “scalable”, “extensible”, and can give “five nines availability” on hardware that barely manages three. Then when the project hits the magic mark where the client wants to actually see something working, everything is abstracted so far away from any semblance of reality that the people designing the system don’t actually have any idea about the problem domain at all.
Also it doesn’t fucking work.
Ook, a monolith!
You see that’s the other thing about all the shiny IOC, ORM and thread pooling libraries you downloaded off the interwebs – they don’t excuse you from actually understanding what the fuck is going on inside them. No, you can’t be pro by downloading a bunch of code and wiring it together with a big stupid grin on your face.
So how does it go now? I take your money, you don’t want to throw away any of your valuable code, and we dance around for a few sweet months, and then I ditch you for another sugar mummy.
And it still doesn’t fucking work.