@lemiorhan agile practice lead at iyzico developing software since 2001 worked at Sony, eBay/GittiGidiyor, ACM consultant, architect, mentor, developer founder of Software Craftsmanship Turkey ex community leader of Agile Turkey meetup.scturkey.org agileturkey.org dev.iyzipay.com
an exercise in managing complexity Jack W. Reeves What is Software Design? The C++ Journal Vol. 2, No. 2. 1992 http://user.it.uu.se/~carle/softcraft/notes/Reeve_SourceCodeIsTheDesign.pdf
coded and tested Testing is part of the process of refining the design Jack W. Reeves What is Software Design? The C++ Journal Vol. 2, No. 2. 1992 http://user.it.uu.se/~carle/softcraft/notes/Reeve_SourceCodeIsTheDesign.pdf
the needs of its populace. So!ware-intensive systems are like that. Grady Booch Developed UML Wrote foreword to “Design Patterns” and “Technical Debt” books Istanbul, Turkey Credit: European Space Imaging
etc.) Low Coupling High Cohesion Refactor namings (how) mailer.useGmailSmtpSendEmail (what) mailer.sendEmail (why) mailer.sendActivationEmail Reveal what you are doing or why you are doing, not how you are doing
SOFTWARE DESIGN Refactoring Automated Testing (Unit, Functional, etc.) Low Coupling High Cohesion Be aware of leaky abstractions. Do not expose details and limitations of its underlying implementation to its users that should ideally be hidden away.
Source Code Refactoring Automated Testing (Unit, Functional, etc.) Low Coupling High Cohesion and Code Review Pair Programming Pair prog makes you code cheaper due to spending less time in decision taking, bug fixing and debugging.
(Unit, Functional, etc.) Low Coupling High Cohesion and Code Review Pair Programming It’s not about code duplication, it’s about knowledge duplication. Don’t repeat yourself. Every piece of knowledge should have one and only one representation.
Coupling High Cohesion and Code Review Pair Programming Keep it SMALL classes, interfaces, responsibilities, methods, modules, components… use design pa!erns wisely
Coupling High Cohesion and Code Review Pair Programming these STOP Singletons? Sharing state Static & new keywords Framework slave coding Premature optimization Primitive obssession Huge upfront design Controling flows with exceptions or use them wisely