The Code Warriors
Many moons ago, I stumbled across a website containing an index of “Flame Warriors.” The Flame Warriors were caricatures of personality archetypes that might be found in your typical early-to-mid 2000s discussion forum. Inspired by that and by different people with different characteristics that I’ve met in various capacities over the years, I decided to create a version called Code Warriors. The Code Warriors are personality types that you likely encounter when interacting with programmers.
Before I present the Warriors, I would like to make an aside about gender, given that this subject is often a sore one in the arena of programming. Almost all of the Warriors have genders assigned to them mainly so that Amanda has something to draw. If not for that, I might simply have made them androgynous. I mostly picked gender either randomly or based on the namesake of the warrior, when appropriate. So please don’t read any attempt at deeper meaning in the genders of the warriors–I’m looking to make no such commentary.
And now, the Warriors…
Nero fiddles while the code burns. You might have a show-stopping, mission-critical defect that everyone is in a frenzy to solve, and Nero is stamping his feet that the names of all TextBoxes in the application don’t end with “TextBox.” Your application might be a cesspool of singletons, globals, and cross-couplings, and Nero fires off angry emails about alphabetizing using statements/includes. You might have an unreadable, unapproachable stack of Jenga code, and Nero orders a massive refactoring to ensure that all block comments start at character twenty-six exactly on the line. Nero is generally a team lead or decision maker, though this is not strictly necessary. The defining characteristics of Nero are his complete inability to prioritize and his preoccupation with trivial matters. This is likely the result of being overmatched in his role and exerting some–any–manner of control of what’s happening around him. Like his namesake, Nero is probably not long for leadership one way (mutiny) or the other (complete failure and external intervention). If Nero is not promoted out of danger into a management role and is instead forced to continue in the trenches, possibly demoted, he may graduate to Nascar if he studies hard and learns a few tricks. When he does, he will hate other Neroes.
When he’s not programming: Organizing his pantry so that all can labels face outward, badgering patient waiters about the difference between “slightly browned medium rare” and “not quite medium.”
Lifer has been programming at this company since you were in diapers and he’s still going to be doing it when your grandchildren are in diapers. He’s seen fads come and go for so long that he really doesn’t like the idea of any kind of change. If you propose change, he’ll be the first to say that it’s all been tried before and it will never work. He will then set about sabotaging your efforts and cite this sabotage later in post-mortems as proof that it’s pointless to try changing things. Lifer doesn’t need your fancy object-orientamation and text editors–he’s been making working software using a paperclip, a typewriter, and assembly code since 1974 and there’s no sense fixing what ain’t broke. Why a paperclip, you ask? Because screw you and mind your own business, that’s why. If you have any ideas of trying to outlast Lifer, you can just forget about it–he’ll never let the fact that he hates the company and his job interfere with staying there forever.
When he’s not programming: Screaming at neighborhood children to get off of his lawn, bemoaning the price of produce these days
Chops: 6 in theory, 2 in practice
Imagine the following. You come to work one morning, and those in before you are scurrying around in panic or staring intently at their screens. Disconcerted, you perform your morning ritual of getting the latest version of the code, and things go wrong. Horribly wrong. The code won’t build. There are files suddenly missing. The source control system itself doesn’t seem to be working. The network connection is spotty. All hell has broken loose. After half a day of frenetic effort from the entire group, the issues are finally resolved, and after two days, the forensics are all in, indicating what went wrong. And what went wrong is what always goes wrong: Patient Zero. Patient Zero is the lady who is always breaking the build, failing merges, and generally creating havoc. You will hear her say things like “oh yeah, I saw that message about source control conflicts so I just clicked the ‘permanently wipe everything on the server and upload whatever crap I have’ button–hope that’s alright.” She will say these things with a goofy grin or an “aw shucks” expression that utterly defies belief and threatens to turn your face all colors of the rainbow as you suppress your rage. Whenever anything goes wrong–especially things that render everyone unable to work–there’s a near certain chance it’s the work of Patient Zero.
When she’s not programming: Blocking the box in busy intersections, presenting 742 coupons to the only grocery clerk open in the store
It’s pretty easy when looking at a code base to know whether Zorro has been through or not. He writes decent enough code, but it has a certain style to it. A very recognizable style. This is because Zorro puts his name everywhere. If he adds code to an existing method, he puts his initials in a comment above the line he changed, adds his initials to the method comment header, and, if it wouldn’t mean too much refactoring, he might even add his initials to the beginning of the method name itself. In code bases where he does more than maintenance programming, there will be methods and classes named after him and naming schemes where everything starts or ends with his initials. When other warriors stumble into a particularly Zorro-heavy section of the code, the vibe can be a bit like that moment in crime dramas where detectives enter a house and discover that the perfectly normal-seeming homeowner has erected a shrine to the victim in his attic. They shudder and back away slowly, not yet ready to cope with the rich tapestry of psychological issues that led to this moment. Zorro is generally competent enough and affable, but if he catches you de-Zorro-ing the codebase, his demeanor will cool noticeably. Zorro is usually too weird to be allied with or against most other warriors, though Style Sergeant is often enraged by him.
When he’s not programming: Carving his name into public rest room stalls, poring over various social media and dating profiles, telling himself he could still wind up being famous
Bro, you know what’s even better than programming time? Miller Time. Beer Thirty is a programmer by day and a beer-shotgunning machine by night (and sometimes by day also). And while most would prefer to keep those worlds separate, Beer Thirty (generally due to his young age) is not one of those people. No code review will slip by without a mention of beer pong conquests. No meeting will pass without apologies for being “a little out of it” today. No lunch will be eaten without Beer Thirty mentioning that it sucks that he can’t have like three Natty Lites with this burger, amirite?!? Beer Thirty’s demeanor does serve to loosen things up and ease the tension among other, more serious warriors. Conferences and after-hours work events are where Beer Thirty really shines, though. Not to be confused with Mouthbreather, Beer Thirty might make women slightly uncomfortable with Beavis and Butthead style behavior, but he’s mainly in it for the booze. He actually has quite a substantial alcohol tolerance that serves as a buffer against behavior getting too over the top. Beer Thirty will usually get married and chill out, or else he’ll become a full-blown alcoholic, quietly slipping a little Bailey’s into his morning coffee rather than bragging about last night’s quarters domination down at Dirty Steve’s. Either way, there’s usually an upper age limit of twenty-seven or so on Beer Thirty.
When he’s not programming: Pub Crawls, Spring Break, Staring drunkenly at the coffee pot at Denny’s at 3:45 AM.
Fake It ’til You Make It is just your average workaday programmer that happens to like what he’s doing an awful lot. He likes it so much so, in fact, that he tends to ramble on about it, and decides to let his passion for programming and rambling fuel a graduate degree via night school, endless reading, Pluralsight videos for fun, and even a blog. Fake It ’til You Make It would probably stop all this and worry that he’s a phony, except that he’s usually distracted by excitement about and interest in his subject matter. He does his best to understand and get along with all of the other warriors in the interest of learning and getting things done.
When he’s not programming: Writing about programming, writing about writing about programming, reading, getting his house’s lights to turn on and off from his phone
Chops: Never as high as he’d like
Fashionista’s preferences make the bleeding edge look like Betamax tape players. He’s known Ruby on Rails was yesterday’s news since 2005. Functional programming? Pff… maybe back in 2010. NoSQL? You must not have heard that it’s so last year to persist things to disk. No matter what your idea is or what new thing you’ve just discovered, Fashionista has heard of it, mastered it, and dismissed it. He is actually quite intelligent and good at what he does, but for him the goal of satisfying users or producing software that works takes a back seat to using whatever technology just came out, so he’s not especially effective in the trenches. Like some kind of misogynist caricature, Fashionista is principally interested in notching frameworks, paradigms, languages, etc. on his bedpost and laughing at people with fewer notches. Fashionista is the mortal enemy of Lifer, and has the general ability to anger a good cross section of warriors, but, interestingly, if you put two Fashionistas in a room together their behavior is remarkably similar to Siamese Fighting Fish.
When he’s not programming: Going to Starbucks ironically to make disgusted noises at iPad/iMac users, cleaning T-shirts of bands that made it out of his closet
Guru is somewhere above the level of architect but still regarded as technical. She routinely speaks at company events and at developer conferences in general. She’s so famous and so well regarded that the young guys and gals often whisper among themselves that there is an Emperor’s New Clothes situation here. Surely she’s overrated, out-of-touch, or some kind of has-been. Every now and then some Grasshopper gets courageous enough to challenge her in some way, at which time she, politely and in good-natured fashion, blows their minds with some of the simplest, most elegant code you have ever seen. Doubters are mortified and even supporters are dumbfounded. Guru is Guru for a reason.
When she’s not programming: Speaking at conferences, advancing the cause of the industry, making people proud.
If Junkyard is roaming around the office, you can generally smell him before you see him. If you’re walking by his desk, you’ll likely notice crumbs, takeout wrappers, and a sticky residue. No stranger to audible flatulence, wiping his nose on his sleeve or spitting into empty containers at his desk, Junkyard is a hygiene disaster. He may also be Mouthbreather, but most likely not–he tends to be affable and a genuinely good-natured person, if hard to be around for… superficial reasons. His natural tendency to repel other human beings does free him up to have more time to pursue technical acumen, so he is, on average, slightly better at programming.
When he’s not programming: Sweating, eating, sweating while eating, lettin’ it all hang out.
Brute Force is well aware that inspiration strikes at the oddest of times in the oddest of places, and he knows that you have to just roll with it. It might occur to him that the source of recent performance issues in the code base is that people aren’t nulling out references. So Brute Force checks out every source file in existence and sets every variable to null everywhere he thinks it isn’t being used. In any managed language code bases, he does it twice for good measure. If he thinks that the application could benefit from more logging, he checks everything out again and adds logging to the beginning, middle, and end of every method in the entire code base. Are these things good ideas? No time to think about that–there’s a lot of work to do. Brute Force modifies every file in the code base first and asks questions later. Brute Force is often also Lifer and has usually defaulted his way into some position of authority, meaning he is allowed to run amok like Don Quixote through the code base. He occasionally forms a temporary weekend alliance with Thor that results in the rest of the team coming in Monday morning to find every class in the code base wrapped in a facade.
When he’s not programming: Digging holes in his back yard and filling them back in, painting his entire house with a 1″ brush
MacGuyver is a code-rescue specialist. There is no legacy system that he can’t tame, no environment too hostile, no project too far gone. Are you working on machine control software with no source control, no test environment, and the only way to make changes is to ram them into multi-million dollar production and hope for the best? No problem, just call in MacGuyver. He’s worked with less. He’s happy with any text editor, programming language, compiler, or anything else, even if he hasn’t used it before. MacGuyver could be described as a duct-tape programmer, in a sense, but he transcends that. If you plug him into a disaster, he’ll save it. If you plug him into a well-factored code base, he’ll improve it. If MacGuyver ever tires of the front lines, he probably has a career as Guru waiting for him.
When he’s not programming: Saving children from burning buildings, bringing justice to the world
The Ninja Assassin is the most devastating imaginable combination of stealth and damage. He finds a way to check changes into the code base not detectable by any audit of the source control scheme or any log. But these aren’t just any changes. After he finishes, the code compiles and builds and there are no failing unit tests, but when it goes into production something goes wrong. Horribly, horribly wrong. Ninja Assassin has stolen into the code in the dead of night and killed it so cleanly that nobody even realized it was dead at first. The only difference between Code Warrior Ninja Assassin and his counterpart in other forms of fiction is that the Code Warrior is lethal purely through a combination of incompetence and exceptionalism fallacy.
When he’s not programming: Driving tipsy, sticking his hands out on rides that say “keep hands in at all times”.
Chops: 5 less than whatever he believes he is.
Mouthbreather had a hard time with girls** growing up. A really hard time. Such a hard time, in fact, that his struggles continue to this day as a result of a festering feedback loop of desperation, resentment, desire, and awkwardness. Mouthbreather is generally quite good at programming since he has had a lot of time and frustration to direct into perfecting his craft, but he’s unlikely ever to advance particularly far in his career. He gives everyone on the team the creeps, but especially the women. Over the course of time and lots of tense HR meetings, there is an uneasy equilibrium in which Mouthbreather is given solo assignments and allowed to work from home. A lot.
When he’s not programming: I don’t want to say and you don’t want to know.
**Mouthbreather is not necessarily male or heterosexual, but I’ve yet to see a counter-example in the wild.
Big Sis’ is the person in the department that helps preserve your sanity. She’s generally a senior developer that isn’t necessarily in charge, but she’s good, she has pull, and most importantly, she’s actually nice and pleasant to work with. When Nero is yelling at you about camel casing, Brute Force is hacking your classes to death and Lifer is griping about your use of syntax coloring, Big Sis’ is a breath of fresh air who comforts you, restores your faith in mankind, and shows you how to navigate the minefield of other warriors and their egos to be productive and write good code. She has carved out enough reputation for herself that when she steps in to defend you, other warriors generally put down their torches and scatter, grumbling as they go. Perhaps there is hope that being respected is better than being feared.
When she’s not programming: Volunteering at the local shelter, getting thoughtful presents for people.
Anarchist firmly believes that you can’t like own software. The only real software is free and open source software. To illustrate this point, she writes “Micro$oft” whenever given the opportunity and calls anyone owning Apple products a “fanboy” (or perhaps “fanboi”). Utterly disdainful of the notion that people might shell out money for convenience, Anarchist is convinced that the only reason someone would pay for software is because he’s too stupid or technically incompetent either to write it himself or make it happen from the Linux command line using regular expressions, sed, and a whole bunch of elbow grease. Any open source or free software developer who decides to turn entrepreneur and ask for money immediately makes Anarchist’s “Enemies List” because there is no greater betrayal in her world. Anarchist spends enough time reinventing wheels and cobbling together ill-suited products that she’s not terribly productive, but the flip side of this equation is that she is incredibly good. Anarchist really has no allies among other warriors, though she and Fashionista have a grudging and reluctant respect for one another.
When she’s not programming: Thrift store shopping, spray painting people wearing fur coats, sneering.
Moneyball is obsessed with statistics about the code that he works on. He knows impressive-sounding terms, like, “Cyclomatic Complexity,” and “Afferent Coupling,” and he doesn’t hesitate to use them. Just as Nero might graduate to Nascar, Nascar may later graduate to Moneyball. Moneyball is at the top of the “consider one factor at the exclusion of all others” food chain since his area of focus is actually pretty likely to improve code bases, but as long as he thinks any one characteristic of code and development always trump all others, there will be an upper bound to his chops. Moneyball’s Achilles’ heel for improvement is his tendency to believe anything can be folded into statistics meaningfully–he isn’t interested in going out to lunch with coworkers to bond unless you can show him hard data that eating at Chipotle leads to at least a twelve percent increase in bonding as measured by voice inflection during afternoon meetings.
When he’s not programming: Playing twelve separate fantasy football teams, refreshing the stock ticker on CNN.com
Style Sergeant is who Style Cop reports to, and, mister, she runs a tight ship. Style Sergeant may be the architect/lead, or she may simply have gotten herself appointed to the role of some kind of auxiliary authority by one of those people. Either way, she has a seventy-eight-page, single-spaced manual on styling for all situations, and if you think she doesn’t know every line of it by heart, you’re sorely mistaken. There is no issue too trivial and no piece of originality and non-conformity too harmless to escape her exacting eye. If you go over the maximum approved number of syllables for a class name or any method has more than the allotted number of the letter ‘T’ in its member variables, you’re going to get an earful. Unfortunately for Style Sergeant, her authority is limited by pragmatism and she is something of a paper tiger, generally unable to enforce the severe consequences that she would prefer for violations. If Dwight Schrute were a programmer, he would be Style Sergeant. One would think that Nero and Style Sergeant would be natural allies, but it rarely turns out this way since Style Sergeant is motivated by a desire for conformity and Nero is driven by quirky obsessions. They have an uneasy truce when Nero appoints Style Sergeant, but with any other arrangements, they battle bitterly (and comically) over placement of curly braces and the more arcane points of Hungarian notation.
When she’s not programming: Running for president of the condo association, complaining about the length of grass in other people’s yards
Grasshopper is an engaged and hard-working warrior that is relatively new to the industry and something of a blank slate. He may be entry level or have simply gotten into the programming game recently. Interested in learning, working hard, and getting better, Grasshopper has a natural tendency to want to learn as much as he can from coworkers and peers. This can turn out great when those mentor figures are Guru, Big Sis’ or MacGuyver, but there’s always the danger of Nero or Lifer converting him to the Dark Side. Grasshoppers and their impressionability wind up having a lot to say in the fate of departments over the course of time.
When he’s not programming: Reading, teaching himself new things, having “aha!” moments
Chops: 2-5, but with very high eventual upside
Looking out over a battlefield where most would see hopelessness and back away, General** Custer sees certain victory and charges. Unlike his namesake, his field of combat is not the battlefield but rather the corporate meeting room, where he fearlessly champions untenable positions and demonstrably wrong matters of fact. He will argue that all conditions must go in separate if statements because there is no such thing as “short circuiting.” He will confidently assert that null and zero are the same concept in all languages. He will look at compiling code or passing unit tests and state that the code won’t compile and the tests won’t pass. Like the actual figure in American history, General Custer holds a position of authority to the detriment and disbelief of his subordinates and, like the same figure, he will most likely lead them to technical disaster in spite of their noble efforts to reign him in. General Custer has an opinion on every matter regardless of understanding as he is never one to let failing to understand something prevent him from telling others how it works. A standoff between Custer and Fashionista, Anarchist, or Guru can be particularly dreadful to watch and Big Sis’ or Beer Thirty must often intervene to preserve decorum.
When he’s not programming: Getting lost on road trips, losing fights to bouncers, coming in last in the football pool.
** I realize that Custer was not actually a general during the ill-fated Little Bighorn campaign, but this is how he is best known and I’m not writing a history textbook.
Nascar feels the need for speed. Everything he does is done ostensibly in the name of performance improvement, whether or not it actually has that effect. But Nascar’s approach goes beyond simple premature optimizing or just thinking, “how could we make things faster”–it’s a design philosophy. Making code readable, well-written, correct or possible to reason about is a luxury that simply cannot be afforded in “well-performing” code. Things like Linq or closures or managed languages or even C and C++ are just creature comforts for wusses that are afraid to be close to the metal. If this web service file import is going to really be screaming fast, every picosecond of server processing time counts. If you mention sequential bottlenecking, Nascar will become confused and then enraged, and suggesting actual time trials of pieces of code will just make things worse. Nascar and Nero are actually kindred spirits, though Nascar has better chops and a slightly more legitimate preoccupation. Interestingly, however, they tend to be at one another’s throats since Nascar proudly and vocally eschews readability and Nero is focused entirely on the aesthetics of the source code. More formidable warriors mainly just ignore Nascar.
When he’s not programming: Downing a special espresso-Redbull cocktail that he’s known for, trying to overclock his microwave
Unimaginative, timid, and incurious, Pawn does whatever he is told, no matter what. A less compliant warrior might hesitate and ask for clarification if a superior made a typo in an email such as “make sure the constructor of the main window does throw an exception no matter what.” Not Pawn. He’ll just throw that exception and ship the code. At first, managers tend to appreciate and praise Pawn for being a “team player,” but they figure out relatively quickly that they’ve actually hired Siri in human form. Nobody knows whether Pawn is secretly brilliant and completely pliant or utterly inept and, well, completely pliant. It doesn’t really matter either way. Pawn is mostly harmless, but can easily be purposed for pointless or destructive tasks by warriors like Nero, Nascar, and Brute Force.
When he’s not programming: Buying extended warranties, looking after the kids while his wife takes his credit card and three of her friends to Vegas once a month.
Like her namesake, Romance Author is recognizable in two ways for her contributions to your group’s source control: high volume and low quality. You gape in stark awe at her ability to churn out a 14,000 line class in twenty minutes. Does she use some kind of code generator? Is she a wizard with copy and paste? How is it possible? And what is… is that a… is that an infinite while loop with no body at all?!? And that over there… does that method really have sixty-two parameters?!? And this, how does it even compile?!? All of these questions abound as you stare in wonder and terror at the reams and reams of code she produces. Sometimes other warriors will intervene to try to stem the tide, but management generally looks at her lines-of-code-per-hour metric and concludes that she should be allowed to work unencumbered as she is the most productive group member. Style Sergeant and Nero tend to hate her, but they’re generally overmatched by the sheer volume of her output.
When she’s not programming: Stocking up at garage sales, clogging your inbox with email forwards
In Norse mythology, Thor is big and strong, and he has a hammer. In the programming world, Thor just has a hammer. A golden hammer. And Thor thinks that all problems are nails. The nature and shape of the hammer may be different from Thor to Thor, but the reasoning is the same. Need to ensure that there’s only one user session at a time? Singleton. Need to sort a data set dynamically by a property at runtime? Singleton. Need to reason about a complex thread interleaving? Singleton. Need to have exactly twelve instances of an object and no global point of access? Singleton. Everything can be answered with “Singleton,” at least until Thor turns the page in the Gang of Four book and realizes that all of the aforementioned problems are really calling for Adapters. It’s easy to think of Thor as purely a hack, but credit must be given to someone so adept and inventive at cramming square pegs into round holes. Thor’s only natural ally is Nascar, provided Thor’s latest kick is performance improvements. Outside of this, he operates orthogonally to aesthetics-oriented warriors and to the quiet amusement and derision of Anarchist and Fashionista, who view his fumbling as ironically endearing.
When he’s not programming: Using Kanban to organize his toiletries, banging on his DVD player to get it to work