Resignation letter from Microsoft Employee
worldofsu.com
worldofsu.com
You can think this way if your idea of "what the business needs most" is "what currently has the sales guys in a tizzy." Forget about everything else. Oh, and if your code only works for current customers, and has to have a bunch of tweaks and fixes applied for each new customer, then people will think your code is what allows them to sell to new customers. No kidding. If you write code that doesn't handle cases A, B, and C, then later you get credit for adding "support" for A, B, and C and making it possible to sell to customers X, Y, and Z. That's "visibility," because people from sales and marketing will mention your name appreciatively at high levels.
And for God's sake don't do any work on scaling or reliability, because a salesman never calls up your boss's boss and says, "It's been a long time since the scalability of your systems scotched a deal. I just want to say that's awesome and thank you." Wait until it breaks, make everyone thinks it's impossible, and then fix it.
EDIT: In a healthy organization, none of this will affect who gets promoted, but in an organization where people worry about "visibility," this is what they're talking about.
In one of my other comments from a different thread I made the point that a lot of developers don't realize that they should understand the business. When you do understand it and the salesperson is in a tizzy about the "wrong thing", you can point out, "actually, that's not the real revenue driver. XYZ is. Why does the customer think ABC is? I'll tell you why, it's because DEF. But by doing XYZ we can deliver ABC in six months time."
I think you'll find when you can talk at the level of business a lot of things become clearer for you and the sales team.
Actually, in my experience, developers understand the business quite well. It's the other business functions which doesn't understand development.
You WILL drive out (and keep out) good developers if you fail to treat developers as professionals whose inputs of how to develop software should be respected.
Us dev's have it drilled into us time and time again that we are so special and can't possibly be expected to participate in the company as a whole (our time is too valuable! we can't stick to a schedule! they don't understand software!).
That's a load of bullshit, developers don't get to wall off their private kingdom of code, same as no one else gets to wall off their section of responsibility and dictate outwards from within. Please stop furthering the (on that note) false dichotomy that programmers are either: 1) mismanaged by egregiously incompetent tyrants 2) given free reign to dictate to the business
Software developers don't deserve any inherent respect. Their value added to the business does.
1) The ability to take on new business (a big problem if you're kicking ass and growing fast.)
2) The cost of delivering service to those customers.
3) The ability to deliver new features because developers aren't spending their time fixing existing ones or helping operations fight fires caused by the existing ones.
Sales will agree about all of that. However, when it comes time to argue over priorities, they'll fight tooth and nail to get resources devoted to new development instead of scalability and reliability -- until stuff is broken, customers are angry, and their reputation is going into the toilet. At that point they'll rightly pin the blame on you, though. They want you to be responsible and do your job. They just won't reward you for it with "visibility."
Actually, the best way to get sales guys on the side of reliability and scalability is when they're told to stop selling a product because your systems or operations staff can barely support currently provisioned customers, but good luck making that happen without having a report of SLA penalties already paid and a convincing projection of large penalties in the future. Also, at that point, you'll already have signed or nearly-signed deals that haven't been deployed yet.
So if you just go along with the sales guys, they'll drive you into a freakin' ditch. The sales guys do not have a balanced view of the business any more than the developers do. Everybody has to contribute their piece of the picture and fight for the priorities that they understand.
When the engineers stop sticking up for what they understand better than anybody else, things get out of balance, your technical assets start to crumble, and eventually you're technically bankrupt. But throwing engineering priorities under the boat and doing anything necessary to please the sales guys in the short term can make you very popular. "Visibility" means making people who drive revenue happy, and abdicating your responsibility to deliver bad news is the easiest way to achieve it.
But the worst aspect of "visibility" is that from outside engineering, the applications that are chronically broken are perceived as the vital core of ongoing feature development, and the developers who work on those applications get the most visibility. If you asked a sales guy to write a list of the most valuable developers in the company, that's who they would name. Can you imagine a more perverse incentive?
Sure, we met those deadlines, we implemented those features and we made small fortunes for the company. But at what cost? The infrastructure starts to resemble Jenga more and more, your spaghetti code becomes harder to maintain, you end up with magic strings, magic numbers, client specific cases and conditions and your start eating into your IT budget by having to hire more programmers to support all of your crappy implementations and more hardware to handle the un-optimized pile of crap you're running.
What's worse is the very people you rely on to keep this tower from falling over, your programmers who have become so familiar with all the undocumented edge cases of your system, are also the very people you're basically forcing out. You're forcing them out because they become tired of not innovating, not refactoring and not progressing the technology OR the business, but instead spending all their time stressing over not "crossing the wires" of this delicate catastrophe. And when you finally lose them as a developer, and you will, it costs you severely in down-time and loses in productivity while you get your other developers and new hires up to speed. But not only do they have to learn the business, they also have to learn all the edge cases that were only known to your senior employee who was finally fed up and quit. And guaranteed, something, somewhere will be forgotten, that wire will get crossed and you'll pay dearly.
And while I do agree that making money and growing the business is the end goal of the business, don't assume that your IT guy isn't concerned with that and just wants to write "pretty code". Often times your IT guys understand the business more than sales, middle management and sometimes upper management because they deal with the logic, the clients, the sales team, and everyone in between day in and day out. When they're pleading with you to say "no" to a customer or ask for an extension to implement feature "x" properly, maybe you should take heed a little more often. Because the duct taped feature "x" that won over client "A" today, could be the same feature that loses you client "b" and "c" tomorrow because the only developer that new their system well enough to keep them running walked out after being forced to write yet another band-aid.
Of course when he quits and everything falls apart, everyone will just assume he was an overpaid, crappy programmer and his buggy code is what was the ultimate cause.
But based on my experience, that's not what I've seen. I've seen devs fight to do a completely rewrite that management won't fund because everyone wants to continue to use the old LOB solution. The devs argue about how the old system is a rats nest and uses archaic technology. But the business says that its doing the job, why do you want us to switch to something that lacks the features we need, just because it uses REST rather than SOAP (whatever that means).
And I've been brought in to consult on many of these disputes and probably 8 out of 10 times the "ugly" code is perfectly serviceable. What I've often done is shown how one can incrementally improve and rearchitect the existing code with no downtime... and probably more than half the time this ticks off the architect. His big dream was to do this monster rewrite that I've just shown is completely unnecessary.
At the end of the day maybe I've hurt morale of the dev team, but janitors don't get paid to not clean bathrooms (not that we're janitors, nor is there anything wrong with being a janitor, but you get the point).
It seems like you mostly move among bad developers. I don't think your experience is relevant to most of the developers reading HN.
Obviously, a full rewrite not a good idea in most cases as Spolsky eloquently argued.
PS: I didn't detect any "defensiveness" (you know, the catchall passive-aggressive term that is used to use to imply that the other side has a weak hand without backing it up) in the post you were responding to. It rang true to me.
And actually... quite often I wasn't brought in to second guess the architect. Many times I was brought in at the request of the architect. But yes, most of the time you're brought in because they lose faith in the architect or team. If you see me stop by to do a simple audit of your code, you should probably get your resume ready -- well not really, as I don't do any consulting any more.
I guess if I hired engineers who were capable of doing a complete re-architecture of a system, but forced them to put in "ugly" code that is perfectly serviceable - I wouldn't expect them to be around very long. I don't speak for everyone, but I do strongly believe that those that do this for a job and paycheck will be fine, if not happy, working on ugly code to keep things going. Those that do this for the love it, whom in my opinion are often better programmers, won't. At least, not for very long.
Still, there is definitely merit to your statements, especially when it comes to devs dreaming of re-architecture and instead having to settle for a small change. I appreciate the follow up.
"Learn the business" wasn't your only point, whether intended or not.
Or maybe the gradual weight of technical debt simply slows you down so much that smarter, tech-focused competitors steal all your business.
That's just scare-mongering from IT guys, until it actually happens to your company (and you can always just blame them anyway).
And that's an excellent reason not to tie a given salesman's compensation directly to sales value, but to time-averaged client profitability.
If you skin your client and sell them more than they need or something impossible to pull off, then retire and leave a mess for legal to sort out, you are not exactly a good salesman.
Very interesting.
I don’t listen too carefully when a poor performer tells me how awful their previous manager was.
Wait, what? Are we confusing correlation with causation here? Let's say, for example, that a manager tends to give female employees poor ratings (or whatever BigCo calls a grade). Do we discount their negative assessment of the manager? If there's a poor relationship between an employee and a manager, I'm not surprised when there is negative performance and a negative assessment.
Aren't we extremely interested in negative performers? We need to triage. Some employees are stars and will be stars no matter how you manage them. Ignore them, keep the kitchen stocked with whatever they drink. Some employees are poor performers no matter what you do. Identify them and fire them immediately, or better still leak their résumé to competitors, you get a 2-for-1.
The area of management opportunity are the "swing performers," those whose performance can be influenced by management practice. Some of the negative performers will be irredeemable, but some will be swing performers and it's worth listening to disgruntled poor performers if you can find a way to filter for swing performers in the hope that you can identify opportunities to turn them into good performers.
One possible explanation is that the student's evaluation of the prof is based on how well he understands the course material (since the prof's job is to induce that understanding) - which, of course, also impacts the student's grade.
In my experience with classmates, it initially might also look like this correlation is true, however I think the hypothesis is a bit more involved.
In one case, one class was taught with quite easy grading policies and many people ended up getting good grades - yet the smart students were unhappy with the professor and lack of challenge. In another cases, I've seen quite difficult abstract math classes and smart students would complain about the teacher as well - because of personal incompatibility - the teacher's style just didn't click with the student. And also, many times weak students would express a lot of respect and positive rating of a professor even though the teaching was over the top of their heads.
Yet obviously there were the lazy/less smart types who would just reduce the challenge to complaining about the prof - yet they are probably likely to complain about people in different situations (i.e. job)
I agree with the idea that it's a poor idea to spend most of your time with your worst performers. The problem with the worst employees is that many of them are irredeemable, so you can't get 10% improvement out of them, except possibly by micromanaging them to the point where you're doing their work)--and that doesn't scale. They're unmanageable in a negative sense, and thus you need proportionally more investment to get poorer returns.
One strong exception to a dictum against spending time with worst performers: Spending time identifying unmanageable poor performers does generate very high returns IF YOU FIRE THEM. In software, poor performers can actually have negative productivity: Their presence slows the rest of the team down.
excellent advice. Before going into mission, platoon leader should better shoot all his bad soldiers, so they wouldn't slow the team down.
Second, in this case the poor performers aren't executed. They're let go, usually after being put on a pip (which can be viewed as a notice to look for another job). They can improve their performance in another job (if someone is smart, but doesn't get these things done it's a wake up call for them to establish better discipline). Similarly, in the military poor soldiers aren't usually sent into front line battles (being delegated to secondary roles).
I can only say - Kirk Douglas, "Paths of Glory". It said all about bad performers and management.
>Similarly, in the military poor soldiers aren't usually sent into front line battles (being delegated to secondary roles).
you're kidding, right?
I would spend the first third of each course identifying each group, and for the rest I would use my time more efficiently by engaging directly with those in the second group.
Now you have given me a name, I am going to call them "swing learners". Thanks!
Do quirky people really brag about how quirky they are? Do they write essays and call them farewell letters?
I've never yet met a fun person who goes around telling people how much fun they are.
Still, even if he's stuck on himself, it is _his_ farewell letter after all
I didn't think he talks particularly much about himself or how quirky he is either.
Also interesting that this is the second person at Microsoft I've read about this week complaining about benefits being reduced. Michael Kaplan (interesting blog on internationalization issues at Microsoft besides) says "Microsoft, multi-billion dollar company that it may be, has no spine whatsoever to speak of.":
http://blogs.msdn.com/b/michkap/archive/2010/10/09/10073622....
I must have read a different article then, since very little of what I read was actually about the author himself.
Getting a promotion is a full-time job in itself. No time left for coding...
Ideally, there should be two ladders: technical and management. Every management rank should have an equivalent technical rank, with salary to match (fellow being equivalent to a VP, CTO being equivalent to CEO). That's the case at Microsoft, Google, Facebook, Yahoo and many other technology companies (as opposed to enterprises that merely _use_ technology or sales/marketing companies masquerading as technology companies). Technical talent should be appreciated; at the mean time, being a manager is quite different from being an IC and requires a different skill-set -- one shouldn't become a manager only if they want a raise.
Hmmm, but I've met boring people who walk around complaining about how bored they are..
A hard tactic, but ultimately got me to where I needed to be.
This troubles me a bit for coding, because:
There need be no real danger of it ever becoming a drudge, for any processes that are quite mechanical may be turned over to the machine itself - Turing http://libreamoi.com/index.php/why-is-programming-repetitive...
--
However... there surely are skills in this process itself. What are they, and can they be practiced?
Concrete example: if you keep repeating code, you could (variously) write a function for it; a framework for it; a language macro; use an IDE that automates it; write a vim/emacs macro; etc
So perhaps one specific skill is to learn how to automate things with a concrete tool, and practice automating tasks (eg. writing a few vim macros as practice, to learn the syntax, API, pitfalls, conventions etc).
( EDIT: or, more generally, practice using your tools )
Deeper skills are recognizing repetition (and regularity in general), defining it clearly enough to know what an automation would need to do; and know how to verify that you're correct. Implementing it is a final step. Another skill is in assessing whether such precise analysis is worth it, given insufficient data to 100% nail the task; that the task may change (esp with new data); and of course that to estimate how much effort is involved in doing it "properly", verses a "good enough" solution, verses not automating at all.
But how does one practice those tasks with "repetition and intent"? They aren't like piano scales - each problem is unique and unknown. hmmm.
IT, ever shortsighted.
Microsoft employees can be broadly classified in two current states of mind: people who can't wait to leave and people who can't imagine leaving. I almost never encountered someone that was in-between these extremes. As such, you pretty much can't write a resignation letter that expresses meaningful sentiment that doesn't offend one of these large groups.
I really don't like when critics put a cap on someone's future.
WTB more of this everywhere.
The other thing was, and I don't mean these questions in a derogatory way, how do you start working for Microsoft in 1997, of all years. And how do you stay there for 12 years running? What kind of startup employee will you be when the only professional environment you have known is Microsoft? I'm not suggesting that there aren't perfectly excellent, sensible answers to all of these, and obviously his new employer thinks so. I just can't personally conceive what they are.
Good thing he's not going to a startup, he's going to Facebook.
What do you think they do at MS and what do you think they do at startup companies? Ex-MS people have done places like Zillow, Valve, Fog Creek. And thousands have joined relatively large companies in their early phases, such as Google and Facebook.
Do you honestly believe that devs at Microsoft sit around saying, "Hmm... how can we do nothing today?"
What on earth gave you the idea I believed anything of the sort?
While there were good stories and takeaways from his post, I keep hearing this same mantra coming across so many would-be entrepreneur stories. Why do people doubt themselves so much and not listen to their own ideas?
Those people complaining, btw, probably have valid complaints, regardless of what they've output. Often people that have low output are a sign of poor hiring and/or management. Why didn't he focus on suggesting changes to remedy this?
In addition, he was ditching on the Litebulb mailing list, rather than suggesting an alternative. What if he were to suggest that MS had 20% time to work on Litebulb requests?
It often happens that you need to do something negative such as giving bad review, not approving some large piece of code which the employee thinks is beautifully written. Or even just fire someone.
I've been on both sides, and now on the management side I see that employees usually don't realize the truth, and consequently have hard time getting a lesson out of the incident.
This should be taught to everyone from a young age.
"Individuals are the sole cause of anything that’s ever happened."
The most inspiring quote in the article. Reminds me of the Margaret Mead quote I have hanging in my room somewhere: "Never doubt that a small group of thoughtful, committed people can change the world. Indeed, it is the only thing that ever has."
Exactly!
Works in general, but not when you are dealing with an outlier.
Maybe he missed the point? People typically attach things to the end of pens to stop them from getting stolen. Not to make bouquets.
I wonder about Microsoft's financial future if this is what their corporate culture has been reduced to. Everyone is so high on themselves and on playing Soap Opera over in Redmond that nothing truly new gets shipped.
Figure out that one and the world will beat a path to your door ....
BTW, timing is everything, I guess - this was posted by justinweiss a couple of weeks ago as http://news.ycombinator.com/item?id=1733702 (thank you Better HN extension for Google Chrome at http://goo.gl/PcMz).
i stopped reading at this phrase. I was reading until it as i was genuinely curious how an engineer could write such BS.