Good Developer Idea, Bad Developer Idea



Good Developer Idea: As part of the open culture at a struggling SaaS startup, you give a developer the admin rights to your build and deployment servers.
Bad Developer Idea: You forget to eventually take those rights away when you go into production, and when the Feds come to raid your offices, you learn that the developer has used your servers to host a “Man Seeking Horse” dating site. (Even after you elaborate on how horses can’t use computers, the developer still stands by his idea.)

Good Developer Idea: Create a library that has reusable, generic code for your group.
Bad Developer Idea: Let the least-qualified lunatic in your group take ownership of it and ruin its whole purpose. “So, with the latest changes, you pass your name into the class constructor (like “John”), and the class executes only your code instead of the code that was written by you or Bob. See? It’s shared and reusable. Now leave me alone to snort my lines of molly.”

Good Developer Idea: Writing to log files from your UNIX program or script.
Bad Developer Idea: Porting that program or script to Windows and still writing large log files in the years B.C. (Before Cygwin). On the plus side, when you opened a 100MB+ file, you gained another hour of personal downtime for yourself.

Good Developer Idea: In order to demonstrate a particular method or style, share a project with one of your junior developers/admins and let them use it as a template.
Bad Developer Idea: Forget to stress that the variables in the configuration file are not supposed to stay the same. “Thanks for letting me use your project. Look! My new project ‘PurgeTableData’ works! What did you say about database properties in the config file? More importantly, what’s a config file?”

Good Developer Idea: In the face of a new project being discussed, you argue against the suggestion of an off-the-shelf proprietary technology that doesn’t really fit your company’s needs.
Bad Developer Idea: Even though you may be right, they press you for an alternative, and you don’t have one. Consequently, you are forever known as ‘the whiny bitch’ among your peers, and they force you to wear a burqa in the office as a reminder.

Good Developer Idea: When attempting to find a new candidate for your development team, encourage other developers to be a part of the hiring process and to provide input.
Bad Developer Idea: Not using discretion as to which developers that you encourage. “Okay, so I would eliminate the first guy, since he puts the opening bracket on the same line as the function declaration. Only idiots do that. And the chick…well…we know chicks can’t code. So that leaves the weird guy who carries around his dead, taxidermied daughter. Now that guy can code! I would pick him.”

Good Developer Idea: Working with management, you help to eliminate the method of stack ranking your fellow employees, ensuring that each one is evaluated on individual merit.
Bad Developer Idea: You forget to take into account that they are all essentially worthless, and based on the new system, they are all fired. In turn, they find out where you live, and they burn your house down.

Good Developer Idea: While at Scrum meetings in the company conference room, you use the whiteboard to create a visual map of the next iteration in your project.
Bad Developer Idea: In order to make room, you clear the current board in haste, and without thinking about it, you erase the cartoonish doodle in the corner of the board. When the CEO and his 6-year-old come to the conference room later (so that the kid can proudly show the doodle), the kid erupts with tears. In order to make amends, for the rest of your life, you must now give the kid and the CEO a piggyback ride whenever the both of them are in the office together.

Peter Bolton is the author of Blowing the Bridge: A Software Story and has also been known to be a grumpy bastard on occasion.

Fun Ways to Repurpose Web Tools



1.) Convince investors from a third-world country that a mashup of MailHooks and RequestBin is going to replace texting in the near future.

2.) Start to create JSFiddle examples as substitutes for your blog posts and convince hipsters that “they need to catch up”.

3.) If you own a company, use Mirrorrr to pull down and create an exact replica of your competitor’s site, except for the added endorsement of NAMBLA on every page.

4.) When that asshat down the hall wants to “inspect” (a.k.a., “copy”) your code yet again, be sure to be a team player and give it to him…just be sure to run it through UrlEncode right before you do. If he asks you about it, tell him that you’re “l33t” and that’s how you code.

5.) Recommend HostTracker to your less tech-savvy relatives, telling them that it will protect their Facebook page like a junkyard dog and will call the cops on anyone who unfriends them.

6.) Install Fiddler onto the computer of your boss without him being aware. One day, launch it and proceed to convince him that it’s a monitoring tool planted onto his machine by the NSA. If he just gives you $20K, a gun, free hardware, and 2 months of vacation, you’ll be able and willing to put a stop to it.

7.) Play pranks on friends, asking them to help debug HTTP Posts which come to your web site. Using MailHooks, make sure that any Post ends up calling emergency services, so that your friends end up swatting themselves.

8.) Reroute your network configuration so that all addresses point to Necrohost.

