Tuesday, November 22, 2011

Extra Credit Special Blog

This blog is about an article Is Design Dead? written by Martin Fowler.
While reading about Extreme Programming, I was confused about the role of design in Extreme Programming. This article sheds some light on the design principles in Extreme Programming. This article also explains the differences between planned and evolutionary design.
Next semester is my last semester at UT. After I graduate, I am going to work, and so I am interested in reading articles that have relevance to design and programming practices in the industry. This article falls in that category.
            According to Martin Fowler, the more common design technique is evolutionary design.  As the name suggests, design is continuously evolving and changing as the system grows. However, this means that virtually there is no design, since design is not constant.  This leads to the “code and fix” nightmare which means that as the project progresses in time, expense of fixing bugs grows exponentially. As a contrast to evolutionary design, planned design is thought of in advance, before the start of the project. Often the team designing the project is different from the team implementing the design. However, planned design has its disadvantages too. The most important disadvantage is that requirements do change. The customer never knows what he wants and will always want more features. I experienced this first hand during my internship this summer. The customer demanded that certain features should be implemented, that had no hardware support. It fell upon us, the software team to design a solution to the customer demands. Thus, I agree with the statement that requirements are always changing, and that it is not viable to fix upon a constant design at the start of the project.
            After I finished reading the first section of the paper, I was a bit worried.  He mentioned two design patterns, and both of them seem to have grave problems. However, there was still half the paper to go, and extreme programming to look forward to. I was interested to read on.
            According to Fowler, XP advocates evolutionary design. From what I read about XP, this seems to be true.  Now, to me it seemed weird that such a flaky design pattern would be adopted by Extreme Programming, since XP seems to have quite a few followers. However, Fowler tried to explain this. He said that the principles of Extreme Programming mitigate the risk of evolutionary design. The risk of evolutionary design is that as the project gets older, it becomes more expensive to make changes. However, XP practices of Testing, Continuous Integration and Refactoring flatten this change curve.          
            This again builds on what I thought about XP in the first place. For Extreme Programming to work, all the practices of XP need to be followed. If not, then extreme programming won’t work. Simple design is a requirement of Extreme Programming.
            Design Patterns are reusable solutions to common problems in software design. Fowler advocates the use of Design Patterns in Extreme Programming too. He advises extreme programmers to invest time in learning about patterns, concentrating on how to implement patterns in their simplest form, and to be able to remove patterns if they aren’t performing their job.  I think that this is in general good advice, to follow, whatever type of programming you are doing.  Professor Downing touched upon some design patterns during lecture last week, and also showed us a couple of books to read on design patterns. I’m interested to read one of those at least over the winter break.
            In conclusion, I want to reiterate what Martin Fowler suggested was Extreme Programming’s take on design. XP design looks for skills like refactoring, a strong knowledge of patterns, knowing how to communicate the design to the programmers. XP design depends on knowing that decisions are going to change in the future, and that code should be as clear and simple as possible.
            I think this paper helped me understand design principles in general, and how to reconcile design with extreme programming. It gave me a deeper understanding of extreme programming, and helped make me ready to face the workplace.

No comments:

Post a Comment