7/11/11

33 Lessons for Software Industry Novices


1.     You’re not smarter than anyone

     In all jobs, especially the software industry, there are a lot of smart people. They have worked at that company, and in that industry, longer than you. Even if you were the smartest and brightest student at your school, you’re not going to be when you find a job. Get over it. The sooner the better

2.     There is such a thing as a stupid question


     Note: This has been heralded as mostly bad advice from a variety of people that have read this. The consensus seems to be, that asking questions is a great thing. I suppose my experience was non-typical. Hooray for the internet I learned something new. 

     Before asking any question, Google it first. If you still can't find it, look in other places; internal documentation, text books, API's, forums, etc. Only when you have exhausted all possibilities should you ask for help. Then ask the guy closest in pay scale to you, don't ask the lead developer or manager, or anyone else. If they don't know go to the next highest guy.

3.     Looks matter

     If you look like you don't shower, and have never had a haircut, people will think it’s so. Your looks, for better or worse, will impact you positively or negatively.  Imagine my surprise when my contract didn't get renewed after wearing a mo-hawk to work for 3 months.

4.     Know what you know and what you don't know

     If someone asks you a question and you don't know the answer say, "I don't know," or "I can find that for you". Giving someone bad information, because you don't want to look stupid, can make you look ten times dumber and lead to poor outcomes. Information is the currency of our industry, if the information is not good, then nothing will be. On the contrary, sharing valuable and accurate information can be extremely helpful and reflects well on you. 

5.     Become a part of the culture before trying to influence it.

     Prove your worth, intellect, and ability to make good decisions that are in alignment with the company before trying to make changes or influence anything.

6.     Software’s primary function is to earn profits

     That is its number one priority.  Software does not make money by: being coded well, being high quality, or delivering all of the features users want. They are all certainly important, but software makes money by being sold! 

7.     Listen to people

     See 1. This seems pretty basic, but so many people fail at this in a big way. When people talk, listen to them - your boss, coworkers, the janitor, whoever: in the software industry people rarely tell you things that are not important. Take notes if you must.

     The worst thing you can do is ask someone a question when they’ve already told you the answer. In my early years, I would ask people for documents, or how something worked, or where something was, and I would get my butt handed to me. They would say, "Why didn't you write it down", "We talked about this in such and such meeting last Friday", and all in a very harsh tone. I received absolutely no sympathy, and often got a wicked tongue lashing. 

     That's it, just listen well. It makes you look smarter, more devoted, and makes people like you. If you suck at listening I have no idea how to get better, I suck at it too.

8.     Have a presence

     Go to work, go to meetings, show up to company events, schmooze, hang out; do whatever you can to get your face in front of people. If no one knows who you are, you're going to get passed for promotions, cool opportunities, and will be underappreciated for the work you do. I suck at this too, but trying hard goes a long way. 

9.     Archive Everything you can

     Information is what the software industry runs on, those with the most and best rule. You need to archive everything you can so that you can reference it later, save every email, every instant message, take notes on every conversation, and know where to find it all. You look like an idiot when you have to ask a co-worker to explain something that he told you yesterday because you "forgot". It's much more dignified to look at your notes and review what he said. 

     It's also important because invariably someone will say, "I asked you to have that report to me yesterday". Then you can say, "This email you sent last week says to have it on the third, which is 3 days from now". Then that person ends up looking like the douche, and you look well organized and on top of your game.

10. Toot your own horn

     When you do something well, let people know. The best approach for this is to present your awesomeness as a service to others. For example, "I made this script that turns monkey turds into gold; I thought you guys might want to use it.”

     In an ideal world, everyone would be recognized for the work they did and wouldn't have to work on their personal PR, but it's not an ideal world. People are busy and worry about what benefits them and what they're working on at the moment.

11. Help others and they will help you

     When co-worker Joe comes begging for assistance, because he's going to miss a deadline, help him! Undoubtedly, unless you’re the most Supreme Being in the universe, you will be in the same position and it will be nice to know that someone owes you. Build up as many favors as you can, at some point you will need them all.

12. Advance your skills at all times

     Employers/Market forces are not your friend. They don't care about your family, or that you’re a nice guy, or that you have a massive collection of Pokémon plush dolls  they care about your skills. Take every opportunity to improve them. Take courses, seminars, beg more experienced people for tips and feedback. It's hard to say what will be popular in the software industry in ten years, but I can guarantee it won't be esoteric Anime.

