How to become a professioal developer (1)
In this post I will talk about how to become a professional developer, whether you are a freelance developer or a team member inside of a company we are all unprofessional until proven other wise.
I was very impressed and took great notes from Uncle Bob before writing this post, but this post also comes from the heart after seeing more than a couple of teams struggling, freelancers loosing clients and more…
This post will be written point after point, I will explain each of these points in my language and give you examples from real life, where I saw things went wrong and how you can improve them in your own micro-cosmus.
OK, let’s see, you are a developer. Freelance or you are working inside a team in a big company, this doesn’t really matter, all you should do is follow these steps and I guarantee you will become better at whatever it is that you do.
Let’s start shall we?
Discipline
Uncle bob really talks about this a lot, I really agree with him and I think this is where it all starts, you should adopt a series of disciplines. Something like I write a test every day to get better at TDD (Roy Oshrove calls this TDD Kata).
I personally have my own discipline wall in my home office, this wall contains post-it notes with stuff like “I will always deliver on time”, “Answer every question like it’s the first time you answer it” and more.
I’m not saying any of these will fit you but I think you know what will fit you, whether it’s a TDD Kata or notes to yourself or anything that pops into your mind.
Short Iterations
I always work in short iterations with my clients, I never take a 3 month project and deliver it after 3 month time it is due. A project schedule looks like this. SC –> Sign contract
SC + 4 –> Detailed design document
SC + 6 –> Approval of design document
SC + 12 –> Admin system wireframe
SC + 15 –> Website wireframe
It goes on like this until 3 months are due and the project is done and ready, the client is happy why???
Well, the client is happy because he could and did give out comments about the progress at any point, he has the feeling (true) that this website is his and not done by an outsider, this website I created has the client’s say in it and it shows.
This of course is not only true for websites, I do this the same with Flex applications and API’s I create.
Note: This does not mean you overwhelm your client with details about what query method to use, using Nhibernate or Subsonic, keep the minor technical details to yourself
Don’t get stuck
Sometime I see whole teams in a company sitting and telling me at a consulting meeting “QA did not complete the report” so we don’t know what is wrong with the system and we can’t continue.
In other cases I see developers sit for hours waiting for another team of developers to finish a module they have to use to continue work.
The only problem is that same developer / team of developers have hundreds of other things to do, from bugs in their bug tracking system to tests they still did not implement and more.
Do not sit around doing nothing, whatever you do it will be better than doing nothing, even if you write an MVC application to learn MVC it’s better than nothing.
I swear to you I have seen developers email something like this:
I cannot continue the work I’m supposed to do because XXX did not supply the API for the YYY module, I will continue work tomorrow, hopefully I will have the module ready by then.
Well, do you think after this module is ready this developer can notify “finished” on this project, I don’t think so, in-fact, I consulted to that company for a couple of month’s so I know that for a fact.
Avoid Coupling
Seperate yourself and your teams from other developers and other teams, do not allow for your work to be dependent on any one or anything else other then you and your team, if a software design from management includes module coupling between you and another team something is wrong, no good can come out of this, tests will not be written and work will never be done on time.
I’ve seen a developer from a company that got help from an outsourced developer, he sent the developer the source code and then declared he cannot continue because the other developer must finish, that is not true, if this company would have used version control then they could have let the outsourced developer write a patch and then commit it into their application.
This is also true when talking about programming but I will not get into that in this post.
Well, chew on this for a day or two, I will publish the next post in the series in a couple of days, If you have any comment I would love it if you comment here on this blog or twit me @kensodev