Top ten things ten years of professional software development has taught me
By Andre
I was reading this top ten list yesterday, and I thought I can probably
come up with my own list of things no-one told me before I started
developing software for money. This is my list.
Object orientation is much harder than you think
* Maybe it's just me, but coming from Computer Science class I thought
that OO was easy. I mean, how hard can it be to create classes that mimic
the real world? It turns out that it's pretty hard. Ten years later, I'm
still learning how to model properly. I wish I spent more time reading up on
OO and design patterns. Good modeling skills are worth a lot to every
development team.
* The difficult part of software development is 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 the other
developers. Work on your soft skills.
* 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 worked a lot of
overtime, 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.
* If everything is equally important, then nothing is important
The 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? Like Dave Farell says: "The devil is in the details,
but exorcism is in implementation, not theory."
* Dive really deep into something, but don't get hung up
Chris <www.hedgate.net/> and I spent a lot of time getting into the
real deep parts of SQL Server. It was great fun and I learned a lot from it,
but after some time I realized that knowing that much didn't really help me
solve the business' problems. An example: I know that at the table level,
SQL Server will not take an IU lock - it will only take a IX lock. This is a
performance tweak, since most of the time, the IU lock will have to be
escalated into a IX lock anyway. To find this, I spent countless days
experimenting, I read loads of material and talked to Microsoft people at
conferences. Have I ever had any use of this knowledge. Nope.
* 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
A year after I started on my first job, we merged with another company.
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. They had too much
of an advantage on me, I figured.
Nowadays, working with great people doesn't make me feel bad at all. I just
feel I have the chance of a lifetime to learn. I ask questions and I try
really hard to understand how my colleagues come to the conclusions they do.
This is why I joined ThoughtWorks. 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.
*
* source:
www.taylor.se/blog/2007/03/22/top-ten-things-ten-years-of-professiona
l-software-development-has-taught-me/