Peter Bolton is the author of Blowing the Bridge: A Software Story and has also been known to be a grumpy bastard on occasion.

Data Armageddon: When Users Define the Schema



Some people are advocates for the extended participation of stakeholders when it comes to implementation, but I would advise caution against that. Why do I say so? Because like some others, I’ve seen the results…

Let’s say that your company has a plan to eliminate the redundancy of existing data in several departments, by creating one schema which is to be shared among the many. After several weeks of collaborating in a state of perpetual confusion, the stakeholders of your project have met on their own without you (despite your repeated warnings of violence towards them). Together, they have stupidly consolidated their tables of sewage and finalized the schema for one massive failure that they plan to share:

Product Table

Column Name Type Example Description Notes
Product ID long 123456 The ID of the product.
Name string WidgetPlus The name of the product.
Manu_Name varchar(1024) Acme, Inc. The manufacturer of the product.
Manu_Name_Inv varchar(1024) Inc., Acme The manufacturer of the product, with its name inverted. Bob requested this column, since his group has a bunch of COBOL programs that nobody knows how to change.
Manu_Name_Bck varchar(1024) .cnI, emcA The manufacturer of the product, with its name backwards. Due to a medical condition, Steve can only read the names of companies if they’re backwards.
Product_Type varchar(256) WIDGET The type of the product.
Product_Type_2 varchar(256) WIDGET The type of the product…again. Nobody knows why it’s needed, but if it’s not there, all the legacy systems in the inventory group will implode into a massive black hole and consume us.
US_Price currency 3.99 The price of the product.
All_Prices clob (Huge XML file) The price of the product in every available currency. The finance department needs this list of prices. The values will be static, which probably won’t be a problem. Exchange rates don’t change, right?
Misc blob (Random data) A dumping ground for extra data. If anybody needs extra space to put shit, just spread your cheeks and plop it here. What could go wrong?

Peter Bolton is the author of Blowing the Bridge: A Software Story and has also been known to be a grumpy bastard on occasion.

Quotes from an Outdated, Ignorant DBA



“I started to learn about MySQL, but I stopped. Somebody told me that it had been ruined by some chick developer named Maria. Are there any pictures of her out there? I heard that she’s hotter than Cassandra.”

“NoSQL, huh? How does that work? Can I just plug my Kinect into my computer and create some tables by waving my arms?”

“Finally! They’re releasing version 11.0.1 of Paradox. I’m gonna be at the launch party at my friend’s house. It’s gonna rock so hard.”

“Yeah, I’ve had some problems with sharding myself. Luckily, whenever they’ve popped up, there’s always been a McDonald’s or a public bathroom nearby.”

“Should I start getting into MySQL or PosterOgreSQL? I’ve heard that both are pretty good. What’s with the name of the latter? Was it used inside World of Warcraft?”

“Some of the suits asked me to start looking into this Memcached stuff. I don’t see what the big fuss is about. I can’t even create a schema in it with a DDL file.”

“I heard that the other departments in the company are starting to use MongoDB. They keep talking about storing the data with some dude named Jason. You know him?”

“I want to put my databases in the cloud. So, I got them all wrapped up in boxes and ready to ship. What’s the address for the Azure building?”

“Everyone talks about Javascript, so I’m gonna give it a try. I’m having a hard time connecting to a database. Are there some drivers that I need to install?”

“One of the brass keeps insisting that we use open source software for our infrastructure. I keep telling him that we already do. They’ve opened the codebase for Btrieve, right? What do you mean ‘what’s Btrieve’, you stupid punk?!?”

Peter Bolton is the author of Blowing the Bridge: A Software Story and has also been known to be a grumpy bastard on occasion.

When API Documentation Is So Bad that It’s Good, Part 3

Web Method
data.moveData

Description
Apparently, for some of you out there, it was not simply enough that you could just save data as a record with a provided ID. No…that wasn’t enough. Some of you bastards have insisted on moving data from one record to another. Who would need to do such a thing?!? Personally, you make me sick…but since you’re our special client, we have implemented the precious functionality that you need from us.

Request URL
http[s]://ima.weiner.com/carlosdanger/trousers.moveData

Parameters

Required Level Name Type Description
Required SourceID String The ID of the record from which data is being moved.
Required TargetID String The ID of the record to which data is being moved.

And there you go…happy, assholes? Oh, but I forgot…there are a few more additional steps after you call the method…

1.) The return value of this method is a string (which we will refer to as your TrouserKey); you will want to hold onto this for future use.

