Advice for Geeks
Advice on various aspects of employment in the high tech industry in the early 21st century. Much of this is probably applicable to other fields in other places and times, but the value will decrease the further your experience diverges from mine.
The bulk of this (and all of the mistakes) has been synthesized from my own experiences, but I am indebted to many friends and cow-orkers for material and feedback.
- Promotions, Titles, Pay and Advancement
- Email and Written Communication
- Verbal Communication and Meetings
- Being a Good Person
- Being Your Best Self
- General Comportment on the Job
- Managers
- Going Into Management
- Confidence
- Coding
- Technical Politics
- Staying Healthy
Promotions, Titles, Pay and Advancement
The below applies to Individual Contributor roles at technical companies. I know little about the management track. I am also deeply cynical…
- Your specific job title is mostly meaningless. Nobody really cares
except you.
- And your mother. She’s very proud that you’ve been promoted to “Senior Button Pusher”.
- Titles do not generally enhance your resume. Everyone with more than a couple years on the job is a “Senior $THING” or “$STUFF Architect”.
- Do not pursue promotion for the sake of “prestige”
- A smart employer will understand that they can buy you off with something that has little real cost to them.
- Doing so risks alienating your co-workers or losing their respect.
- The numeric level may have some significance, depending on how your company’s HR department does business. Opportunities may only become available above a certain level.
- IMNSHO the only really important thing about promotion is how it affects
your compensation. This works in two ways: salary range and equity.
- In most large-ish companies each job level has a corresponding salary range.
- When yearly reviews come around people will, all other things being
equal, get a salary adjustment proportional to the distance between their
current salary and the middle of the range.
- If you’re at the bottom of the range you’ll get a big bump
- If you’re close to the top you get a small one.
- So a promotion (usually) gets you an immediate pay bump, but it also gives you opportunities for larger future raises.
- If you go for a long time without a promotion you will start to see smaller raises.
- When yearly reviews come around people will, all other things being
equal, get a salary adjustment proportional to the distance between their
current salary and the middle of the range.
- The size or even availability of equity grants depends on your job level.
This often has a much larger influence on total compensation than salary.
- At the higher levels yearly equity compensation equals and eventually exceeds salary.
- In most large-ish companies each job level has a corresponding salary range.
- There are a few narrow exceptions to the cynical view above:
- Some companies or departments place a lot of value on titles. If you work in one of them you need to play the game.
- If you want to start your own company it helps to have gotten yourself a ways up the ladder when you start talking to investors and potential partners.
- Getting promoted to “Fellow” is actually significant. Fellow means that the CEO and senior management know who you are and respect your work, as well as people in the wider industry. They don’t hand out “Fellow” just for showing up.
- Being a Fellow or Distinguished Engineer gives you a platform to help lift up others. A job recommendation from “Dude who works at $COMPANY” is nice, but one from “Soandso, Intel Fellow” has some heft.
- It’s important to test and verify your value. The best way to do this is
by interviewing on a regular basis. You don’t have to actually change
jobs, but you should go through the
process.
- This will also keep you prepared in case your job disappears out from under you.
- Note that “talking to recruiters” is not the same as interviewing, and is of little or no value.
Email and Written Communication
- Learn to communicate clearly and succinctly in written English
- Write in full, grammatically correct sentences
- Organize your sentences into paragraphs
- Use a spell checker
- Read over what you’ve written before you send it
- Don’t bury the lede
- Make sure the most important part of your message is in the
first sentence.
- Don’t make people guess at what the important part is
- If you’re sending an email to more than two people, or an executive, you should provide an “executive summary” at the top.
- Make sure the most important part of your message is in the
first sentence.
- Explain why you’re asking for something.
- Don’t ask several unrelated questions in a single email
- You’re lucky if you get more than a one word answer to a single question. Multiple questions is pushing it.
- Be extremely brief and clear when communicating to management
- Most managers get hundreds of emails a day. Upper management gets thousands.
- If they can’t read and answer your email in under a minute they’ll file it in “answer when I have time” folder. This folder is roughly equivalent to the Trash…
- It’s best if you can ask a yes-or-no question
- If you have a complex problem that truly needs their attention then make that clear. Maybe ask for a short meeting. Don’t do this lightly.
- When sending an announcement to a large number of people or distribution lists you can forestall a reply allpocalypse if you Bcc the recipients and set yourself or your immediate team as the To address. It is helpful to include the list of recipients in the email text so that people can see if they need to forward the message to someone who was missed.
Verbal Communication and Meetings
You may wish for an egalitarian world where everyone is valued for their potential, but you live in 21st century Western Culture. If you want to achieve your goals you need to be able to speak the language of power.
- Learn to argue without losing your temper or becoming overly emotional.
- In contemporary American culture “being emotional” is a sign of weakness, and can be used to discredit you.
- To the extent that you are not white, male, middle-aged, wealthy, heterosexual, etc. your emotions will be viewed increasingly negatively.
- Be willing to interrupt.
- Others can take advantage of your politeness to deny you the opportunity to even present your points.
- Even well-meaning people get excited about their ideas and don’t know when to shut up.
- Don’t be overly deferential. Just because someone is “senior” doesn’t mean they have the right to be rude to you.
- Learn to recognize when others are trying to monopolize or control the conversation.
- Speak with authority on subjects you know and are confident about.
- Speak with humility when you out of your area of expertise.
- Stop talking when you’ve made your point.
- Be quick to admit when you are wrong.
- Don’t apologize merely for being wrong.
- Do apologize if your wrongness has cost people time and effort.
- Ignorance is not stupidity. Don’t confuse the two.
- Willful ignorance is definitely stupid
- Be firm, but don’t be an asshole.
- “But everyone else is doing it” is no excuse.
- Understand your quirks and personality traits that might annoy people.
- Learn to control them; at the least know when you’re being annoying.
- Your spouse/partner/roommates can help you with this…
Navigating Projects and Politics
- Be aware of politics, priorities, and programs
- Who is in power? Who is popular? Who makes enemies?
- Where is the money coming from, and where in the organization is it going?
- What products / projects are profitable?
- What groups are getting budget & headcount?
- What is important to your group, your department, the company as a whole?
- How does all this line up with your goals & strengths?
- If things are going this way, but you want to be going that way, someone is likely to be unhappy. That person is probably you…
- Know your professional and technical strengths and weaknesses
- What are you good at? What are you bad at?
- What do you want to work on? What do you not want to work on?
- What are you tired of doing?
- What do you want to get better at?
- Try to exert some control over your destiny
- Ask for opportunities to work on things you’re interested in.
- Politely decline, or at least register your lack of interest in, projects that don’t further your personal/professional goals.
- Don’t be a prima donna, but don’t just float along and hope good things fall into your lap.
- If you get pulled onto a project, learn why and find out what your role
is. Here are some likely possibilities:
- Core contributor
- Valuable advisor
- Available worker
- Sometimes because you have relevant but fungible skills (“we need someone who knows JavaScript”). In these cases you may be able to negotiate your way out of the project if you want to (“Can Jane work on this instead?”).
- Urgent projects sometimes just need “warm bodies”. Generally best to be a good sport and not fight.
- Your approval is required or desired
- Make sure to limit your involvement to the approval process. Don’t get sucked into months of unnecessary meetings.
- Your presence is politically valuable to someone else
- Do you get any political or professional value out of it? If not, extricate yourself.
- You can be blamed if there’s a problem
- Extricate yourself quickly.
Being a Good Person
- Be nice to others even when you’re having a bad day
- Learn to recognize when you’re having a bad day.
- Conversely, recognize when others are having a bad day. It’s often wise to disengage until they’re in better shape.
- This will help you avoid getting mired in pointless conflict.
- Never make anyone’s day worse than necessary.
- Sometimes it is necessary to tell someone they’ve screwed up. Be firm, but fair.
- Are they the actual problem, or just the face of the problem? Don’t yell at the poor drone getting paid minimum wage to enforce some terrible corporate policy.
- Pay attention to your mental state. Are you tired, hungry, fearful,
angry? Don’t let your emotions and your body jerk you around.
- Learn to control your mind – do breathing exercises or meditation, take a walk around the block, etc.
- Avoid having to make important decisions when you’re not at your best.
- Be aware, and wary, of decision fatigue
Being Your Best Self
- You should have a consciously curated work persona and presentation.
- Tone down your annoying habits and tics
- Be more “normal” than you usually are
- Act like the person you want to be
- Be a better version of yourself.
- Being “different” has a cost, and the weirder you are the more it affects your
career.
- It’s OK to be weird, but you need to understand the tradeoffs.
- The more senior and high-performing you are the weirder you can afford to be.
- Do not actually “Bring Your Whole Self to Work”. Your employer and your
co-workers do not want to hear or even know about the gory details of your
life and its troubles.
- Some parts of your self you definitely should not bring to work:
- Religion. Do not discuss religion with anyone at work unless you regularly see and talk to them at your place of worship.
- Anything political beyond general approval of consensus neoliberal capitalism.
- Your sexuality (even/especially if you’re straight). You don’t have to be closeted, but don’t bring it up other than in passing.
- Family drama. Although if it’s affecting your work you should let your manager know, in very general terms.
- Money worries, or the lack thereof. People get very uncomfortable dealing with economic disparity.
- Some parts of your self you definitely should not bring to work:
- Do not friend your manager, team lead, CEO, etc. on social media.
- You do not want to answer awkward questions like “If you were out sick how were you posting concert pictures?”
- Maintain some awareness & understanding of current events, politics,
economics, environmental & social issues, science, literature,
entertainment, and sports.
- You need to keep up with what’s going on so that you’re not blindsided when “the news” actually affects you.
- You want to be a well-enough-rounded person to participate in lunchtime and water-cooler conversations without your mouth hanging open.
- IMNSHO the best way to do this is to read (not watch) the news at least a few times a week.
- You don’t have to read all of every article.
- You can get a pretty good clue from the headline and the first paragraph.
- Heck, just skim the headlines every day and read an article every day or two.
- Pick a reputable, middle-of-the-political-spectrum, national newspaper.
Consider getting a subscription.
- In the US try: The Washington Post; The Economist; The Wall Street Journal; Forbes
- In the UK: The Guardian; The Independent; The Times; The Telegraph
General Comportment on the Job
- Don’t be a jerk
- Especially not to the people below you
- If you write an email while angry, wait half an hour before
sending it.
- This will help you avoid career limiting mistakes
- You don’t have to fuck people over to get ahead
- You catch more flies with honey than with vinegar
- Under-promise and over-deliver
- Do not waste your manager’s time
- And don’t ever waste their manager’s time. This is a career limiting move.
- Have self respect, but don’t be egotistical
- Staying in touch with former co-workers can lead to future opportunities.
- Conversely, pissing people off can have lasting repercussions.
- “It’s a small valley, and people talk.”
- Don’t irritate your cow-orkers
- Keep your voice down in the cube farm
- Use closed-back headphones
- Nobody wants to hear your terrible taste in music
- And you don’t want to hear theirs
- If you need to make or take a phone call find somewhere
private.
- Do not, upon pain of death, answer or make a call while in the restroom. That’s disgusting and should be a firing offense.
- Using a speakerphone in a cube or open plan office should be a firing offense
- Practice good hygiene
- Bathe regularly
- Wash your hands before leaving the restroom
- Brush your teeth after lunch
- Try not to eat in your cube
- Sooner or later you will work with someone you just don’t get along with. Try to find some minimal common ground; failing that ask your manager for suggestions (without whining or casting aspersions).
- Think about your career, not just your job.
- What do you want to be doing in the future? Why?
- All jobs have some amount of “janitorial” work, don’t idealize.
- What do you need to do to advance?
- If you just float along your available career options will gradually shrink until you find yourself trapped.
Managers
And the Care and Feeding Thereof.
Note that this is most applicable to first-line managers with relatively small groups (5-15 reports).
- Your boss’ job is not to order you around or penalize you for your failings.
Their job is to ensure that you have what you need to produce the work that
the company is paying you for.
- If you’re working at the level you’re capable of then your boss shouldn’t be hassling you.
- If your boss is hassling you all the time then it’s likely that one (or perhaps both) of you is not doing their job well.
- Be brutally honest with yourself when evaluating the above.
- Conversely, part of your job is to make your manager successful (same goes for them and their manager). Keep this in mind and you’ll both be happier.
- Remember that your manager is just a person; treat them as such. Don’t get too chummy, don’t be slavishly deferential.
- Managers don’t always get paid more than the people they manage. Sometimes they get paid less.
- Managers are usually very busy with meetings, emails, and red tape. Be understanding and respectful of their time.
- Let your manager know how you prefer to be managed. Be direct but
diplomatic. Most managers would rather not have to guess.
- Ask them how they prefer to manage. Look for a common approach.
- If you want to work on something, ask your boss. Worst they can do is say “no”. Conversely, if you really don’t want to do something, tell your boss (but be prepared to gracefully do it anyways).
- Ask your boss what they want from you.
- Be gentle with your manager if they’re new at the company or new to management.
- Keep the whining to a bare minimum.
- But make sure you raise real issues. If you’re genuinely unhappy, have a conflict with a co-worker, etc.
- Early in your career you should be meeting with you manager once a week. As you gain experience and confidence the frequency of the meetings may decrease, but this depends greatly on what kind of work you’re doing.
- When something is going worng, ask yourself “Does my manager know?”.
- Don’t hide problems from your boss.
- Most managers want bad news early, and none of them want it too late.
- Tell your manager as soon as you’re sure that a deliverable is going to be significantly late. This gives them time to adjust expectations elsewhere, pull in other resources, or maybe just tell you that they had built in plenty of padding and you’re still OK.
- Not every manager and employee are compatible. If it’s just not working,
find a new job. Enduring a miserable experience will end poorly, usually
for you.
- Some managers are just bad at their jobs, or bad people. Talking to HR might help, but you’ll probably be better off leaving. Don’t suffer needlessly.
- Most first-line managers were individual contributors not that long ago. They probably don’t love the administrative aspects of their new jobs, so don’t make life harder for them by being lazy about paperwork.
- People who have never been in management talk a lot of trash about
managers. Consider the source before giving them much credit.
- In my first job out of college a co-worker told me “Shit flows down hill, and we’re at the bottom”. Many years later I understood that (for good managers) it was more like “Any shit flowing down must be swallowed by your manager before they can pass it on. If you’re at the bottom you can open an umbrella.”
Going Into Management
Disclaimer: I was a manager once, many years ago; I lasted six months before I went back to being an individual contributor.
- If you are good at communicating and working with people you may eventually
be offered a position in management.
- This should not generally be considered a promotion.
- Working in management is very different from being an individual contributor. The majority of your time is spent communicating with people – other managers or your direct reports. You spend a lot of time in meetings, and much of the rest of your time dealing with email.
- You will not be able to spend any significant amount of time coding
- Managers almost always work too damn much. Endless meetings, scheduled at stupid times, often double booked. So. Much. Email. One-on-ones with your reports.
- First and second level managers don’t make a ton of money. Every manager
I’ve talked candidly to has said that they have people under them who make
more than they do.
- It’s true that you need to go into management to make the really big bucks, but that doesn’t happen until you get up to Director or VP.
- Once you’ve spent a year or two in management it’s difficult to go back.
- People view you as a manager and expect that you want to continue as one.
- Prospective employers will assume that your technical skills have atrophied.
- Rather than going to the
darkmanagement side, consider becoming a Technical Lead. This consists of technical direction and team guidance without the tedium of HR paperwork and the horrors of being a social worker and surrogate parent to your team. You still get to write code, and you go to many fewer meetings than an actual manager.
Confidence
- If you don’t act like you believe in yourself, nobody else will.
- Don’t reflexively apologize for minor things.
- Success won’t always feel good or result in positive feedback. Lack of positive feedback does not mean failure.
- A failed project doesn’t mean that you are a failure. Things fail for many reasons, many of them out of your control.
- Seek to impress yourself. Don’t look for approval from others.
- Give evidence for why you’re good.
- Understand the difference between confidence and arrogance. Confidence can be comfortable in saying “I don’t know” and “Please explain that”. Arrogance can’t and is self-destructive.
- Your company has a lot invested in keeping you on board.
- Finding, attracting, and interviewing new people is extremely time consuming and costs the company a lot of money and lost productivity.
- Training a new hire is similarly expensive.
- As long as you’re doing good work you shouldn’t fret about being fired out of the blue. (If the company has layoffs or an aquisition that’s a different matter, and much harder to predict).
- Your company needs you almost as much as you need it.
- You should feel comfortable at work.
- It’s unlikely that you’re the smartest person in the room/email thread.
- Learn to be comfortable working with people much smarter than you.
- Just because you’re not the smartest doesn’t mean you don’t have good things to offer.
- Learn to ask good questions.
Coding
- Always code as if the person who will end up maintaining your
code is a violent psychopath who knows where you live.
- Usually the psychopath in question is you, six months later, wondering that the hell you were thinking when you wrote this garbage code.
- Remember that the next person looking at the code is probably trying to fix a bug under time pressure.
- Debugging is twice as hard as writing the code in the first
place. Therefore, if you write the code as cleverly as possible,
you are, by definition, not smart enough to debug it.
(Kernighan)
- Don’t be clever
- Explicit is better than implicit
- Use parentheses instead of depending on operator precedence
- If there’s a code style guide, adhere to it like a religion
- Maybe your group at work has one
- If not, use the default style for the language
- eg. PEP8 for Python
- Write comments
- In complete sentences
- Tell the reader about the reason for the code, not just what it’s doing (which should be obvious from reading it, because you didn’t do some damn clever thing).
- Programmers are terrible at estimating time required
- Always pad your estimates
- And then pad them some more
- If your boss is any good they understand that estimation is nearly impossible. But don’t bet your job on this.
- Underpromise and overdeliver
- Always pad your estimates
- Don’t reinvent the wheel
- If someone has already written the code (and their version isn’t obvious crap) use it. Chances are they’ve found and fixed some of the bugs already.
- Don’t think that you can get an easy win by rewriting something
from scratch
- This is often a disaster for any non-trivial SW system.
- The existing code is full of workarounds for external problems and unexpected user behavior. If you throw it away you’ll have to painfully rediscover everything that the original developers have already solved.
- Refactoring is better than rewriting
- See Joel Spolsky’s Essay “Things You Should Never Do”
Technical Politics
- All substantial technical change has a political aspect
- It’s extremely rare that a technical decision is made solely on technical grounds
- The “best” solution doesn’t always win.
- “Best” can be highly subjective
- Sometimes there’s only a selection of unpleasant choices
- Try to kill your own ideas based on technical issues before anyone else does.
- Explaining an idea to someone is the best way to find inconsistencies and issues.
- Understand what the team’s “currency” is – time, headcount, budget, compute resources, bug count, etc. Frame your arguments in terms that express value in those currencies.
- There are many different kinds of objections & obstacles
- Disagreement about which approach is the best for sound technical reasons
- High Costs or limited resources
- Individuals may push back for personal reasons:
- The current technology system gives them political power
- “I’m the only one who understands this”
- “I’m perceived as the expert”
- Adoption of a new technology or system would likely result in a reorg which would strip them of power or staff.
- They’re invested in the current tech / system
- Emotionally invested
- Lots of experience / capability
- Can quickly identify problems
- Can easily implement solutions or add new features
- They’re resistant to change
- Not interested in learning new tech
- Comfortable with the status quo
- Close to retirement
- Prefer to devote energy to non-work aspects of their life
- No time / energy to learn new tech
- Not interested in learning new tech
- They dislike the new technology or system
- Emotional reasons
- “I don’t like significant whitespace”
- “Java hurt me when I was a child”
- They fear change
- “I might not be good at this”
- “I’ll have to work harder”
- Emotional reasons
- Putting up a fight puts them in control
- They don’t have actual objections, they just want to control the dialog
- Some people like to hear themselves talk
- Some people enjoy arguing for the sake of arguing
- The current technology system gives them political power
- It’s important to identify the reason for an objection
- Don’t try to persuade someone with facts when their objection is emotional, or vice versa.
- Some objections can be handled in a public forum, some are best
addressed one on one.
- Some of this depends on the person, some on the objection
- In general the emotional stuff is best handled one on one
- You need arguments that cover more than just the technical aspects
- You need to be aware of the politics
- You may need to prepare specific arguments for specific individuals
- You should always cover the basics
- Technical
- Budget
- Personnel / time
- Dealing with someone who won’t change
- Convince other stakeholders, let them convince the holdout.
- When all else fails you have to graciously accept defeat. “Object, but commit”.
- Do you best work even if you think the wrong choice was made
- Add flexibility to your implementation in places where you foresee issues
- You may later be called on to fix the things that you knew were going to fail
- Make sure that your management understands your objections
- Communicate them in a professional manner
- Don’t whine or sulk
- You want a paper trail so that you can’t be blamed if everything goes to hell
- Do not stoop to malicious compliance
- Do you best work even if you think the wrong choice was made
Staying Healthy
- Be skeptical about on-site services like free breakfast & dinner, laundry facilites, workout rooms, etc. They’re there to encourage you to spend your free time at the office so you’ll do more work and have less of a life.
- Your company is in no way “family”. It does not love you, and will kick
you out at a moment’s notice without shedding a tear. Don’t get emotionally
attached to your job.
- This, and other similar lovey-dovey platitudes, are cynical ploys to keep you from doing what’s best for you.
- Develop a hobby that isn’t computer related.
- You’ll spend 40+ hours a week in front of a screen, which is already about twice as much as is good for you.
- Beware of burnout
- Learn about ergonomics, and don’t think you can put it off until
later
- Use a full size keyboard
- Use a decent sized screen about arm’s distance away, with the top just above eye height
- Don’t rest your wrists or hands on the desk or keyboard.
- Move your whole arm from the shoulder, not your hand from the wrist.
- Rest your hands in your lap when you’re not typing, don’t leave them on the keyboard
- Look away from the screen frequently.
- Get up and walk around at least once an hour
- Don’t work on a laptop for more than two hours a day
- Repetitive Stress Injury happens after months or years of
abuse.
- Symptoms come on suddenly but take forever to go away.
- RSI can ruin your career. Don’t mess around.
- Get regular exercise
- Best bet is to develop a hobby that looks like exercise
- Core strength training is essential to combat the effects of sitting in front of a computer all day.