We fired our top talent. Best decision we ever made
medium.freecodecamp.org
medium.freecodecamp.org
Everyone created the problem, the dev was an easy target to eat the blame because of his ego.
"We could not build a hotel, so we bought new hammers and built a great dog house instead."
While I no longer work there, my first job with some programming had me training to understand the code, what it was about, and even how to write it.
To this day, I still use this method so I don't get lost or bored in my code.
These are the lines I actually use along with commenting my own code just in case I have to return back to it weeks or months or even years later, I don't have to try and trace every step back to a particular code.
// AUTHOR: MG
// FILENAME: functions.php
// STATUS: ACTIVE
// PURPOSE: All of the functions for this application (app name)
// NOTES: There are several unused functions in this file that are commented out but once in production
// They can be deleted as we likely will not be needing them at all.
Those 5 lines have saved me a lot of time. While I don't include the "author" line since it just me writing the code, if there are tons of hands in there, you should know EVERY SINGLE author as well as when code gets commented, it should contain the initials upfront, such as // mg: this does this and this does that. If I know multiple files touch.. I also add: "ASSOCIATIONS:" and list all files that call this one.Using this method, I've been able to complete a bunch of projects much quicker because any time I start to forget: what am I doing? what does this code do? am I on the right track? I can look right at the beginning of a file and know the answer.
I'm not saying that a boss or supervisor has to be a micromanager, but meetings are necessary to understand where everyone is at. Leaving a programmer to do his own thing means that he really is doing his own thing and is more likely to get lost in the code. I'd say more like he wasn't a genius but thought he could do it alone.. and sometimes, it is nice to have someone step in and tell you: "Hey where we at? What can we do to speed this up?" or even provide their own insight... I can't tell you how many times I've talked with my spouse about an issue.. and she's suggested, "Why don't you just do this?" and it has saved me hours of time just because of someone not in the code is able to see another solution.
This is already in your commit history, so why hardcode it into the source?
> FILENAME: functions.php
This is obvious because you just opened the file. So again, why even put it there? When the file gets renamed the documentation is no longer correct? These things are also hard to refactor.
> STATUS: ACTIVE
Every part of the code is always active...
> PURPOSE: All of the functions for this application (app name)
Okay, probably the most useful one here. But what if we're refactoring the code and the purpose changes? Or if someone adds a few functions and the documentation no longer covers the purpose?
> NOTES: There are several unused functions in this file that are commented out but once in production They can be deleted as we likely will not be needing them at all.
Very dangerous, again because the source might change while the documentation doesn't. But why even write "they can be deleted"? Why not just delete them? That's what version control is for.
The purpose or brief should be at the top of every file, it should also evolve as class or implementation does. Arguable that it's really the only one that matters and can also come from no other tool or location.
Startups may be better at this, but the corporate world is even messier with quick turned spaghetti code. Any markup in the codebase itself helps the next developer tremendously.
Personally, I find @mattbgates best practice to be very justifiable in practical use.
But to explain:
> Author: completely optional, depends on what you are using, you aren't wrong.. since I'm old fashioned, if I were to hire some coder to help me maintain my programs, I'd like to know that he was in there, and I'd have no way of knowing.. again, probably not anyone's issue, but I'm old fashion.
> Status: Not all files are in use, but sometimes they are just leftover and may not be deleted, or sometimes, they might be used for testing purposes -- so Status can be changed to INACTIVE, TESTING PURPOSES ONLY, etc. Maybe the file is inactive because newer code was written, but this was kept as an archive? You never know.
> Purpose: always state the purpose of the code.. if it changes, than this should probably change. If it doesn't, than again: you must be doing your own thing.
> Notes: optional, this is just notes that might be necessary..... again.. Notes to myself: I have some code in there that is not currently being used and if I go into production, I probably won't need it so may as well delete it.
The Notes weren't supposed to be taken as a literal. This is just notes to anyone who reads the file.
Sure, there is a such thing as too much commenting, but no one wants to go through the code to figure out what it does. Leaving a little comment up top of every page, regardless of the simplicity or complications of the function, it is just nice to leave for anyone who has to go in there. It's a better form of organization. Imagine having to go in there 3 years later... would you remember what it does? The little statement up top might help you remember more quickly.
You would do well to learn source control system (which these days basically means git).
Leaving aside the team/collaboration part, once you learn it, it's so incredibly freeing. I cannot understate this enough.
You can make changes to the code, and then go back with one operation (discard changes). You can work on an experimental idea (in a branch) for a few days/hours, then switch back to your main code to fix an important bug, go back and finish your experimental branch eventually, and merge everything together -- often with nearly zero effort. If you're supporting multiple release versions at once, you can fix a bug in one and often easily apply it to all other versions.
Ever have a situation where something just stops working, but you're not sure when other than in worked four months ago? You can arbitrarily check out any old version and test, and even - in a single operation - undo that change from the current version of code.
Can you do all this without source control (or with copies named by date)? Sure, but it's kind of like the difference between fetching water from a well using a hand pump and bucket vs having running water and being able to open a tap. Before you have running water, it's just life, and it's not that big a deal to fetch water, really. Once you have it, you could never imagine having to live life that way.
We used something called "Source Safe" from Microsoft.
As for what's in the Notes and deleting it upon live production... that is the old stuff... in case the new stuff stopped working for whatever reason.
I guess we all have our own methods of doing things. Fortunately, I've not had major issues, though everything is backed up to it a server upon my completion of work for the day.
The author bit is solved with version control. Much better than a line that can get bogged down with multiple authors or be outdated.
It doesn't feel like you're being old fashioned or old school. It seems like you're being a bit stubborn in your ways. Version control is a good thing. Perhaps there's better ways. Going your way with not having an sort of real alternative isn't right though.
Your other reasons like coming back years later can be applied to version control too. It's helpful to have commits that have diffs, time stamps, author, and other meta data. Imagine having to come back 3 years later without any of that. Commit history might help you remember and manage your project more quickly, efficiently, and effectively.
I agree with one of the parents that "Purpose" is probably the most useful, but even there: at that level the code should be largely self-documenting.
To assume "at the code level it should be largely self-documenting" is to be a Rick. Comments are there to help everyone, including non-programmers understand what is going on.
Given modern tools I’ve come to the conclusion that documenting overall purpose and specific edge cases is more than enough. For example, the file header should describe its purpose, and anything in the actual code that’s not obvious should be commented. No more boilerplate function or file comment header. Git tells me who wrote each line of code, I know the name of the funcs and files, and I can see the inputs/outputs for every func with my own two eyes.
This has always been a sign for me to tread very, very carefully. People who change code without changing the comments probably didn't read the comments, didn't read the code or didn't understand it - either way, if comment and code disagree both are probably wrong.
When I started out every function had to have a header comment, with name, inputs/outputs, description of purpose/etc. It was significant extra work to keep that up to date. I could update a function three times in a day, and have to rewrite the comments three times to check it in.
And in the end, I know the name of the function. I can see the inputs and outputs. The only part of those comments that were occasionally useful were purpose, details of which often changed with edits. And in reality, as long as the function isn't hundreds of lines long (another problem), I can read it and discern exactly what it's trying to do.
Comments that were most useful said stuff like "this looks weird or dumb, but we had to do it this way because of this thing we and you probably didn't expect in the data/system/etc"
You don't have to be a Rick to write clean, concise code.
I'd strongly recommend reading up:
http://www.codeodor.com/index.cfm/2008/6/18/Common-Excuses-U...
It's not "genius behavior", but well accepted from people like Uncle Bob, that documentation should be in the names of small and focused functions, methods or classes, not in comments.
"Time Me, Gentlemen!"
https://www.theatlantic.com/health/archive/2012/10/time-me-g...
It's not hard. It's not like you're computer illiterate and don't know how to program.
None of that prevents you from using source control.
Code comments are code comments. If you use comments to help with your development process, there is probably some work to do with your toolchain. Good source control and a bugtracker are a must.
/**
* Calculate the thing.
*
* @param $foo the foo value
* @param $bar the bar value
* @return the thing
*/
function calculateThing($foo, $bar) {
return $foo + $bar; // add foo and bar
}
Such comments are worthless noise that obscures the important parts of the code and camouflages any actual useful comments that might be there. I would so much rather have better names than "thing", "foo", and "bar", and maybe a comment about why the values are summed, if it's not obvious. When you do those right, you won't even need many comments. Maybe a docblock, but don't bother with that if it's nothing more than a robotic "English version" of what is already obvious from the function definition. IMO most good developers will perceive your file header as a redundant annoyance for similar reasons, as other commentors have explained.Remember that very, very few organisations (companies or in academia) have 'quality code' as an overarching goal: rather, they want good enough code, soon. Time after time I've seen developers fall into one of two traps: abstracting too soon or too late. It's very, very difficult to avoid.
My preferred method is to just hack together something that works over a couple of iterations, then spend an iteration refactoring. It's hard to convince a business that this refactoring time isn't wasted, but it is in fact extremely valuable to the code base. 'I need to do this now so that I can satisfy your change requests later' sometimes works.
Management should have stepped in long before it got to that stage.
>Rick’s product supported a dynamic workflow with over fifteen thousand permutations. In reality 99% of our use cases followed one of three paths. The team hard-coded the workflow. This removed over 30% of Rick’s work
That's a failure of the manager, not the programmer. The good programmers, the ones who enjoy their work, will choose a complicated but beautiful path, will choose to make a configurable workflow whose configuration is itself configurable in LISP. It's the manager job to know that the workflow can be hard-coded and then avoid complexity by the love of complexity (good programmers love complexity solved by intricate and beautiful code). If not managed correctly, 10x programmers will choose the most complex, self-configurable solution where a hard-coded workflow will do.
TL;DR: It seems a manager failure. Top talent needs top management in order to focus great creativity in the narrow path of productivity clients will pay for.
Anyway IMO you have more like 4 types of dev, the ones who fail to write fizzbuzz, the ones who can do the vast majority of what they are asked, the ones that can do everything and can self manage and stay focused on (and clarify) product requirements (probably what you mean by 10x) and the ones that have highly specialized skills (e.g. ML, graphics, embedded systems, etc).
You obviously need to have a good understanding of your clients and their needs and the way they use your product to e able to do that, but many shops simply ignore introducing their developers to the actual users of the product.
I see this as a programmer responsibility... how is the manager even supposed to know whether it's hard-codeable?
The trouble is often that the programmer doesn't get enough information to make this decision, but that's a different story.
If a carpenter doesn't pay attention and a sharp saw cuts their hand off or ruins an expensive piece of wood maybe they need training in how to run saws. Or perhaps they just need less powerful saws until they get more experience.
Management is a lot more than going to meetings and ordering people around. The ability to successfully staff and orchestrate a project is no small skill and one can't just jump in and expect success. Lot of people think they can do it, but there are very few really good managers in my experience. Most are hacks who can't actually do the job and don't even understand what it entails. As evidenced by the article.
I can't speak for good programmers, but while I admire elegant and insightful solutions where possible, for the other 99% of the cases I prefer the simplest effective solution (and with simple definitions of 'simple').
Maybe Rick was an asshole, but this post kind of blows my mind. I'm making some assumptions here but "two years" of delay isn't something one person causes (unless they're enabled to).
Now you expect a solo person to document?
And no, talking to the rubber ducky doesn't help.
In the beginning of my career I was much more diligent about this (but I also didn't write as readable code, so it was more necessary); the exercise was simple:
When I hit the stupid part of the day (the end of the day), I go back over code. When I don't understand something, I write down something about my confusion. In the morning, when I'm back to being smart, I convert all the confusion to comments and/or better code.
Anything you talk to the rubber ducky about probably deserves writing down.
Yes, unless it is single-use code. Otherwise, if the person is only developing for himself, he can choose whether or not to write any documentation, but if he is sensible, he will write something.
It is moot anyway, as he was not supposed to be a solo developer.
More generally, while I don't know any more about this case than what is in the article, I have seen something matching the description given here, and the situation there was not as you describe, except in that the fault lay both in the developer and his managers.
He thought he was an exceptional developer and he was going to prove it by writing really complex code, even if the application did not need it (he did not, of course, describe it as complex - it was, in his mind, elegant, object-oriented (it was a time when that was still the one true way), efficient, reusable... but in reality, it was mostly a mixture of unnecessarily complex and confused.)
Naturally, he was averse to working with morons who could not immediately follow what he was doing, so he worked alone, obsessively, and incessantly. As time went by, more of his explanations for why some feature could not be made available now were based on the complexity he had introduced earlier in the process.
Management takes the blame for allowing this situation to develop. His initial managers were insecure about their technical ability, and deferred to his judgement - it was a case study in why technical managers need technical knowledge (to be fair, they were also snowed by a load of non-technical responsibilities that sucked up the time for running the project.)
In the end, he precipitated the issue by resigning (presumably, he had found some other manager impressed by his apparent mastery of all things technical.) By then, I had moved on and I don't know it ended up.
So from one article and no actual evidence or information, a random Hacker News subscriber managed to determine that a story about a bad dev written by an insider on the project was actually about a poor, amazing, faultless dev who worked at the whim of Bad Management.
Because, as we all know, Management Bad, Dev Good.
Maybe some of the developers weren't exactly up to snuff as well. Code — across an entire domain — typically doesn't vary as much in complexity as people's ability or knowledge can/would/does/is.
I suspect what happened here was Rick was the type of personality that defined himself by being the person who solved problems. He probably wasn't a genius, he was probably just senior and experienced.
He didn't want it to end up like this, I bet. I bet he didn't expect it. He didn't know how to say no, and even worse: no one knew that he should. Rick had no peers or management that could even faintly empathize. They didn't get that there was simply too much to do.
Rick's first and biggest mistake was long before his absurd outbursts: refusing to admit the project was too big before it was too late. Instead he imploded and started saying stupid and offensive things. He defined his identity by his ability to solve problems but no matter how much he tried, the problem seemed to get worse.
He got fired. He even deserved to be fired, I think. Because part of being the technical adult in the room is NOT letting it get that far out of control.
The ugly part is that it seems no real lessons have been leared by the org. Instead of recognizing the obvious lack of technical management, they're spreading the responsibility across the entire org. Intead of owning their business logic they called up vendors and sold it to them. Instead of broading the scope of the business with these added capabilities early on the entire business is now balanced on top of a pinhead of those few cases.
Everyone made terrible mistakes. And it seems like no one learned from them.
They liked being in control, and to a one they all talked about being irreplaceable.
I don't know Rick, of course, and can't speculate on what's going on in his head, but he certainly seems like the geniuses on the projects I and others ended up rescuing from their own respective geniuses.
I think everyone's quick to pile on the author, for some reason, but the Rick side of the story just rings so many bells for failing projects I've joined (or, later on, took over and reimplemented by myself).
I'm no genius, either, just old enough to know a little tiny bit better.
I guess my take on it is that the handful of Ricks I've seen, they all wanted to position themselves as irreplaceable, as kings of the project. For them it was intentional.
Maybe not the case with the Rick in this story. Without knowing the person (or even if the person is real, or if this is a composite character from multiple situations, etc), we're all just guessing.
I'm just more inclined to sympathize with the author, because of my own experiences with Ricks. :)
Oh, that's easy.
The prevailing wisdom around here is that management is always, without fail, a bad thing.
Management is either bad because they get in the way by doing anything, or, when a project goes sideways, management is bad because it failed at doing something.
For example, the devs involved in the BMW scandal? Well management told them what to do, so it's management's fault.
And this post? Well, it's management's fault for not stopping this guy.
But it's also this guy's fault for not being enough of a leader to avert the crisis.
I'm not sure how people read my post and say, "This is a story about how Rick was good or right."
Edit: also if 90% of his code was able to be thrown out, then I don't think Rick was ever the super star that you or he thought he was.
No one had the hard discussions with clients to reduce scope and cut high effort/low reward features?
They knew he was working 80 hour weeks and didn't take steps to address that early.
They did as soon as they had someone to blame, though.
Until the author matures, employees would be wise to run in the opposite direction. If they don't the next article will be about one of them.
The company looks bad for mistreating a seriously committed employee.
Rick looks bad because the author decided to slag him off in a public blog post
The author looks bad because he's oblivious to what he's done and instead decided to shit on a really dedicated employee for the failures of the management team.
It takes some serious lack of perspective to post something like this on your public blog. Ugh. I feel sick.
From what I can tell, the author thoroughly investigated the situation, then made the (correct) decision to rewrite the entire thing from scratch.
It does seem as if Rick was severely burned out from the long hours, which probably made things a lot worse. I think he shares equal blame along with the company...nobody asked him to do that, and it seems to have been mostly caused by Rick himself. The company should have pulled the plug earlier, but they must have trusted him.
I agree it's probably a bad idea to post it publically.
This. I completely agree with you here. I would take it a large step further and say it was a despicable idea, particularly in the manner it was published as "Best decision ever". Yes, letting the guy go was a good decision and a good correction to a big, expensive, problem. Best decision? Far from it. It was a correction to a massive failure that amounts to paying a few hundred grand, letting a problem fester too long and finally stepping in and "starting over".
Worse, though, is that they've maligned someone in the process. Yes, "Rick" was anonymous ... except to Rick, Rick's family and friends, and probably prospective employers who will know where Rick last worked, who will know he was "let go" from his last job, and who will hit up Google, happen upon this post, bin his resume and pat themselves on the back for dodging a bullet.
Never mind that they've presented exactly one side of a complicated story with all of the biases that come into that. Never mind that a large number of the comments here are from people who correctly suspect that maybe there's something about this organization that caused this massive failure to happen and that those things, whatever they are, might have contributed to Rick failing in his position. And never mind that Rick, now that he's had a bit of an opportunity to reflect, has (hopefully) figured out some of the things he should have done differently and has (hopefully) made positive life changes that will likely cause him to be a fine employee in the future. Or the fact that he might just have not been a terribly good fit there in the first place and could thrive very well elsewhere. The person landing on this post, using basic deductive skills to decide "Candidate X is Rick", will pat themselves on the back for avoiding hiring the developer equivalent of a BOFH. Of course, this company will inevitably lay some other male employee someone off in the future for reasons that are not the employee's fault, and now they might be assumed to be "Rick". There was a small benefit to the world-at-large for them having written this, but it came with huge downsides in the manner in which they've shared.
They could have written the piece as an argument with hypothetical components strewn throughout in more of a philosophical manner including no anecdotal stories about former employees and provided the same benefits, but without the myriad of downsides. It might not have been as interesting of a read, or reached as large of an audience, but then is the conclusion they've drawn really all that mind-blowing? The story, summed up, amounts to "We spent a large amount of money on someone and after two years of continuing to spend that money, we realized that we would have been better off if we had just decided to not work on that project and had, instead, turned that money into cash and flushed it all down the toilet[0]. So we stopped spending that money. Best. Decision. Evar. /s"
[0] Because every once in a while the toilet will plug, and some of that money will come back up.
Well, kinda, but kinda not, too. When people hire builders they often know little/nothing about building a house and have a limited understanding of what quality building looks like. This company, hopefully, knew what habits a good programmer has (they must have because they eventually realized he didn't have them). Using your analogy, it'd be like a builder hiring a sub-contractor, relying on that sub-contractor to build the house in its entirety, allowing that sub-contractor to slip on the deadline by two years and when the builder went to check up on the sub-contractor, they discover the property has a kitchen, a foyer, a bunch of bedrooms but no roof or walls.
Note that I'm not saying my analogy fits perfectly, nor that "Rick" was actually the negligent builder he's been painted out to be in this but it was as much a failure on the company's side especially when you consider that they've paid this individual for those years of work knowing that it's non-refundable, they're stuck with the house, and the only option they now have is to bulldoze the property and start over. A better approach would have been to step in much earlier and correct "Rick" or get rid of him before a two-year slip in a project could occur.
Imagine how differently this would have played out if 'Rick' had someone at their technical level to talk to. They could bounce ideas off another person and they could help field questions from the team when busy. It sounds like Rick made some potentially questionable technical decisions - but with another very experienced dev around they could keep each other honest and on point.
The problems that come from having only 1 junior dev on the team are obvious - that person will feel alone and out of their depth, and like they're bothering everyone with their problems. But there are similar issues from having only 1 senior dev on a team. That person will naturally try to take responsibility for every aspect of your technology stack. They will do that naturally because the only other option they will see is to let mistakes slip in to the product. And a technical leadership position is a leadership position. Being a good technical leader requires time away from programming to mentor, code review and brainstorm. It requires you to hold meetings, support your team and keep others accountable to standards. The people side of that is a set of skills many programmers don't have.
Ultimately by firing that person you're saying that your team cohesion is more important than quality in the product. Thats a totally reasonable choice. Its also an option that a skilled manager would be able to bring Rick on board with. "Hey Rick, over the long term we want to build an amazing team. You're the most skilled person we have, and we think in the long run the mentoring you've been doing is going to provide more value than getting this particular iteration of our product out the door. We want you in on the long term vision of our company having great engineering, which might mean this next release slips - but we think extra mentoring will be worth it. What do you think?" ... Etc.
"Multi-year management failures result in huge time and resource company expenses".
Outside of that, I'd also fire the person that wrote the article on company image tarnishing grounds.
He may be proud of his decision, and it may have been the right thing to do, but considering what he wrote publicly, anybody sane would stay away from them now.
I've also worked with people genuinely like "Rick" from the article. It usually takes about a week to find out that they don't actually write any code or contribute to the team in any meaningful way besides making noise. People who are that wrapped up in their own ego cannot make meaningful contributions to their teams.
It lends more weight to the idea that there was a ton of mismanagement going on at this company that beyond the bullshit described in the article, the author still considers "Rick" to be a genius.
Richard Feynman is known to have a temper, and Einstein was known to be extremely callous in intimate affairs. We've also seen MIT professors display a lesser regard for lesser minds in math. We've also seen brilliant top-of-their field sportsman display great arrogance and disregard to lessers. The guy who writes "The Haskell Book" isn't known to be nice, but people still acknowledge that it's one of the top texts. Linus Torvalds isn't known to be nice.
You might not consider these people to be "geniuses", but they are certainly brilliant in some way, participating heavily in their field in some way.
And while one can of course say that someone is a genius at a sport, I meant specifically intellectually, and even more specifically I wanted to combat the notion that it is common for software engineers to be geniuses and total assholes. I just haven't seen that frequently, and in fact usually the pattern is that the engineers who are typical assholes are, correctly, the least secure in their own skills and try and mask that with needless complexity (in code, communication etc).
I guess maybe my meta point is that I think intelligence generally fights toxicity, not the opposite. I'm sure you can find counter examples as humans are complex.
Agreed, as I said humans are complex and I'm sure you can find exceptions. Just talking about general trends here.
> EQ and IQ are not highly correlated at all.
Assuming by EQ you mean being a nice person and intelligence are not correlated I don't agree. Tons of studies backing this up (as well as correlation with overall happiness). Here are two:
As geniuses are already extreme outliers. For one thing, they do not typically fit in very well with their peers, often leading to seemingly anti-social behavior.
None of the articles you link directly correlate EQ to intelligence, they corrleate it to civic minded ness, and getting good grades in school. Social people do well in social environments is not surprising.
Geezus. What kind of people are running this outfit that they don't see the connection between these two phenomenon?
People who haven't spent enough time around programmers and/or people who haven't spent a serious amount of time coding themselves would be my guess.
Coding 7 days a week 12 hours a day with the entire weight of everything on your shoulders while others have "meetings" and write Medium blog posts will turn Gandi into an asshole soon enough.
Not saying the guy wasn't intrinsically a jerk but this is a ridiculous failure of management. And you are posting about this ridiculous failure in an attempt to scapegoat someone who wasn't managed for the failure of a project that was poorly managed? Shame on you author. Seriously. Grow up.
I have turned into Rick before. I was a super productive engineer and I would work way ahead of the company in isolation and get things done super fast. This was caused by me being a workaholic and enjoying my work too much, not really caring about or paying attention to what was going on around me politically. It never occurred to me that pulling way ahead of the company would only result in severe damage to myself and the team.
Being this kind of engineer is like putting a Ferrari Engine into a Volkswagen Beetle. The Ferrari Engine is going to tear the Beetle apart and the result will be bad for all parties involved. The longer the Ferrari engine is allowed to run, the more damage it is going to do.
When I behaved this way in the past, a strong mentor or manager would have helped me immensely. Instead I had managers who were scared of me because I was more talented than they were and just wanted me to go away. As a result, I received no input as to how to better structure my working style and failed to mature and grow. The result was I ended up getting laid off after becoming deeply frustrated with everyone around me.
Companies need the right sized engine that provides the correct amount of forward momentum, not an engine that rips the team to shreds. Learning to hold back, Pay very close attention to my surroundings and communicate much more carefully is required. This is generally the work of program managers, but there are very few good ones. Lead engineers need to learn to program manage themselves or they will just end up getting twisted around the axle.
The reality of this industry is that software developers are disposable parts. Rick spent years building these systems, asking him to rebuild them would have been impossible. Once he got to the point of becoming toxic, he had to go. The Volkswagen Beetle (rest of the company minus Rick) needs to proceed onwards.
> When I behaved this way in the past, a strong mentor or manager would have helped me immensely. Instead I had managers who were scared of me because I was more talented than they were and just wanted me to go away.
I think this is the cornerstone of the problem, that there rarely are more than one strong personalities in a team, because each strong personality is like a positively charged nucleus that attracts electrons but repels other strong personalities.
So Rick knew everything about the project, while everyone is simply making a living off his work all those months/years, saved the management face many times with miracles, probably not paid n*x, stopped attending meetings because no one understood the stuff anyway, and the author has bad opinion of Rick's code, conveniently ignoring context around Rick's choices, gleefully siding with all those managers who have no clue in the first place and fired the worker to have a new start!!!
Maybe Rick should be given a chance to comment on how bad those project savior choices were.
Now we need to wait and see when would they identify next Rick of the current version of the code when that stops cutting the muster for the flood of new requests.
Eventually it will be more than any single developer could handle and you'll burn out.
Often, if you bring it up with management they'll do very little to fix the problem. Projects that could be completed in a few days when delegated to other teammates will somehow languish for weeks, at which point you get roped in anyway to hit the deadline, except now you have to do it ASAP and you're working nights and weekends.
At the end of a project like that mgmt will consider it a success, since the project was completed, and the whole thing will happen all over again.
The only thing they'll actually notice is failure. But who wants to let something fail?
So keep your head low. Get a sense for how long it takes others to complete projects, and aim to be in the same ballpark. To get management to make rational scheduling decisions you need to control what they see.
Which for this type of engineer is going to be really hard. Management should be better at this, but in general they're not, so it's either constrain your productivity or be successful for a year or two till you're overworked out of a job.
This post doesn't reflect well on the outfit at all. The fact it was even published confirms the above.
The reality is that there really are a lot of 10x developers out there, but there are also 0.1x developers like this guy, who actively sabotage projects.
At least in this particular case, the combination of the red flags already mentioned by many together with the demographics of the target audience seems like a dangerous combination that promotes stigmatisation of "talents" and the idea of "if you can't become it or work with it, kill it".
I may be reading between the lines a bit too much, but the article appears to be exceedingly popular by the freeCodeCamp publication standards, and that, to me, is very unsettling for a story that I think is effectively "management turned mismanagement into a heroic triumph".
So many red flags from the author, I'm shocked that any of their talent stayed. What a joke.
If management were better and kept better tabs on Rick, they could have nipped this in the bud. Sounds like they instead let this fester until it turned into an untenable situation.
This sort of thing is often seen in companies where the top management are not that technical. They employ "geniuses" who are in fact just idiots, but are so intimidated and awed by the ego that they are afraid to call them on their bad behaviour. Even better, not employ such people in the first place.
I think such people should be given a direct talking to about their behaviour, given the chance to fix it, and if not, moved on.
I've dealt with many companies who are tip toeing around whilst trying to work out how to employ someone to replace this toxic team member.
I would probably end up finding that there was none (or only a bunch of CYA paper trails), and fire everyone who was involved in that project.
EDIT: I once was recruiting for a project I was working on, and one of the candidates during a phone interview bragged about a poorly managed project they were on that "wasn't their fault". I didn't address it, but that's where they were sorely mistaken. Not doing anything when you know there's a problem (even if you don't know what the problem is) is not a valid strategy IMO.
It's both. Don't fall into the trap that collaboration, tenacity and mutual respect will compensate for lack of talent. You still need to find talented people, just don't hire assholes or turn them into assholes.
I've also been close to becoming one myself, one of few with whole stack server setup on desk and all, being able to answer questions from team members in a few minutes which would take them hours or days to investigate they love coming to me for questions and during planning they say i'm the only one who can solve certain tasks. To avoid becoming a bottleneck and to give me time to work on my own tasks i just say i don't have time and let them solve their own problems, this makes the whole team more independent and happy and everybody is able to debug their own code.
As others have already noted, management allowing it to go as far as it did in the article is the original source of the problem.
For my part, I'm glad I'm way too lazy to be a Rick; I would never want to grab all that responsibility and, as such, I hopefully won't ever make a mess of that proportion.
[1] https://medium.com/@peachpie/thanks-for-the-insightful-respo...
"He never should have been allowed to take on so much. If it gives comfort to anyone else reading this, the manager went first because ultimately management bears responsibility, always.
I was brought onto the team after that, as a hail-mary pass."
The original manager screwed up to let Rick get to that point, and once at that point it was impossible to manage him, hence him getting fired.
If this discussion is filled with developers who are able to recognize the poor leadership and planning that permitted an individual, acting alone, to corner all software development tasks, and hoard the project’s codebase, why did Rick fail to notice the same thing? Or worse, continue apace, fully aware of the problem, and its resulting toxicity seeping into the atmosphere of the operation?
Is Rick blameless, even if our recognition is granted the conceit of hindsight?
Placed in the same shoes, would you see the trainwreck approaching? Would you jump ship before the finger pointing started? Would you communicate, enlist support, and try to adjust expectations in the face of vapid, idealistic tech-industry pageantry?
Another MBA-type coworker starts drafting me into his own initiatives. They actually were essential to the stuff we did running at all, but apparently no one actually knew that.
I overwork for a while. Eventually I get pretty burnt out and I stop being able to work at a supranormal pace. Coworker/pseudo-PM gets mad and starts badmouthing me to my actual manager. I get butthutt since I'm working 10x harder than anyone else on my project yet I'm being harassed constantly.
Eventually I have enough savings that I stop caring about getting fire. In my mind, management had unreasonable deadlines, so I began to rely on myself to decide what a reasonable level of output was. I start doing about 4 hours of work a day and stop caring about anything beyond my "daily minimum".
I started to get in really good shape, since I'd constantly sneak to the parking lot and do laps or run to the gym when no one was looking. I started returning to my religion and started reflecting a lot, and really meditating on the situation. I realized that I was being punished for my pride and arrogance and became a much more humble person.
Instead of working hard on my own work to glorify myself, I would focus on making my team members as helpful as possible. Since I was fine losing my job, I was also fine jumping on basically any metaphorical grenade for any reason and absorbing political fallout.
Eventually my entire team was absolutely in love with me, except my pseudo-PM, the MBA coworker, and my actual manager. I realize they are all just stressed out folks trying to make a living. The Pseudo-PM seems mad at me for some reason, and constantly complains about me while the rest of my team talks about me as if I am a saint. Soon pseudo-PM is let go from the company.
Eventually the whole project just gets transfered to another manager, who has reasonable expectations and seems to look out for his employees. Now life is pretty good. It was just a really surreal experience.
No he wasn't. Even by the evidence of the article he wrote poor code. He clearly churned out a lot of it but it was poor.
Was this at UCLA on his research team? Or Stanford?
Management failed, yes. They should have let him go a long time ago and it's at least a little compassionate that they put up with this issue for two years. But, honestly, calls for more direct management involvement always concern me[0]. What really needed to happen is "Rick" needed to better manage himself. The "red flag" of "I build everything myself and don't rely on other code" scares the hell out of me and implies that management were not terribly familiar with developing software.
Use something proven, documented and solid so you don't have to re-invent the wheel. I don't buy that this guy was a "Genius Developer". I won't explain all of the obviously good reasons to using good, proven, third-party options except to say the a large benefit in this case is that others on the team might already be familiar with them and can help out more easily.
And then there's the lack of documentation. I know it's a common thing. I often feel like it's a battle I'm personally fighting all the time with other devs at every level. I mean, is there any language out there these days that doesn't have a doc-comment sort of mechanism that will be parsed by popular IDEs to make using the things you've written easier?[1] It's conceivable that "Rick" fell into the two-year backlog by spending most of his day trying to make sense out of the existing code-base. Maybe he wrote fast algorithms or had an incredible knowledge depth/scope in the given languages but that's intelligence masquerading as genius.
I also take issue with the idea that this guy went from Dr. Jekyll to Mr. Hyde. From reading this, it sounds like he was always a bit of Mr. Hyde -- he was just delivering when the software was simpler to manage on his own. Yes, there are those corner cases where you get a developer who's talent is such that his ability to work with others becomes less important -- those times exist only when there is a corner case that they fit within -- one where they can have a positive impact without creating a large crater in whatever it is they're in charge of. When I've interviewed candidates, though, those are not the people I have ever recommended. I can deal with a non-genius much easier than I can deal with someone who is untruthful[2] or incapable of getting along with others.
It sounds like the company could have had a more active mentoring program between senior and mid/junior level developers. Even recognizing that this individual was a senior developer, getting him involved mentoring those below his skill level could have surfaced some of these issues earlier. Yeah, I get that some developers do not have the personality types to mentor well[3]. But the only issue I take with them firing the individual versus attempting to address the problem after "cooler heads prevailed" is that they waited too long for either. And before I get accused of being a heartless animal, I speak from personal experience here. I lost my job in January of this year. It felt like the worst thing imaginable for a little bit. It wasn't fun. But I am better off, now. I found new employment (and quickly -- one perk for "Rick" is that hiring is out of control right now) and I ended up at a place I would have never found, otherwise. I'm actually doing things that I've always wanted to do and while I loved my last job, I love this one, more. Yes, in my case, I wasn't "fired" -- my rather unique position was eliminated because the company changed directions -- but that's not provable in an interview so I was on the same footing as Rick ... mostly.
It's hard to not see it as personal, but at the same time, people, especially in our industry, are the biggest cost a company often has. Keeping a toxic employee too long can literally be the difference between the success and failure of the entire organization, resulting in the loss of everyone's job and financial devastation for the founders. It's not a company's obligation to detox toxic people, but one way that can happen is by being fired and discovering that your assessment of your abilities and contributions was woefully wrong leading to great personal change. I hope the best for "Rick" as I would for any human being suffering loss, but I'm hoping he's figured out, by now, what he's done that has contributed to his failure and is "relaunching" as a better version of himself. That said, by writing this post, they've made that a lot harder for "Rick".
And that's my final point -- I'm a bit disgusted with the post as a whole. While they to provide "Rick" anonymity, "Rick" and likely "Rick"'s friends and family will know he's been written about. At least in the short term, when "Rick" applies for a job and indicates that this organization was his past employer and that he was let go, they're going to hit up Google, find this post, and likely conclude that "Rick" is "The Rick", causing him to be avoided[4]. Perhaps I'm being overly dramatic, but I find the whole thing to be unprofessional enough that I have zero interest in discovering just what it is that this organization does because I'm not inspired to be a customer or a future employee.
Worse, it's conceivable that they'll have future lay-offs that fall into the category of "reorganization" or "Not The Employee's Fault(tm)" and now all of those individuals might be mistaken for being the "Rick" (if they're guys, anyway). And like many of you other fine folks have pointed out, the post makes it smell like this company has (potentially) serious management/team issues -- the fact that they're celebrating firing someone by calling it the "Best decision we ever made." They "purchased" something at about the cost of a nice 4-bedroom McMansion where I live, lived in it for a year or two, then just abandoned the property for two years and handed the land back to the city who charged them to bulldoze it (the latter being an analogy to the unemployment penalty they're now paying). That's the "best decision ever made"? What do all of those other decisions look like[5]?
Having to fire someone is a huge failure for a company -- It started when you "picked wrong" and hired this person over all of the other choices, you then wasted a large amount of your own/investors money, you've wasted you/your employees time and energy, you've added toxicity to the organization and you've hurt the trust of your existing employees who do not know the full picture. Letting that go on for over two years just amplifies how massive a failure your organization just suffered. Don't celebrate it. That's about as tasteful as dancing on a grave.
[0] This often starts with the "We need a Project Manager". When I hear those words, I can feel the productivity being sucked out of the room and with rare exception (really, at every place other than where I am currently employed), that's been the case.
[1] I'm nuts about this, personally. I write a lot of code and I'm sure there are many among us who fall into the "if I wrote it 6 months ago, it might as well have been written by someone else". I live or die by whatever I put into those doc-comments, so minimally they're present for everything that is part of the API -- if I've written a unit test for it, it's got a doc comment.
[2] "Untruthful" isn't a pleasant way of saying "liar" -- sure, someone who is knowingly dishonest, such as not taking ownership of a mistake that was made or a intentionally misrepresenting the truth is a non-starter, but untruth falls into the category of making promises you can't possibly keep. I'd much rather hear "I am uncertain/haven't researched X, Y, and Z, but assuming that those only present minor problems, I can have the project done by next Tuesday" over "It'll take a week" and having to hear about X, Y, and Z next Tuesday. Everyone slips and, of course, I've made that mistake, but there are those who you simply just assume will let the deadline slip despite what they say and that's grief I can't stand.
[3] And sadly, for much the same reasons as [2], those are developers I shy away from hiring. We work in a field that is a trade-craft and one of the most complicated trade crafts around. And while an ability to mentor as a Junior Developer isn't a requirement, as a Senior/Principal it's a core requirement, IMO.
[4] Some will say "Good, saved that company a lousy hire!" but that ignores two things: People who are bad at one place aren't necessarily bad everywhere -- the whole "not a good fit" thing is real, rather often. Sometimes you aren't at the right place. In addition, when people lose jobs, they often re-evaluate themselves and make life changes. "Rick" might not be "The Rick" anymore but he now can't escape his past as easily.
[5] Yeah, I know, I'm being a dick about a click-bait-y headline; I know they obviously don't mean that, but the flippant nature with how this was presented left a really bad taste in my mouth.