2.) Since the method is asynchronous, you will need to wait an undetermined amount of time before the data is actually moved. Usually, depending on the weather, this interregnum is somewhere between several minutes and a couple of days. However, you are allowed to occasionally (occasionally!) call our “hasBeenMoved” method, using your TrouserKey to see if the data has been moved yet.

3.) After repeatedly poking us with your TrouserKey and finally getting a Success from the “hasBeenMoved” method, you should get ready to call the “getMovedStatus” method. Since your data is important to us, we do provide two-factor authentication when getting the status of your data. So, at this point, we will wardial your company’s location and send you a fax with a PIN number. (Not to worry…if you don’t own a fax machine, we will send you a FedEx package with the PIN number in it.)

4.) Finally, after receiving your PIN number, you can use your TrouserKey and PIN number to call the “getMovedStatus” method, and then…voilà! We will return a formatted URL with embedded JSON in it…which, when you think about it as a smart person, makes sense. It will look something like this:

http[s]://ima.weiner.com/carlosdanger/trousers?TrouserKey=3fb39e4390f0&statusrequest=%7b%22WhoIsFat%22%3a%22YoMomma%22%2C%22
WhatShouldIRead%22%3a%22BlowingTheBridge%22%7d

I don’t often say this…but that’s just beautiful, plain and simple. And it totally makes sense to do it that way. Totally.

5.) After calling the URL, we will return a simple text page that will have either a “Success” or “Failure” in big, bold letters. If you wish to know the reason for the failure, you’ll need to call our support number and be ready to communicate in Swahili.

It’s that easy! And if you don’t like it…? Go suck it! I ain’t breakin’ my back for you, asshat.

Peter Bolton is the author of Blowing the Bridge: A Software Story and has also been known to be a grumpy bastard on occasion.

What a Developer Says Vs. What a Manager Hears



Developer Says: Based on our design, I could have a MVP done in a week. Afterwards, we can go over that, pivot the design, and then build a more substantial iteration by the end of the following week.
Manager Hears: The whole thing will be done in two weeks.

Developer Says: Yeah, with my limited knowledge and a few of my favorite tools, I can build some web services that can allow fellow company programmers to interact with our system.
Manager Hears: By myself, I can construct a load-balanced Web site that will accommodate millions of global users per minute.

Developer Says: We should have a meeting with release engineering and stress that we can’t meet deadlines without proper build and deployment machines.
Manager Hears: Waaaaaaah…[cry tear, emit snot bubble from nose, kick legs while in diaper] Waaaaaaahhhh…

Developer Says: We need to establish ownership of our various software projects, so that people can be held accountable.
Manager Hears: I am willing to take full ownership of all software projects, and I volunteer to be the official company scapegoat.

Developer Says: When you write a web method with HTTP GET, it should generally only return data. With a web method that writes data, it should really use either POST or PUT.
Manager Hears: Blah, blah, blah…I’m a flaming, anal-retentive nerd who has to have everything in a certain way, because getting things right is as important as my Tolkien underwear….blah, blah, blah…

Developer Says: Dinesh and Gilfoyle have reverse-engineered some of the legacy programs, and they’ve found inconsistencies with some of your old specs.
Manager Hears: We should fire Dinesh and Gilfoyle.

Developer Says: Since we’re in a crunch period, I guess that I can remote onto my dev machine from home this weekend, in order to get some work done and to get us a little ahead of the curve.
Manager Hears: I will gladly blow the bridge and die smiling in an attempt to save this impossible project…and even if my near-future reincarnation is about to be aborted in a clinic, my bloody fetus of a body will jump out and crawl back here, so that I can once more be a martyr for your noble cause. Please use me as you see fit.

Peter Bolton is the author of Blowing the Bridge: A Software Story and has also been known to be a grumpy bastard on occasion.

When API Documentation Is So Bad that It’s Good, Part 2

Response Codes and Errors

The following list presents our potential error codes:

Error Code Error Message Description
7734 Something Definitely Happened …but we’re not exactly sure what.
1334637 Not This Time It failed? Try again. Did it work? Okay, good. What happened? You’ll never know.
3704558 Success with Errors Meaning that we did what you wanted…but then something bad happened, also. Like the database was erased. Or something.
450087734 No Just…no, man. No way. No.
580083351 Invalid Parameter Some of your data was bad…What? You want us to tell you which parameter had the bad data? I’m not your damn slave. You figure it out, you pushy asshole.
580087734 Deprecated Method This method doesn’t work anymore because we’ve disabled it. We could have forwarded your request to its replacement, in order to be backward compatible…but we didn’t. Why? Because we hate you.
5800808537 Multidimensional Error So, basically, take this error code and pass it (along with your UserID) to the GetSpecialErrorCd method. Now, take the result of that method call and multiply it by your UserID to get the resulting product…which is how much you’re gonna need to pay us in order to help you figure this one out.

