How to develop high quality software? What are the key/fundamental principles for software design? What is the relationship between principles, bad smells, design patterns, and refactoring? Based on 3 years of research on software design principles and design smells, this talk shares key insights on developing high-quality software in industrial contexts.

By attending this session, you’ll get a clear understanding of the key role that design principles play in developing software. Further, you’ll know how to apply design principles in practice. So, don’t miss it!  

 
1 favorite thumb_down thumb_up 4 comments visibility_off  Remove from Watchlist visibility  Add to Watchlist
 

Outline/structure of the Session

* Why care about design principles? -- 10 minutes 
* Exercise on refactoring smells to patterns -- 15 minutes 
* What exactly is the relationship between principles, smells, refactoring, and patterns? --5 minutes 
* What are the fundamental and key software design principles that govern software architecture and design? -- 10 minutes 
* Q & A - 5 minutes 
 

Learning Outcome

* You’ll get a clear understanding of the key role that design principles play in developing software 

* Relationship between principles, smells, refactoring, and smells

* Key and fundamental design principles and a good idea of how to apply it in practice in day-to-day development  

Target Audience

Developers, leads, programmers, basically anyone who gets their hand dirty coding on a day-to-day basis!

schedule Submitted 3 years ago

Comments Subscribe to Comments

comment Comment on this Proposal
  • Joel Tosi
    By Joel Tosi  ~  2 years ago
    reply Reply

    Hi SG,

         Is your session focused on learning patterns or learning how to apply them / when to apply / how to balance patterns in effective product discovery, etc?  Please help me understand where in that spectrum - from pure patterns / SOLID on one side to pragmatic designs and emergent design on the other side - where does this session fit?

    Best,

    Joel

    • Joel Tosi
      By Joel Tosi  ~  2 years ago
      reply Reply

      Hi SG,

         Friendly reminder that we need a response as it will help us make a decision.

      Best,

      Joel

      • Ganesh Samarthyam
        By Ganesh Samarthyam  ~  2 years ago
        reply Reply

        Hi Joel, 

        I am sorry - just came back from vacation and saw your mail. Sorry for the late reply. Really appreciate your patience and for checking with me.

        Best regards,

        Ganesh  

    • Ganesh Samarthyam
      By Ganesh Samarthyam  ~  2 years ago
      reply Reply

      Hi Joel, 

      Thanks for an excellent question. It fits under pragmatic / emergent design (through refactoring).  

      I know that the presentation is not self-explanatory, so here is a quick summary of the flow: 

      Unlike technology that keeps changing in a fast pace, underlying design principles evolve in a slower phase. Also, design principles are the key for developing high-quality software. With this in mind, I motivate participants to look at design aspects. I take an example design scenario in a cloud based application, and show how Big UpFront Design (BUFD) or overengineering doesn't work. Rather, evolutionary design - start from something simple and functional and evolve through refactoring - works in practice. With a couple of examples, I show how patterns result from application of design principles. With that I introduce Booch's design principles (Abstraction, Encapsulation, Modularization, and Hierarchy) - these are fundamental principles and are more general than SOLID principles. Example: Liskov's Substitution Principle (LSP) can be viewed in terms of applying the principle of Hierarchy. The example based approach also helps us understand how design principles influence software qualities (such as changeability, extensibility, etc). 

      In other words, this presentation answers the high-level questions such as relationship between principles, smells, and refactoring. And why emergent design is a good approach for applying design priciples in practice and for creating high-quality software.

      As developers, we give want to keep up-to-date with technology that we have Fear Of Missing Out (FOMO)! Technology is only a tool - it is not a solution by itself. With this session, I hope to at least bring the focus back to something more fundamental, i.e., design principles and how it can be applied in practice through refactoring.