Revisiting Refactoring


is costly and does not come for free. A pure upfront design technique always fails over time.

As of yet, there is no silver bullet. We know that designs and architectures will change as they fail to meet the requirements of a changing world - so we will have to refactor. At the same time, we need to realize that not all refactoring is easy or cheap. Where does that leave us? It leaves us with doing the best we can; individually finding the balance of YAGNI and upfront design. It depends on each one of us individually.

Good judgment comes from experience - and experience comes from bad judgment. Refactoring is only as good as the developer performing the refactoring. For that matter, design and architecture are only as good as the developer creating them. The difference is, that with refactoring we have an option of learning from our mistakes and changing the design. It is not perfect - and we should be aware of its shortfalls - but it is better than the alternative.

About the Author

Amr Elssamadisy is a software development practitioner at Gemba Systems, helping both small and large development teams learn new technologies, adopt and adapt appropriate Agile development practices, and focus their efforts to maximize the value they bring to their organizations. Gemba focuses on issues such as personal agility, team-building, communication, feedback, and all of the other soft skills that distinguish excellent teams. Amr's technical background and experience (going back to 1994) in C/C++, Java/J2EE, and .NET, allows him to appreciate the problems of and support development teams 'in the trenches.' Amr is also the author of Patterns of Agile Practice Adoption: The Technical Cluster , an editor for the AgileQ at InfoQ, a contributor to the Agile Journal and a frequent presenter at software development conferences.  


[ii] You Ain't Gonna Need It (YAGNI)  tells you, the developer, not to design for any requirement that is not at hand. It tells you that if you write tests diligently (usually via TDD) you will be able to refactor the code later and add the necessary complexity.


About the author

TechWell Contributor's picture TechWell Contributor

The opinions and positions expressed within these guest posts are those of the author alone and do not represent those of the TechWell Community Sites. Guest authors represent that they have the right to distribute this content and that such content is not violating the legal rights of others. If you would like to contribute content to a TechWell Community Site, email

AgileConnection is one of the growing communities of the TechWell network.

Featuring fresh, insightful stories, is the place to go for what is happening in software development and delivery.  Join the conversation now!