Incrementally Designing Architecture
Hello everyone!
I am sure a lot of scrum.org readers have a great experience with the Incremental Design. And I hope that you can share with me your answer for that question: How to be if I need to change the Architecture, but new changes will not compatible with the primary version. It means that I need change all old classes usages, or create the addition logic for the compatibility, when I leave both old and new version? May be I don't know other opportunities.
That topic I've created while reading the great book: "The Art of Agile Development" by James Shore and Shane Warden
If there were problems when revising the architecture, how would you know? Some problems might break the build, but others might be run-time incompatibilities. Is there an automated test harness which would then fail?
It's very simple we change BaseClass with a lots of dependencies and after that compilation of the project will be broken. And to fix that I have to change the every depending class. And unfortunately for all this work I need more time then 1 sprint. Maybe you know, how to be in that case?
It sounds like you need to gradually refactor the code using better design patterns. I'd suggest using a wrapper class and maybe dependency injection, for example. The wrapper would become the base class. It would support the old brittle contract, and also a new one that is better decoupled or encapsulated. Then you gradually wean the dependent classes away from their brittle relationships by refactoring a few of them each sprint.
I'm sure I've read something by Martin Fowler about this approach. In any case I'd google for his programming patterns as they are a good source of ideas.
Note that this will only address build dependencies. If you don't have an automated test harness in place, you can still get run-time errors, even with judicious refactoring.
Hi Ian!
Thanks a lot for advices. And can you give some tips for scrum master in that case. Should I learn different coding approaches and show it to my team or I appear the problem to the team(too much refactoring in one sprint) and they should solve it?
You should take this matter to the team so they can solve it, and help them. A Scrum Master should demonstrate servant-leadership.