13. Do Secret projects

     There are things that your boss will never say yes to, projects that sound kooky, or don't provide immediate profits, but could be important anyway. Spend whatever free time you can, developing 'Secret Projects'. This can include: setting up a repository for code (there are still places that don't have that), writing up an experimental interface, writing a testing framework, or creating anything that can add value to your company.

     When you complete your secret projects, verify that it in fact will provide value to your company, and then show your boss. 99% of the time they will be thrilled. It's much easier to sell a finished product, than it is to sell an idea.

14. Learn to be self sufficient

     See question 2. A man that can work on his own, and not gobble up the resources of those around him, is worth more than a thousand men that constantly need help. Find answers to your own problems, keep yourself busy, and stay motivated. 

15. Don't be a yes man

     Tell your boss when they’re wrong, but be careful. Use grace and facts to convince them of the best approach. Your boss will thank you. One of the greatest things about the software industry is that it's usually an open exchange for ideas. 

16. Definitely be a yes man

     For the love of all that is good and holy in the universe, don't disagree with people just to have the opposite view point. When someone has a good idea or strategy tell them you think so. If you must, you can follow that with a few concerns you may have. If you always tell everyone they’re wrong, they will hate your guts and think you’re an egotistical maniac.

17. Choose your battles wisely

     Arguing with co-workers consumes energy, time, and morale. If you must argue about something, make sure that it is a worthwhile argument. Spending 3 hours trying to convince someone to use ruby instead of python to write a 12 line script is not worth anyone's time. 

18. Make Friends

     I openly admit to being terrible at this, but it's important anyway. Making friends at work says a lot about you. It says you’re a team player, you can get along with others, you have a stake in your job, and so much more. It's also an incentive to show up to work. If you have a person you enjoy seeing everyday it makes getting through the day that much easier.

19. Have fun

     Find something you enjoy at work - like having friends, it’s a great incentive to come in every day. It improves your morale and makes you more enjoyable to others. We have a basketball court at work and I love to go shoot hoops. I make time for it as often as possible. I come back refreshed and happy, and am often more productive than I have been all day.

20. Know when to put in the extra hours

     Working extra hours is great. It shows your devotion and ability to be a team player. However, I caution against long hours every week. You will burn out. You will become a sunken-eyed zombie who is dead to the world. The quality of your work will decrease. You should be saving yourself for the times when it really counts.So that you will be able to drop 60 or 80 hours in a week to meet a deadline that really is critical, while also making every one of those hours the best you have to give. 

21. Don't get too comfortable

     Most of us know by now that there is no such thing as “job security”. It was a temporary concept created by some economic illusions and sleight of hand. “Now you see it and now you don’t,” poof it’s gone forever. This is especially true for the software industry. We are an industry that moves fast, moves hard, and isn't afraid to lay people off.

     As a younger employee in the software industry, you shouldn't expect to stay anywhere too long - a couple of years max. There are people who manage to hold on to positions for years and years, but don't count on being one of them. At some companies entire divisions get axed without consideration for who is going. Just because you are a rock star doesn't mean the guy killing 200 jobs will know your name.

22. Learn to write well
  
     You don't need to be great or even good, just get proficient enough to write a good email. If you’re a terrible writer, like I was, try starting a blog.

     That's why TPH was created; my boss at the time told me that my emails bordered on embarrassing, and my number one goal should be to improve my writing. Six months after starting the blog, I was told that my emails actually look professional. I'm still not the best writer, but I'm much better than I used to be.

23. Get comfortable with phone calls

     I have spent a ridiculous amount of time on the phone working with teams from various states and countries. Software companies are continuing the trend of worldwide offices, working from home, and distributed teamwork. The telephone is still the best option for many of our communication needs. There's no good strategy for getting used to talking on the phone several hours a day, just deal with it.

24. Learn to work in a team

     The lone programmer is gone! That's right, I used an exclamation point: that's how gone it is. You will be working with a team of other developers, content creators, managers, quality assurance personnel, and more. Your ability to work in a team will directly affect the outcomes of your project and your ability to improve your career. 

25. Say Thank You

     Anytime someone helps you, say "Thank You". Time is the most valuable asset to anyone working in the software industry, and they need to know you appreciate the time they gave you. It was a gift, not a right. Thanking that person will also encourage them to help you again, because you recognize that their time is valuable. 

26. Make your job enjoyable

     If you hate your job, then change something. Is your job to push buttons every day? Make a game out of it, create a robot to push buttons for you, just do anything you can. If you show up to work every day looking miserable and hating what you do, you will never go anywhere. In a cruel twist of fate, you will probably end up stuck there forever. If you hate your job so much you can't possibly make it enjoyable, find a job that you can.

