The Artima Developer Community
Sponsored Link

Evolutionary Design
A Conversation with Martin Fowler, Part III
by Bill Venners
November 18, 2002

<<  Page 2 of 4  >>


Refactoring and Upfront Design

Bill Venners: How does refactoring change the role of upfront design?

Martin Fowler: The reason you do planned design is because you think it's too hard to change the code. Because when you change the code, you break things and introduce many bugs. However, if you have both unit tests and build the disciplined technique of refactoring on top of the tests, you can make changes much more efficiently and faster, and you're much less likely to introduce defects.

Bill Venners: What is the role of upfront design in the context of refactoring and the other enabling practices? Do you still do some upfront design?

Martin Fowler: I think there's still room for some upfront design, but not a lot. People like Kent Beck and Ron Jeffries say it is eliminated. In a way they are right; you could build even a complex system purely through evolutionary design. But there are cases where you'll go faster with some upfront design. So I would disagree with the idea that you don't put your database in before you evolve your need for a database. I would make an initial decision about the presence of a database and go from there, but I would still evolve most of the design.

Bill Venners: Is there a difference between a well-factored program and a well-designed program?

Martin Fowler: There really isn't a difference in terms of what they are, but maybe in terms of emphasis. Design is about factoring--dividing a program into well-separated parts. To me, well-factored conveys more about what the design feels like when you are looking at it or working with it.

<<  Page 2 of 4  >>

Sponsored Links

Copyright © 1996-2018 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use