Introduction

This page contains information about my knowledge of the Agile Development Process. While this process encompasses a wide range of concepts, I will just list what I have learned along the way and what and how I have applied these techniques within a working environment.

eXtreme Programming and other Agile Methodologies

My experience with the Agile Development Process started when I heard about eXtreme Programming,(XP), from Kent Beck. This lead me to his seminal book Extreme Programming Explained that I read and which sparked a curiousity that hasn’t abated since then. After reading this first book, I searched for other books with similar themes. This effort lead me to other authors like Martin Roberts, Mary and Tom Poppendick, Martin Fowler, Alistair Cockburn and many others. I became enamored with anything and everything related to agile development.

I have then read about the different concepts from using TDD, pair programming, FDD, Scrum, Lean Software Development, and many other ideas. I have then taken this knowledge and applied it within a working environment as much as possilble. For instance, I have applied the concept of pair programming as a mentoring and learning process throughout my career. This has also lead me to use the same concepts when implementing a new design by discussing it with fellow colleagues. While I have advocated the concept of TDD by creating software that can be tested in a standalone matter. I’ve been on teams that have used some of the concepts of Scrum like performing standup meetings and retrospectives. There are also other techniques that I have integrated within my development process that was not dependent on anyone. I have been using the Refactoring process extensively to help me improve the product that I am working on. The use of this process provided the required steps to generate confidence in me and management that my changes are solid. This was done by creating tests for all of the different features that are being refractored with the current code. Then I would go ahead and refractor the code and insure that the code passes all of the tests that were created for the original code. This is how I have used this technique to improve a products code base.

While the number of techniques associated with agile development is pretty extensive and includes different types of techniques that are similar yet different. The ability to be able to use all of these techniques is not realistic but the ability to use some of the techniques is always possible. I do see myself continuing to use these techniques since I have seen and experienced their benefits for the team and organization in general. I have seen first hand how these techniques can benefit a team and an organization when working for Riverbed. Our team implemented several agile concepts like scrum standup meetings, retrospectives, continuous integration, testing, pair programming and other techniques. For instance, our group brought in the use of CD/CI using Jenkins to build and test our product on a daily bases. The integration of this tool led other groups to ask about what we do and saw this technique expand to other groups within the organizations. I have then seen that the only way that these types of concepts will be used within an organization is with the support and openness of management to these ideas. This does not mean that management should just accept whenever a team implements these concepts. The important aspect is to be able to see if these solutions work within their organizations. Our team leader was always open to new ideas and was willing to see if they work but we also understood that if it doesn’t work that we shouldn’t continue to use those techniques. This is a very important view that any team should follow. If it doesn’t work then move on to somethine else.

The above are some of my experiences using agile development techniques that I have learned throughout my career. I look forward to continue to use these techniques because of the value they bring to an organizations, especially within the context of the current exponential changes happening within the computer field. Business can not afford to stand still within the current environment, doing so will cause these companies to be left behind which they can’t afford.

As I mentioned above, this all started with the book from Kent Beck and has continued since then. That book solidified what I thought was intuitively necessary for projects to be successful. I have then read several other books on this subject and do have my favorites that I would recommend others to read. The following list of books are the ones that I believe will offer a good foundation for those that want to learn about agile concepts and techniques.

The above list is not an exhaustive list of the books that I enjoyed but they do contain the ones that I’ve found helpful and that are well written books. If you are interested in what other authors or books that I have read, you are welcome to send me an email to the one that is mentioned in footnote of this page.

I will end this section by talking about some of the different agile techniques that I have come to appreciate. Let me start with a combination of techniques that has provided the most from all the other techniques that I have used. This is the combination of Refactoring and TDD. The combination of these two techniques have provided a confidence that cannot be matched in anyother way. What this offered was the ability to be bold when refactoring code since the addition of tests for the current implementation will provide the confidence that the applied changes are correct. This does not imply that this will remove all possible inconsistencies but it will definitely reduce the possibilities of including new bugs. There is also the possiblities that the combination of TDD and refactoring will reveal subtle bugs that were not uncovered during the orignal implementation.

In conclusion, the above is some of the techniques that I have come to enjoy and apply within a working environment. This does not imply that that is all there is to it. It only means that the above are some that I have used but it does not imply that I would not be open to other techniques in the future. The main thing is that one needs to be keep in mind that agility also implies being open minded. This is what I think is the most important point of using agile techniques. This doesn’t imply that you just use the next big thing blindly, you need to investigate it to insure that it does offer an improvement over what you are currently using.