• How long should a daily scrum take? • How can I fit more work in my two weeks cycle? • What does is take go become a certified SCRUM master? What this talk is not about
Martin Fowler • “Refactoring: Improving the Design of Existing Code” • “Patterns of Enterprise Application Architecture“ • Popularized the Dependency Injection pattern
Note: Please compare the books listed here with your weekly “Which books should I read to become a better programmer” Twitter/Reddit/Hacker News thread. ;) These are very good programmers!
• Let’s plan for multiple releases from the very beginning. Multiple releases are easier to manage and deliver value sooner. • We can respond to the changing needs and inputs of business/management
• If it takes two days to create a build… • If it takes three days of manual QA to create a build... • If it takes one special person to create the build… • If it takes this one five year old computer that no one dares to update, because this one version of the dependency does not compile on a new OS to create the build….
•We cannot work effectively in a world of defects •To be able iterate, the software needs to be nearly bug-free all the time •We need to check everything, all the time
Refactoring Code refactoring is the process of restructuring existing computer code without changing its external behavior. – Wikipedia Refactoring happens within minutes, not within months. Again, in order to refactor efficiently, you need to be able to check everything all the time.
Hurrying will slow you down • Worse: The timing! It will slow you down when you least need it, close to the end of the project. • Dirty code slows you down. If code is clean, the next features go in smoothly. If it gets dirty, everything takes just a bit longer.
Defects create defects Folgefehler: Your math teacher lied to you! If your code is faulty or has side-effects, new code building upon this code will be even more faulty with more side-effects. Fixing, maintaining or extending these layers of faulty code will take even more time!
If your tech is not agile, you can not be agile! Automated Builds Always be able to ship! Automated Testing Everything must work all the time! Refactoring Design must improve continually, to make future changes easy!
Responsibility Would you let your [product owner, scrum master, whatever] decide on: • Code Editor • Programming Language • Design Patterns Probably not!
So why let them decide on requirements of technical quality? The need for refactoring? The test coverage? Can this really part of their role? Do the really know? Can they really decide?
So why let them decide on requirements of technical quality? The need for refactoring? The test coverage? Can this really part of their role? Do the really know? Can they really decide? No! Only you. You are the coder. You are the expert.
Responsibility and authority are aligned • The team itself must decide how much work it can accomplish in the next cycle. • The team itself is responsible for the quality of the solution.
It’s hard Producing good software is very very complicated. It takes a lot of effort and care and passion. It takes experts like you to make sure that all of this is worthwhile.