27. Take Breaks

     That's it: take breaks. It's ok to skip them sometimes, but not all the time. Getting out of your cube and getting some fresh air will help clear your mind and improve your productivity. 


28. Be A Cool Guy

     If you’re not a cool guy, pretend to be one when other people are around. Don't spend your time crapping on everything you disagree with, don't bad mouth people, and try to have a good outlook on the things that are happening around you. For better or worse, what others think about you is what will ultimately decide if you’re going to have upward momentum in your company. 

29. Don't complain

     See 28. It's annoying to be around someone who complains all the time. As your mother would say, "If you don't have anything nice to say don't say anything at all" - unless it's constructive to your project. 

30. Do the best you can with what you have

     The world is not an ideal place. When you go to work your computer might be too slow, you might not have the software you need, and you will definitely never have enough time to complete projects, the "right" way. It's important to work with what you have. You will seem smarter, be more likable, and be considered a good worker, if you manage to get your job done with what's available. There are times when you have to ask for things, but doing so rarely will help you get the stuff you need, when you really need it.

31. Find out what you like and don't like about your job

     If you know what you like about your job, you can get better at those things, and, if you are good at something, people will want you to do it. No one asks the guy that hates coding to whip up a script to test the database. Also know what you don't like about your job: it will allow you to divest yourself from those things, and hopefully push it onto somebody who does like it. 

     It sounds crazy, but tell your boss, "I don't like doing this thing, is it possible to have someone else do it”. This may seem bold, but a good boss will give it to someone who's good at it, or your boss will tell you why you should be doing it. If your boss freaks out about a statement like that, QUIT. Go find a job with a good boss.

32. Never Get Drunk At Work Parties

     It's cool to have a few drinks to loosen up and have a good time, but its way uncool to be the drunken idiot kid. It could wreck your work environment, your job, or your career. If you can't handle your booze, just don't drink at all.

33. Don't do things because they are cutting edge

     Knowing about the latest and greatest techniques in your field is important. It provides opportunities to improve your work, show your knowledge, and improve the overall quality of whatever you’re working on. However, just because things are new doesn't mean they’re better or good. I have seen people completely re-code thousands of lines, just to move to their new favorite programming language, only to switch back after a few months. Newness does not guarantee goodness.

     Before switching techniques, languages, or anything else, carefully decide if it provides a large enough benefit. Also be sure that the solution you’re using now can't be tweaked to offer that same benefit. For an industry so concerned with time, it's ridiculous how often we are willing to climb a giant learning curve just to be on the latest and greatest thing. Be practical.


    


         Special thanks to everyone that put up with me while I was learning to be a professional. I was a pathetic intern. 

Spread The Love, Share Our Article

Related Posts

23 Response to 33 Lessons for Software Industry Novices

July 11, 2011 at 9:34 AM

I think we were all pathetic interns once - great article.

Anonymous
July 13, 2011 at 5:35 AM

Like :)

July 13, 2011 at 6:52 AM

Meh. I agree with most of the point, but it seems to me that you've been working with asshats. Good article nonetheless, I would definitly follow most of these!

Anonymous
July 13, 2011 at 7:30 AM

Really good article!.

July 13, 2011 at 9:18 PM

Good stuff. The only one I feel compelled to argue with is #2. It's great to be self-sufficient but if we spend 10x the time not asking someone a question we'll look very inefficient. I generally ask for help if I can't find the answer in 3x the amount of time it would take someone else to answer my question.

The advice about not bothering a lead developer is a good one because even if they can easily answer your question they'll spend way more time explaining why you shouldn't have asked them the question.

July 13, 2011 at 9:49 PM

Locketine That's a great point.

I should have clarified, "This should be done in a sensible way". You shouldn't spend an entire work week trying to figure out where documentation is. As usual people should use their best judgement in deciding how much time to spend searching, before asking.

July 14, 2011 at 8:28 AM

Nice. But for #2, I'd rather a less experienced person come to me with a stupid question (from my perspective) then waste too much time searching for an answer or just make a bad assumption. I only get annoyed if they keep asking me the same question, over and over again.

And sometimes you have to ask a knowingly stupid question in order to high-lite the fact that everyone in the room is working with different underlying understandings. It's the only way to get to the root of the problem.

Paul.

Anonymous
July 16, 2011 at 3:34 PM