Peter Bolton is the author of Blowing the Bridge: A Software Story and has also been known to be a grumpy bastard on occasion.

All Your Character Encoding Belong to Us, Western Europe

Listen, Western Europe…North America has a great deal to thank you for. You are, of course, our big brother…and we’re really glad that you led the way. However, we’re a little ahead of you on certain things, and we need to get something straight: older doesn’t necessarily mean better. And when it comes to character sets for languages, you’re really starting to show your age. Much like the show Hoarders, I know that you have a hard time letting go of your “treasures”…but, really, it’s for the best. Now, I’m not suggesting that certain garbage characters be dropped entirely; I’m sure that your ministers of culture are already seething at the mere mention of it. Of course, you can use them without reservation in your daily lives for useless fun. (Like calligraphy!) For the sake of computing, however, it’d be better for all software developers (and everyone in general) if you just converted all electronic text to ASCII…and I’m willing to bet some of my Western Europe counterparts would agree with me.

Imagine a world where we wouldn’t have to ask “Is this character in encoding Windows-1252 but not in encoding ISO-8859-1?” That place could be real! Just think about that for a moment…it would be beautiful, wouldn’t it? Together, we can make that happen. So, let’s take that initial step of purging your electronic banks of filthy, superfluous text. Much like Hoarders, we need to step through each “treasure” and mull over its inherent worthlessness…I mean, “value”…to your respective languages:

Ligatures – Come on…we both know that they’re stupid. Æ and Œ were created by drunk Trappist monks, when they were sloppily copying books with cramped hands. Afterwards, when someone pointed out their mistakes, they said “Uh, no, I meant to do that. Those are real letters.” And thus ligatures were born. Even more and more of your populations have stopped using it, and they split them into “AE” and “OE”. You know that it’s dying. Drop them.

Umlauts – We’re not even going to address diacritics for now and how everyone should just use normal tittles. I said tittles! Stop laughing! In any case, we’ll address that diacritic bullshit some other day…First, I have most encodings on my side: they don’t distinguish between umlauts and diaeresi. (Even Unicode is like “I don’t give a shit.”) Second, each country has its own version of them! You formed the EU for a reason…start standardizing that shit! Three, I understand the purpose of umlauts: to help a nascent reader with the pronouncing of vowels that are next to each other…but in North America, we eventually get it after some direction and practice. We don’t need diagrams and pie charts in order to learn how to pronounce “cooperate” properly. Trust me…you can, too.

Cedilla – Even though I’m against diaeresi, I understand that they’re useful, especially to novice readers. But a cedilla? You can’t just replace “ç” with a “sc”, “ts”, or even a “z”? Because it’s so special, of course. Did an ancient Spanish or French monarch allow their child to doodle while writing…and then it was decreed that the doodle was official henceforth? (Personally, since I love the movie Aliens, I’ve always liked to doodle little snapping jaws shooting out of everything. If it hadn’t been invented in the Middle Ages, I probably would have invented the cedilla…but if would have looked different.) It doesn’t matter. We all know how useless monarchs are…that, and how they generally look better without heads. (That’s a tip of the hat to you, Frenchies.) In any case, like monarchs, the cedilla is a complete waste. Into the trashcan.

You see how easy that was, my brethren in Western Europe? We got rid of three different types of characters…in one shot! That’s at least dozens (if not hundreds) of characters that we can free from our collective banks of data! By using just ASCII, we can use half of the data needed, which means almost half of the processing power. Think about how many baby seals that could save…and you don’t to kill baby seals, do you? I’m sure that John Lennon would have written an extra verse about this very subject in “Imagine”, if he had just lived long enough. It might take some time, but eventually, we can live free of an Encoding Hell. Leave Unicode to the rest of the world and its craziness…and join hands with us, so we can finally blow that bridge together. ASCII and freedom for all! You just have to believe, Western Europe. Just believe.

10 Episode Ideas for Mike Judge’s Silicon Valley

1.) Erlich Challenges James Gosling and Richard Stallman to a Beard-Off

2.) Gilfoyle & Dinesh Go to In-N-Out Burger (and Party “Animal Style”)

3.) The NSA’s Ultimatum to Richard: A Backdoor to His Compression Algorithm…or His Backdoor

