Being a developer for 8 years, I went through the classic path of a green newbie knowing nothing, to a more mature developer aware of the flaws, till the current stage where I realize that I wasted too much time on too many things that are not important, when important things are not new and shiny, but old and proved by the time. Waterfall, Spiral, Agile – all titles, what I want to share is the experience I had for the past a year+.
Agile or not, as a developer you quickly realize that there’s a good code, bad code, and smelly code. The first two are simple to distinguish. The last one, smelly, is not. Personally, I had absolutely no idea how to determine smelly code, besides just ‘sensing’ it.
I started my career as a single developer with pre-designed and assigned to me tasks. Thanks goodness that was short. Right after that, I worked in pair. Well, at that time I didn’t know I was pairing, since it was more ‘master’ and ‘teacher’ arrangement of things. Now looking back it made total sense – I had a chance to “learn how to shave on someone else’s beard”. Knowledge transfer, team effort, mutual design and implementation. The theory I have is that, thanks to that start, I was able to continue and constantly question myself “am I doing the right thing in the right manner”.
Journey into Agile for myself started at the end of 2007, when I took the Nothing But .NET training course and got exposed to the methodologies and concepts that are not floating a lot in the traditional mainstream development. I learned and realized that software is there to resolve real life problems, and it’s a tool, not a privilege. The “developer-centric” world collapsed for me, and the new world of the “business-centric” has taken place. I must admit, that I am not entirely converted, yet know that going the right way. How? Again, same feeling that led me to realization that pair-programming is a better model for development, that having confidence in the code is as important as the code itself (aka tests), that team is all about individuals and not just progress, and much more.
Latest project I am currently involved in is a remarkable opportunity to get to the next level. Working along with 3 brilliant developers (David Morgantini, Jason Lindermann, and Mike Hesse), implementing agile in practice makes me realize and understand better what I was reading all the way along, but was not capable to experience. Pairing, pragmatism, continuous design decision making, refactoring, trade-offs, testing, self-organized team, done-done, and much more – it all comes alive once you actually do it. “The Art of Agile Development” book authors said that first you have to entirely embrace agile methodology, and once you know it (rather that interpretate what it should be), only after that you can mix and match methodologies. But first be committed to know agile. Anyone knows what agile is? A-a-a-a-a-a!
Agile, IMHO, is an echo system. Developers, management, business people, all related and interconnected. To know how to balance it all, provide the maximum value from the resources that are available, with constant intention of improvement implemented rapidly in reality – all together represent just one of the Agile sides. Many other sides to learn remain. Realization of that is the right step in the right direction. My recommendation would be:
- Strive to self-improvement
- Surround yourself with people you want to be with
- Challenge what you do and how you do it
- Be honest to yourself and others on what you understand and don’t
- Don’t be afraid to learn – it is not weakness, but strength
- Go with your feeling – if it feels right, it cannot be wrong, but when it feels wrong, it obviously is
- Realize, that even as a software developer, you are a unit to function in a social environment and learn to deal with that