I have to agree with Alloy's assertion that you appear to have been working with toolbags.

That said, the advice is sound and applicable to more than the software industry.

July 16, 2011 at 3:40 PM

In regards to tool bags, I have to disagree. I think the people I worked with were trying hard to train me to be a good developer/employee. They probably could have more tactful, but I think they succeeded.

September 19, 2011 at 10:33 AM

I have to add just one: save those contacts. There must be hundreds of people I met earlier in my career who I've wanted to get in touch with for some reason or other later, but I never saved any contact information so too bad. Learn from my mistake.

LinkedIn etc. don't always help, and business cards aren't that much better except as handy pieces of scrap paper. Write down something yourself, as soon as you can, that might remind you ten years later where you met this person and why you thought they'd be worth keeping track of. Your ten-years-from-now self will thank you.

Anonymous
September 19, 2011 at 10:54 AM

Great article... very helpful... :):)

Anonymous
September 19, 2011 at 11:52 AM

This is really good stuff.
Thanks!

September 19, 2011 at 12:20 PM

As a lead developer I have to disagree with #2. I'm perfectly fine with answering any kind of question and I believe everyone else should be too. Sure, you might want to avoid bugging the same person over and over, but having to worry about the "pay scale" when asking questions to your peers doesn't make for a good work environment.

I think the saying should go: there isn't such a thing as a stupid question - but there is such a thing as a stupid *person*.

September 19, 2011 at 12:40 PM

thank you very much, it's a very helpful post.

September 19, 2011 at 2:01 PM

Great article indeed.
Thanks for sharing!

September 19, 2011 at 2:07 PM

Great article indeed.
Thanks for sharing!

Although I have to admit I don't completely agree with #2. Sometimes while working closely with others, it is faster for the whole team to share rising doubts. Everyone ends up benefiting from most of them since everyone has a different way to dealing with most of those doubts.
Just a thought, I know at least half of what I learned during my first job experiences (and still do) come from others; if they mention something I think is interesting, then I do research more about the topic. Else, how are you supposed to learn new stuff if you don't even know it's there?

Anonymous
September 19, 2011 at 2:46 PM

Cool but I disagree with #2 ... please don't make my developers lose half of the day searching for something someone could tell them in few seconds :)

September 19, 2011 at 5:46 PM

All in all a great list of skills to develop, but I would put #13 slightly differently. DO work on secret projects. But also try to sell the idea when you're far enough along. If someone likes the idea and tells you to run with it, you will be able to produce very quickly which always impresses.

Which leads me to an item that should be added to the list: don't use estimates for projects as a means to brag. Be realistic about how much time something would take and then pad it 30%.

Anonymous
September 19, 2011 at 9:52 PM

Interesting read. I tend to echo some of the sentiments about #2 found in the comments however I agree with the spirit of your advice. As a lead developer myself I would rather someone ask when they are in a tar pit rather than continue to sink along with the project which they are attached. The absolute worst thing to do though is nothing. Inaction is an action all the same and nothing flips the idiot bit faster than being known as that guy.

September 19, 2011 at 11:22 PM

Awesome article. I completely agree with you about #2, here's why:

(some background - I'm a novice developer. Well, kind of. I've been doing some kind of coding every day since 8th grade. I've done 4 internships and am taking a semester off school to work with a funded startup in SF. I still call myself a novice.)

Anyways, I agree with #2 because, from my experience, that's how I've learned. Young developers need those "bang your head against the wall" kind of moments. From my experience you don't need to know everything to get along way, but you need to know how to find it. Obviously don't waste away a whole day if there's someone that can spit the answer out in a few minutes. However, those moments where I've felt in over my head, only to find something buried deep in StackOverflow - that's where I recall them and commit them to memory.

Again, great article and awesome advice. Thank you!

Anonymous
September 20, 2011 at 12:20 AM

i have objection on something you say.

1. do secret project:-

In last month i trying to make a utility and big brother thing i make a clone of the thing they make.

later i stop them for that but tell me what i need to do when i really not make that clone.

2. Don't be a yes man

in mine case many time boss is right and i am wrong.

but in some case i am right and they are wrong.

when i say them they say me i am wrong and prove their
thing at a time. later they use what i say and never
say i am right even they use the thing i told.

what i need to say i am right in that case. if i say

this then they try to full stop on the topic.

September 21, 2011 at 1:53 AM

Nice.

Anonymous
August 3, 2012 at 4:47 AM

You sir have my respect, and thanks for sharing :D

Post a Comment