4.) Dinesh Becomes a Hooli Spy by Impersonating Deepak Chopra and Mentoring Gavin

5.) Big Head and Mochachino Collaborate on a New App Called “Chubber” (Which Finds a Strip Club that Matches Your Perfect Stripper Measurements)

6.) Jared Meets with an Outsourcing Firm in the Ukraine, Gets Mistakenly Kidnapped by Russians, and Ends Up Naked in a Banja with Snowden

7.) The Dark Lord Tells Gilfoyle that He Must Kill Brian Krebs, but It Turns Out that Brian Krebs Is the Dark Lord

8.) Peter Gregory Forms ’DropoutsCannot-Code.Org’ Just to Spite His Nemesis Mark Zuckerberg

9.) Erlich Meets His Good Friend John McAfee in Oregon, where They Get Chased by Criminals while Seeking Pirate Treasure

10.) Monica Introduces Richard to Jeff Bezos, Who Will Invest in Pied Piper if Richard Can Beat Him in a Shirts Vs. Skins Segway Streetball Game

Peter Bolton is the author of Blowing the Bridge: A Software Story and has also been known to be a grumpy bastard on occasion.

10 Tips for a Software Résumé



1.) If you list “Software Engineer” as a job title, there should be examples of actual engineering listed somewhere. “Got Visual Basic working with Excel spreadsheet” does not count as software engineering…nor does that really count as programming. It’s a thin argument to even place that in the category of “software”.

2.) If you’ve worked at 7 different jobs over the past week alone, you might want to manipulate your résumé so it isn’t immediately apparent that you’ll cut out at a moment’s notice.

3.) In your list of technologies with which you are familiar, please refrain from mentioning tools which have lived long past their use or relevance. Nobody is going to be impressed that you used Windows 3.11. You might as well mention that you played a Sega Dreamcast at one point and that you’re fairly sure one of your ancient ancestors used a wheel before it became popular.

4.) If you’ve worked in the technical field for more than ten years and if you graduated much longer ago than even that, there really isn’t a need to mention the school. Plus, if you graduated in Asia and are working in the U.S., it’s completely ignored. (In the case of IT, most IT managers won’t even know the school that you’re referring to, let alone tie their shoelaces by themselves.) You could put down that you have a Master CPU degree from Kali Ma Shakti De University in Pankot, with a minor in archaeology…and nobody will be the wiser.

5.) If you want to highlight your strengths (such as your ability to work with teams and your keen meticulousness), you should present yourself in such a way as to demonstrate them. Writing “Excellent communikation skills and very talented at talking” actually works against you.

6.) By default, all of those who don the hat of a technical screener (like myself) assume that every candidate is going to naturally present himself/herself in the most positive of light. Having said that, if I see another résumé with the phrase “great team player”, I’m going to actually play baseball with a candidate’s head by introducing it to a Louisville Slugger.

7.) Since you’re supposedly a qualified worker in the technology field, your résumé should naturally be prepared with a certain amount of technical finesse. When your document is presented with an heterogeneous mix of Arial, Times New Roman, and Verdana, it doesn’t inspire confidence in potential employers when you can’t even slay the dreaded monster of Font.

8.) Please refrain from boring the living shit of the person reading your C.V. by filling it with nonsense. Since I assume that you have used a keyboard at one point as a peripheral device and that you went to a meeting where you talked to people (in order to “brainstorm”), you do not have to write those activities down. I also assume that you didn’t defecate in your pants one afternoon, using your new cargo to write your name on the lunchroom wall…but you don’t need to write that down. (To be fair, though, I would enjoy reading that if I stumbled upon it.)

9.) For software developers and engineers, one way of showing your proficiency with abstractions is to demonstrate the summarization of data. So, when you list 20 specific projects that have an overwhelming overlap in functionality, you’ve shown me that on top of not being proficient, you are likely mentally disabled. I don’t care if you have “created a back-end that supports the front-end” twenty times in different scenarios. If you list it more than once, you’re an idiot.

10.) If you claim to be a writer of technical documentation but you’ve only used three verbs throughout your entire résumé (and I’m betting that those words are ‘developed’, ‘designed’, and ‘analyzed’), then you probably have a better chance of impressing me with illustrations drawn in pen and crayon. Remove that part about writing good technical documentation, and we’ll accept your possible employment with the footnote that you’re an illiterate simpleton.

Peter Bolton is the author of Blowing the Bridge: A Software Story and has also been known to be a grumpy bastard on occasion.