Monday, October 22, 2007

The Beginners Guide to the Corporate World

So You are ready to take a plunge into the big-bad corporate world. Well, thought my small stint at the office and studying them closely might just be of any help to you.
A few days back I completed 1 year in the industry and the few lessons which I learned in the process are definitely true for any industry you land in and will surely be beneficial to you all. The lessons:
Learn to say no
When I started working, I was very eager to please. This meant that I had a hard time saying no to things people asked of me. I tried to work a lot, and still didn’t finish everything that was asked of me. The result was disappointment from their side, and almost burning out on my part.
If you never say no, your yes is worth very little. Commit to what you can handle, and if people keep asking you for more, make it very explicit that this would mean not doing something else. What I did was to have a list of stuff that I needed to do on a piece of paper with me. When someone asked for something, I showed them the list and asked what I should bump to have time to help them. This allowed me to say no in a nice way.
Communication
And that’s communication with persons, not socket programming. Now and then you do run into a tricky technical problem, but it’s not at all that common. Much more common is misunderstandings between you and the project manager, between you and the customer and finally between you and your colleagues. Work on your soft skills.
If everything is equally important, then nothing is importantThe business likes to say that all the features are as crucial. They are not. Push back and make them commit. It’s easier if you don’t force them to pick what to do and what not to do. Instead, let them choose what you should do this week. This will let you produce the stuff that brings value first. If all else goes haywire, at least you’ve done that.
Don’t over-think a problem
I can spend whole days designing things in front of the white board. That doesn’t mean it will be any better, it just means it will be more complicated. I don’t mean to say you shouldn’t design at all, just that the implementation will quickly show me stuff I didn’t think of anyway, so why try to make it perfect?

Object Oriented Designing is not easy!
Maybe it’s just me, but coming from Computer Science class I thought that OO was easy. The highest marks-fetcher and the dumbest teacher used to teach the subject. I mean, how hard can it be to create classes that mimic the real world? It turns out that it’s pretty hard. One year later, I’m still learning how to model properly and see the relationships between different tables. I wish I spent more time reading up on OO and design patterns. Good modeling skills are worth a lot to every development team.

Learn about the other parts of the software development machine
It’s really important to be a great developer. But to be a great part of the system that produces software, you need to understand what the rest of the system does. How do the QA people work? What does the project manager do? What drives the business analyst? This knowledge will help you connect with the rest of the people, and will grease interactions with them. Ask the people around you for help in learning more. What books are good? Most people will be flattered that you care, and willingly help you out. A little time on this goes a really long way.

Your colleagues are your best teachers
An year after I started on my first job, I was moved to another team. Suddenly I had a lot of much more talented and experienced people around me. I remember distinctly how this made me feel inferior and stupid. I studied hard, reading book after book but I still didn’t catch up. No matter how much you try to read and search, the knowledge which your colleagues can give you is invaluable and you will never find in any teaching manual. I ask questions and I try really hard to understand how my colleagues come to the conclusions they do. See your peers as an asset, not competition.
It all comes down to working software
No matter how cool your algorithms are, no matter how brilliant your database schema is, no matter how fabulous your whatever is, if it doesn’t scratch the clients’ itch, it’s not worth anything. Focus on delivering working software, and at the same time prepare to continue delivering software using that code base and you’re on the right path.

Some people are assholes
Most of the time, most of the people around you are great. You learn from them, and they learn from you. Accomplishing something together is a good feeling. Unfortunately, you will probably run into the exceptions. People that because of something or other are plain old mean. Demeaning bosses. Lying colleagues. Stupid, ignorant customers. Don’t take this too hard. Try to work around them and do what you can to minimize the pain and effort they cause, but don’t blame yourself. As long as you stay honest and do your best, you’ve done your part.