SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
1
2
Pete Goodliffe
                         pete@goodliffe.net
               http://www.goodliffe.net
Who is Pete?




                                              3
The
impact
of
      Specific

              design
on
a
         design

              system           techniques

              Learn
some        An
entire

              ways
to
          software

Our roadmap




              improve
our
        design

              software
           course
              designs                 1




                                              4
Learning
lessions
                      Design
Town
                              The
Messy

                              Metropolis

              So
what?
Our roadmap




                                           2




                                               5
Our roadmap




               So
what?


           3




6
So
what?



           7
So what?




8
So what?




9
What has design done for us?
                               ●   Ease of modification
                               ●   Ease of extension
                               ●
                                   Fit for purpose
                               ●   Ease of documentation


                               ●   Design quality is a sink or swim issue for
                                   software projects
                               ●   Some people/teams are inherently
                                   better at design than others



                                                                                10
●   Effects within software
                     –   Software quality
                     –   Developer sanity
                 ●   Influences outside software
                     –   Success of project
                     –   Team structure
Design matters




                     –   Morale
                     –   Company success




                                                   11
So
what?
Our roadmap




                         3




                             12
The
Messy

                         Metropolis

              So
what?
Our roadmap




                                      4




                                          13
●   These are comparable systems
                        ●   Similar size
                        ●
                            Both Linux-based
                            “Embedded” applications
A tale of two systems

                        ●


                        ●   Audio products
                        ●   C++
                        ●   Developed by “experienced”
                            programmers
                        ●   Programmers were designers
                        ●   Names have been changed to protect the
                            innocent/guilty
                                                                     14
The
Messy

Metropolis



             15
●   A project well under way when I joined
                ●   “Modern” C++ codebase, a few years old
                ●
                    Ouch!
                ●   Warning signs:
                    –   Code took a fantastically long time to learn
                    –   No obvious routes into the system
                    –   It was (broadly) clear what the product did,
First contact




                        but no one explained how it did it
                    –   Actually getting the code, and getting it to
                        build was a rite of passage



                                                                       16
●   Micro-level problems:
                    –   Messy, inconsistent code, with no style
                    –   Badly put together
                    –   No unifying concepts
                    –   Far to many bad code smells
Warning signs




                                                                  17
●   Macro-level problems:
                    –   Control flew around the system in
                        unfathomable ways
                    –   Data rarely kept near where it was used
                    –   Many baroque caching layers to mitigate this
Warning signs




                                                                       18
●   No one had a complete picture of system
                ●   No one actually knew how it worked!
                    –   A combination of luck and heroic
                        maintenance programmers
                ●   People only knew their own small areas
                ●   Naturally there was no documentation
Warning signs




                ●   Town planning disaster!
                ●
                    We needed a map



                                                              19
The map




20
The map




21
The map




22
●   Design problems went directly to the top
                          –   Development process
                          –   Company culture
                      ●   Code grown “organically” over time
Software archeology


                      ●
                          Had been given no architectural design

                      ●
                          A system never has no design

                      ●   Understandable given company history



                                                                     23
●   Hard to comprehend system
                       ●   Practically impossible to modify
                       ●
                           Bad design encouraged further bad design
Consequences: Design

                           –   Paths of least resistance
                       ●   New recruits stunned by complexity
                           –   Very high staff turnover
                       ●
                           System components not cohesive
                           –   Grab-bags of unrelated functionality
                           –   Hard to determine why a component existed
                           –   Hard to work out where particular
                               functionality was implemented
                       ●
                           Bugfixing nightmare!
                                                                           24
●   Functionality and data in the wrong place
                             –   “Core services” not in the core
Consequences: Layering
                             –   Why? Team dynamics! (Empire building)
                         ●   No clear layering
                             –   Bidirectional coupling
                             –   No “bottom” or “hub” or the system
                         ●       tight coupling
                         ●
                             Low-level testing impossible
                             –   No class unit tests
                             –   No component tests


                                                                         25
●   Design problems fed into code problems
                         –   Like no one bothered with design, no one
                             bothered with code standard
                         –   Duplication
Consequences: Code


                         –   No common libraries
                         –   No common idioms
                         –   No naming conventions
                         –   No common build system
                     ●   Why?
                         –   More software archeology...
                         –   An accidental conurbation
                         –   Know what you're designing
                                                                        26
●   Problems spilled out beyond development
                         team
                         –   Slow development cycle
                         –   Support engineers
Consequences: Team


                         –   External protocol
                         –   Intra-company politics (marketing, sales,
                             manufacturing)




                                                                         27
●   It headed in a downward spiral
                   ●   Very uneconomical to maintain
                   ●
                       Did not fulfil business objectives
                   ●   Thrown away
                   ●   Rewritten in C# on Windows
Where is it now?




                                                            28
The upshot of bad design   ●
                               Low quality product
                           ●   Inflexible system
                               –   Can't accommodate change
                               –   Can't add new functionality
                           ●   Pervasive code problems
                           ●   Infrequent releases
                           ●   Staffing problems
                           ●   Messy internal politics
                           ●
                               Lack of success
                           ●
                               Many painful headaches and late nights
                                                                        29
The
Messy

                         Metropolis

              So
what?
Our roadmap




                                      4




                                          30
Design
Town
                             The
Messy

                             Metropolis

              So
what?
Our roadmap




                                          5




                                              31
Design
Town



              32
●   Involved from very start
                ●   New team of capable programmers
                    –   Small team
                    –   Flat structure
                    –   No rivalry
                ●   Clear roadmap
                    –   Initial product
First contact




                    –   Future functionality
                ●   XP development



                                                      33
●   XP and design?

                      ●
                          YAGNI
eXtreme Programming

                      ●   Spikes




                                           34
●   Started with design!
              ●   Not a big up-front design
              ●
                  Identified main areas of functionality
              ●   Initial architecture
              ●   Core threading models
                                 User Interface
First steps




                               Control Components


                                   Audio Path


                               OS/Audio Codecs

                                                           35
●   Audio path as sub-architecture
                ●   Pipe and filter
                ●
                    Product configuration determines
                    individual audio path


                                    User Interface
                          A   B    C         D         E   F
First steps




                                  Control Components
              Audio file                                        Audio hardware

                                      Audio Path


                                  OS/Audio Codecs

                                                                                36
●   Other early choices:
                  –   Supporting libraries
                  –   Top-level file structure
                  –   Naming
                  –   “House” presentation style
                  –   Coding idioms
                  –   Choice of unit test framework
                  –   Infrastructure
First steps




                       ●
                           Source control
                       ●   Build system
                       ●
                           Continuous integration


              ●
                  These influenced design decisions
                                                      37
●   Helped to locate new functionality
                        –   With clear system overview...
                        –   New units of functionality consistently added
                            the the right place
                        –   Easy to find where existing functionality
                            implemented
The story unfolds



                        –   Easy to locate/fix bugs
                        –   Not always convenient
                             ●
                                 Made programmers work harder
                             ●
                                 Payoff: easier life later




                                                                            38
●   Entire system was consistent
                        –   Every decision was taken in the context of
                            the whole design
                        –   Done intentionally
                        –   Design always in view:
                                 All code produced fitted the design
The story unfolds



                             ●


                        –   Over entire life of system, things followed
                            original design




                                                                          39
●   Elegance at top level fed down to the
                        lower levels
                        –   At lowest level, code uniform and neat
                        –   Helped by
                             ●
                                 Pair programming
                             ●
                                 Code reviews
The story unfolds



                             ●   Code standards
                        –   No unusual surprises




                                                                     40
●   New areas of functionality appeared
                        –   Not a problem
                        –   Design (like code) malleable
                        –   Nothing is set in stone
                        –   Design must be changed when required
The story unfolds



                        –   Encouraged simple design
                        –   Consequence:
                             ●
                                 Code could grow rapidly
                             ●
                                 Code could maintain good internal structure




                                                                               41
●   (Unit) test everything
                        –   Change sections of software without breaking
                            everything else
                             ●
                                 Design town had major design changes
                        –   Shaping of the code design
                             ●
                                 Enforce good code structure
The story unfolds



                             ●   Loosely coupled: construct in a test harness
                             ●   Cohesive
                        –   Encouraged good APIs




                                                                                42
●   Quality control
                        –   Pair programming
                        –   Code reviews
                        –   Reviews ensured changes did not sully design
The story unfolds



                    ●   Programmers took responsibility for
                        the design




                                                                           43
●   Pragmatic approach to design
                        –   Deadlines lead to corner-cutting
                        –   Technical debt
                        –   Scheduled for later revision
The story unfolds



                    ●   Timescales worked in favour
                        –   Not too long
                        –   Not too short




                                                               44
●   Team dynamics followed code design
                        –   No one “owned” code
                        –   Everyone expected to write high-quality code
                        –   Closely co-operating colleagues
                        –   Conway's Law
The story unfolds




                    ●   Design was sufficiently well documented
                        –   Architecture overview
                        –   Code as documentation
                             ●   Naming conventions
                             ●   Structure (namespaces, nested classes,
                                 enums, etc)
                        –   Doxygen
                                                                           45
●   New team members could enter project
                        easily

                    ●   Code still enjoyable to work with
                        –   Low turnover of members
The story unfolds



                        –   Programmers taking ownership




                                                               46
User Interface


                                                Control Components
                                                User Interface
One We Made Earlier


                                                                                      External
                                                    Audio Path
                                                   Control                            controllers


                                                 OS/Audio Codecs
                                Storage
                                                         Audio path
                              management



                                  A        B       C        D         E   F
                                               OS/Audio codecs


                      Audio file                                               Audio hardware


                                                                                                47
●   Still in use
                   ●   Still being developed
                   ●
                       Still changing
                   ●   Not perfect
Where is it now?




                                               48
Design
Town
                             The
Messy

                             Metropolis

              So
what?
Our roadmap




                                          5




                                              49
Learning
lessions
                      Design
Town
                              The
Messy

                              Metropolis

              So
what?
Our roadmap




                                           6




                                               50
●   Design matters
                             –   It can go spectacularly wrong
                             –   It can go spectacularly right
                             You've got to design on purpose
The moral of the story

                         ●


                             –   This does not mean a big up-front design


                         ●
                             Good design
                             –   Leads to better code
                             –   Leads to better teams
                             –   Leads to success


                                                                            51
●   Good design comes from:
                             –   Actually doing up-front design (as much as
                                 required)
                             –   Quality and experience of designers
The moral of the story


                             –   Keeping design in view at all times
                             –   Team being given/talking responsibility
                             –   Not being afraid of changing design
                             –   Team:
                                  ●
                                      Having the right people on the team
                                  ●
                                      Size of the team
                                  ●   Health of working relationships
                             –   Making decisions at the right time
                             –   Good project management
                                                                              52
Fin


      53
Your turn




54
●   What's the best system you've ever seen?
                –   What have you learnt from it?
                –   What were the consequences of this design:
                     ●   Inside code
                     ●   Outside code
            ●   What's the worst system you've ever seen
Your turn




                –   What have you learnt from it?
                –   What were the consequences of this design:
                     ●   Inside code
                     ●
                         Outside code
                                                                 55
Epilogue




56
“Its useful and fun and it'll
                     make       you     a     better
                     programmer.” Jez Higgins “A
                     goldmine of information
                     that     every     professional
                     software developer should be
                     aware of.” Tim Penhey “A
                     terrific     resource       for
                     developers wanting to learn or
                     teach good coding practices ...
 . . . buy it now!




                     deserves a place on the
                     bookshelf.” Frazzled Dad blog
                     “A unique and practical
                     guide to being a professional
                     programmer in the modern
                     workplace.” Andrew Burrows
                     “Readable, engaging, and
                     even funny ... It's the book I
                     wish I'd had when I started
                     work as a programmer.quot; Steve
                     Love “A 'must read' for any
The book




                     programmer who wants to be
                     a better programmer” Linux
                     Tutorial “This is exactly the
                     kind of book you should give
                     raw recruits.” Jon Jagger




                                                       57
Any questions?




58
© 2008 Pete Goodliffe. All rights reserved. No part of this document may be reproduced without the author's prior permission.
                                                                                                                                59
Version info:


Slides version:   0.5
Last updated:     2008-03-12
Copyright:        © 2008 Pete Goodliffe




                                          60

Contenu connexe

En vedette

Front end development - Les 01
Front end development - Les 01Front end development - Les 01
Front end development - Les 01Atticus
 
Setting Up Your Local Dev Environment
Setting Up Your Local Dev EnvironmentSetting Up Your Local Dev Environment
Setting Up Your Local Dev EnvironmentRick Umali
 
Lightning Talk - Contribute to Open Source
Lightning Talk - Contribute to Open SourceLightning Talk - Contribute to Open Source
Lightning Talk - Contribute to Open SourceSidu Ponnappa
 
Internetix 2009 Brian Final Version Jhb
Internetix 2009 Brian Final Version JhbInternetix 2009 Brian Final Version Jhb
Internetix 2009 Brian Final Version JhbBrian Pinnock
 
Search Marketing Analytics
Search Marketing AnalyticsSearch Marketing Analytics
Search Marketing AnalyticsIan Lurie
 
Experts On Credit Crisis
Experts On Credit CrisisExperts On Credit Crisis
Experts On Credit CrisisAvinash Singh
 
2015 update: SIP and IPv6 issues - staying Happy in SIP
2015 update: SIP and IPv6 issues - staying Happy in SIP2015 update: SIP and IPv6 issues - staying Happy in SIP
2015 update: SIP and IPv6 issues - staying Happy in SIPOlle E Johansson
 
SEO blogging best practices
SEO blogging best practicesSEO blogging best practices
SEO blogging best practicesIan Lurie
 
#HBASummit 2014 - Metrics that Matter
#HBASummit 2014 - Metrics that Matter#HBASummit 2014 - Metrics that Matter
#HBASummit 2014 - Metrics that MatterMichael Street
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to GitRick Umali
 
Small Business and Social Media
Small Business and Social MediaSmall Business and Social Media
Small Business and Social MediaShashi Bellamkonda
 
No Bragging and Nothing Boring: 11 Ways to Share Your Impact
No Bragging and Nothing Boring: 11 Ways to Share Your ImpactNo Bragging and Nothing Boring: 11 Ways to Share Your Impact
No Bragging and Nothing Boring: 11 Ways to Share Your ImpactKivi Leroux Miller
 

En vedette (16)

Front end development - Les 01
Front end development - Les 01Front end development - Les 01
Front end development - Les 01
 
Shopping bags
Shopping bagsShopping bags
Shopping bags
 
Setting Up Your Local Dev Environment
Setting Up Your Local Dev EnvironmentSetting Up Your Local Dev Environment
Setting Up Your Local Dev Environment
 
Lightning Talk - Contribute to Open Source
Lightning Talk - Contribute to Open SourceLightning Talk - Contribute to Open Source
Lightning Talk - Contribute to Open Source
 
Internetix 2009 Brian Final Version Jhb
Internetix 2009 Brian Final Version JhbInternetix 2009 Brian Final Version Jhb
Internetix 2009 Brian Final Version Jhb
 
Search Marketing Analytics
Search Marketing AnalyticsSearch Marketing Analytics
Search Marketing Analytics
 
Experts On Credit Crisis
Experts On Credit CrisisExperts On Credit Crisis
Experts On Credit Crisis
 
2015 update: SIP and IPv6 issues - staying Happy in SIP
2015 update: SIP and IPv6 issues - staying Happy in SIP2015 update: SIP and IPv6 issues - staying Happy in SIP
2015 update: SIP and IPv6 issues - staying Happy in SIP
 
SEO blogging best practices
SEO blogging best practicesSEO blogging best practices
SEO blogging best practices
 
Clocker 1.0.0 Preview
Clocker 1.0.0 PreviewClocker 1.0.0 Preview
Clocker 1.0.0 Preview
 
Mexic
MexicMexic
Mexic
 
#HBASummit 2014 - Metrics that Matter
#HBASummit 2014 - Metrics that Matter#HBASummit 2014 - Metrics that Matter
#HBASummit 2014 - Metrics that Matter
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to Git
 
Locuinta
LocuintaLocuinta
Locuinta
 
Small Business and Social Media
Small Business and Social MediaSmall Business and Social Media
Small Business and Social Media
 
No Bragging and Nothing Boring: 11 Ways to Share Your Impact
No Bragging and Nothing Boring: 11 Ways to Share Your ImpactNo Bragging and Nothing Boring: 11 Ways to Share Your Impact
No Bragging and Nothing Boring: 11 Ways to Share Your Impact
 

Similaire à Pete Goodliffe A Tale Of Two Systems

Building Killer Communities And Taking Confluence Social
Building Killer Communities And Taking Confluence SocialBuilding Killer Communities And Taking Confluence Social
Building Killer Communities And Taking Confluence SocialAtlassian
 
But I'm a Bloody Designer!
But I'm a Bloody Designer!But I'm a Bloody Designer!
But I'm a Bloody Designer!Mike Stenhouse
 
The 7 Sins of Software Engineers in HEP
The 7 Sins of Software Engineers in HEPThe 7 Sins of Software Engineers in HEP
The 7 Sins of Software Engineers in HEPIoannis Baltopoulos
 
Thailand SPIN: Series 3: กุญแจสู่ความสำเร็จในการเขียนโปรแกรมให้ตรงกับความต้อง...
Thailand SPIN: Series 3: กุญแจสู่ความสำเร็จในการเขียนโปรแกรมให้ตรงกับความต้อง...Thailand SPIN: Series 3: กุญแจสู่ความสำเร็จในการเขียนโปรแกรมให้ตรงกับความต้อง...
Thailand SPIN: Series 3: กุญแจสู่ความสำเร็จในการเขียนโปรแกรมให้ตรงกับความต้อง...Software Park Thailand
 
Challenges In Managing Embedded Product Development
Challenges In Managing Embedded Product DevelopmentChallenges In Managing Embedded Product Development
Challenges In Managing Embedded Product DevelopmentAtul Nene
 
Hey open source, don’t forget the user! - by Chad Kieffer
Hey open source,  don’t forget the user! - by Chad KiefferHey open source,  don’t forget the user! - by Chad Kieffer
Hey open source, don’t forget the user! - by Chad Kiefferdmthompson
 
Evaluation Of The Final Product
Evaluation Of The Final ProductEvaluation Of The Final Product
Evaluation Of The Final Productmiketh16
 
Just In Time Scalability Agile Methods To Support Massive Growth Presentation
Just In Time Scalability  Agile Methods To Support Massive Growth PresentationJust In Time Scalability  Agile Methods To Support Massive Growth Presentation
Just In Time Scalability Agile Methods To Support Massive Growth PresentationLong Nguyen
 
Role of Retrospectives in Success of Agile Project
Role of Retrospectives in Success of Agile ProjectRole of Retrospectives in Success of Agile Project
Role of Retrospectives in Success of Agile ProjectNaresh Jain
 
How to build vibrant communities
How to build vibrant communitiesHow to build vibrant communities
How to build vibrant communitiesPeter H. Reiser
 
Metadata to create and collect
Metadata to create and collectMetadata to create and collect
Metadata to create and collectvrt-medialab
 
Internet World Web2
Internet World Web2Internet World Web2
Internet World Web2BobsNJ
 
Umw Software Engineering Guest Lecture 05 Sep2007
Umw Software Engineering Guest Lecture 05 Sep2007Umw Software Engineering Guest Lecture 05 Sep2007
Umw Software Engineering Guest Lecture 05 Sep2007David Wood
 
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...Michela Taufer
 
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...Michela Taufer
 
Wiki Design Luke W
Wiki Design  Luke WWiki Design  Luke W
Wiki Design Luke WRoss Lawley
 
Ibrussels For Stedenlink
Ibrussels For StedenlinkIbrussels For Stedenlink
Ibrussels For StedenlinkKoen Delvaux
 
Introdução à Arquitetura de Software
Introdução à Arquitetura de SoftwareIntrodução à Arquitetura de Software
Introdução à Arquitetura de SoftwareRodrigo Veiga
 

Similaire à Pete Goodliffe A Tale Of Two Systems (20)

A Tale Of Two Systems
A Tale Of Two SystemsA Tale Of Two Systems
A Tale Of Two Systems
 
Building Killer Communities And Taking Confluence Social
Building Killer Communities And Taking Confluence SocialBuilding Killer Communities And Taking Confluence Social
Building Killer Communities And Taking Confluence Social
 
But I'm a Bloody Designer!
But I'm a Bloody Designer!But I'm a Bloody Designer!
But I'm a Bloody Designer!
 
The 7 Sins of Software Engineers in HEP
The 7 Sins of Software Engineers in HEPThe 7 Sins of Software Engineers in HEP
The 7 Sins of Software Engineers in HEP
 
Thailand SPIN: Series 3: กุญแจสู่ความสำเร็จในการเขียนโปรแกรมให้ตรงกับความต้อง...
Thailand SPIN: Series 3: กุญแจสู่ความสำเร็จในการเขียนโปรแกรมให้ตรงกับความต้อง...Thailand SPIN: Series 3: กุญแจสู่ความสำเร็จในการเขียนโปรแกรมให้ตรงกับความต้อง...
Thailand SPIN: Series 3: กุญแจสู่ความสำเร็จในการเขียนโปรแกรมให้ตรงกับความต้อง...
 
Challenges In Managing Embedded Product Development
Challenges In Managing Embedded Product DevelopmentChallenges In Managing Embedded Product Development
Challenges In Managing Embedded Product Development
 
Hey open source, don’t forget the user! - by Chad Kieffer
Hey open source,  don’t forget the user! - by Chad KiefferHey open source,  don’t forget the user! - by Chad Kieffer
Hey open source, don’t forget the user! - by Chad Kieffer
 
Evaluation Of The Final Product
Evaluation Of The Final ProductEvaluation Of The Final Product
Evaluation Of The Final Product
 
Just In Time Scalability Agile Methods To Support Massive Growth Presentation
Just In Time Scalability  Agile Methods To Support Massive Growth PresentationJust In Time Scalability  Agile Methods To Support Massive Growth Presentation
Just In Time Scalability Agile Methods To Support Massive Growth Presentation
 
Role of Retrospectives in Success of Agile Project
Role of Retrospectives in Success of Agile ProjectRole of Retrospectives in Success of Agile Project
Role of Retrospectives in Success of Agile Project
 
How to build vibrant communities
How to build vibrant communitiesHow to build vibrant communities
How to build vibrant communities
 
Metadata to create and collect
Metadata to create and collectMetadata to create and collect
Metadata to create and collect
 
Internet World Web2
Internet World Web2Internet World Web2
Internet World Web2
 
Umw Software Engineering Guest Lecture 05 Sep2007
Umw Software Engineering Guest Lecture 05 Sep2007Umw Software Engineering Guest Lecture 05 Sep2007
Umw Software Engineering Guest Lecture 05 Sep2007
 
Jobs In Foss
Jobs In FossJobs In Foss
Jobs In Foss
 
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...
 
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...
ExSciTecH: Expanding Volunteer Computing to Explore Science, Technology, and ...
 
Wiki Design Luke W
Wiki Design  Luke WWiki Design  Luke W
Wiki Design Luke W
 
Ibrussels For Stedenlink
Ibrussels For StedenlinkIbrussels For Stedenlink
Ibrussels For Stedenlink
 
Introdução à Arquitetura de Software
Introdução à Arquitetura de SoftwareIntrodução à Arquitetura de Software
Introdução à Arquitetura de Software
 

Plus de deimos

Aspect Orientated Programming in Ruby
Aspect Orientated Programming in RubyAspect Orientated Programming in Ruby
Aspect Orientated Programming in Rubydeimos
 
Randy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural PrinciplesRandy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural Principlesdeimos
 
Remy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQueryRemy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQuerydeimos
 
Ola Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The JvmOla Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The Jvmdeimos
 
Joe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand DwrJoe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand Dwrdeimos
 
Aslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec BddAslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec Bdddeimos
 
Venkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In GroovyVenkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In Groovydeimos
 
Venkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic LanguagesVenkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic Languagesdeimos
 
Udi Dahan Intentions And Interfaces
Udi Dahan Intentions And InterfacesUdi Dahan Intentions And Interfaces
Udi Dahan Intentions And Interfacesdeimos
 
Tim Mackinnon Agile And Beyond
Tim Mackinnon Agile And BeyondTim Mackinnon Agile And Beyond
Tim Mackinnon Agile And Beyonddeimos
 
Steve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And SerendipitySteve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And Serendipitydeimos
 
Stefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The WebStefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The Webdeimos
 
Stefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To RestStefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To Restdeimos
 
Rod Johnson Cathedral
Rod Johnson CathedralRod Johnson Cathedral
Rod Johnson Cathedraldeimos
 
Mike Stolz Dramatic Scalability
Mike Stolz Dramatic ScalabilityMike Stolz Dramatic Scalability
Mike Stolz Dramatic Scalabilitydeimos
 
Matt Youill Betfair
Matt Youill BetfairMatt Youill Betfair
Matt Youill Betfairdeimos
 
Paul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA RegistryPaul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA Registrydeimos
 
Ola Bini Evolving The Java Platform
Ola Bini Evolving The Java PlatformOla Bini Evolving The Java Platform
Ola Bini Evolving The Java Platformdeimos
 
Neal Gafter Java Evolution
Neal Gafter Java EvolutionNeal Gafter Java Evolution
Neal Gafter Java Evolutiondeimos
 
Markus Voelter Textual DSLs
Markus Voelter Textual DSLsMarkus Voelter Textual DSLs
Markus Voelter Textual DSLsdeimos
 

Plus de deimos (20)

Aspect Orientated Programming in Ruby
Aspect Orientated Programming in RubyAspect Orientated Programming in Ruby
Aspect Orientated Programming in Ruby
 
Randy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural PrinciplesRandy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural Principles
 
Remy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQueryRemy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQuery
 
Ola Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The JvmOla Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The Jvm
 
Joe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand DwrJoe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand Dwr
 
Aslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec BddAslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec Bdd
 
Venkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In GroovyVenkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In Groovy
 
Venkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic LanguagesVenkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic Languages
 
Udi Dahan Intentions And Interfaces
Udi Dahan Intentions And InterfacesUdi Dahan Intentions And Interfaces
Udi Dahan Intentions And Interfaces
 
Tim Mackinnon Agile And Beyond
Tim Mackinnon Agile And BeyondTim Mackinnon Agile And Beyond
Tim Mackinnon Agile And Beyond
 
Steve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And SerendipitySteve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And Serendipity
 
Stefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The WebStefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The Web
 
Stefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To RestStefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To Rest
 
Rod Johnson Cathedral
Rod Johnson CathedralRod Johnson Cathedral
Rod Johnson Cathedral
 
Mike Stolz Dramatic Scalability
Mike Stolz Dramatic ScalabilityMike Stolz Dramatic Scalability
Mike Stolz Dramatic Scalability
 
Matt Youill Betfair
Matt Youill BetfairMatt Youill Betfair
Matt Youill Betfair
 
Paul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA RegistryPaul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA Registry
 
Ola Bini Evolving The Java Platform
Ola Bini Evolving The Java PlatformOla Bini Evolving The Java Platform
Ola Bini Evolving The Java Platform
 
Neal Gafter Java Evolution
Neal Gafter Java EvolutionNeal Gafter Java Evolution
Neal Gafter Java Evolution
 
Markus Voelter Textual DSLs
Markus Voelter Textual DSLsMarkus Voelter Textual DSLs
Markus Voelter Textual DSLs
 

Dernier

TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 

Dernier (20)

TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 

Pete Goodliffe A Tale Of Two Systems

  • 1. 1
  • 2. 2
  • 3. Pete Goodliffe pete@goodliffe.net http://www.goodliffe.net Who is Pete? 3
  • 4. The
impact
of
 Specific
 design
on
a
 design
 system techniques Learn
some An
entire
 ways
to
 software
 Our roadmap improve
our
 design
 software
 course designs 1 4
  • 5. Learning
lessions Design
Town The
Messy
 Metropolis So
what? Our roadmap 2 5
  • 6. Our roadmap So
what? 3 6
  • 10. What has design done for us? ● Ease of modification ● Ease of extension ● Fit for purpose ● Ease of documentation ● Design quality is a sink or swim issue for software projects ● Some people/teams are inherently better at design than others 10
  • 11. Effects within software – Software quality – Developer sanity ● Influences outside software – Success of project – Team structure Design matters – Morale – Company success 11
  • 13. The
Messy
 Metropolis So
what? Our roadmap 4 13
  • 14. These are comparable systems ● Similar size ● Both Linux-based “Embedded” applications A tale of two systems ● ● Audio products ● C++ ● Developed by “experienced” programmers ● Programmers were designers ● Names have been changed to protect the innocent/guilty 14
  • 16. A project well under way when I joined ● “Modern” C++ codebase, a few years old ● Ouch! ● Warning signs: – Code took a fantastically long time to learn – No obvious routes into the system – It was (broadly) clear what the product did, First contact but no one explained how it did it – Actually getting the code, and getting it to build was a rite of passage 16
  • 17. Micro-level problems: – Messy, inconsistent code, with no style – Badly put together – No unifying concepts – Far to many bad code smells Warning signs 17
  • 18. Macro-level problems: – Control flew around the system in unfathomable ways – Data rarely kept near where it was used – Many baroque caching layers to mitigate this Warning signs 18
  • 19. No one had a complete picture of system ● No one actually knew how it worked! – A combination of luck and heroic maintenance programmers ● People only knew their own small areas ● Naturally there was no documentation Warning signs ● Town planning disaster! ● We needed a map 19
  • 23. Design problems went directly to the top – Development process – Company culture ● Code grown “organically” over time Software archeology ● Had been given no architectural design ● A system never has no design ● Understandable given company history 23
  • 24. Hard to comprehend system ● Practically impossible to modify ● Bad design encouraged further bad design Consequences: Design – Paths of least resistance ● New recruits stunned by complexity – Very high staff turnover ● System components not cohesive – Grab-bags of unrelated functionality – Hard to determine why a component existed – Hard to work out where particular functionality was implemented ● Bugfixing nightmare! 24
  • 25. Functionality and data in the wrong place – “Core services” not in the core Consequences: Layering – Why? Team dynamics! (Empire building) ● No clear layering – Bidirectional coupling – No “bottom” or “hub” or the system ● tight coupling ● Low-level testing impossible – No class unit tests – No component tests 25
  • 26. Design problems fed into code problems – Like no one bothered with design, no one bothered with code standard – Duplication Consequences: Code – No common libraries – No common idioms – No naming conventions – No common build system ● Why? – More software archeology... – An accidental conurbation – Know what you're designing 26
  • 27. Problems spilled out beyond development team – Slow development cycle – Support engineers Consequences: Team – External protocol – Intra-company politics (marketing, sales, manufacturing) 27
  • 28. It headed in a downward spiral ● Very uneconomical to maintain ● Did not fulfil business objectives ● Thrown away ● Rewritten in C# on Windows Where is it now? 28
  • 29. The upshot of bad design ● Low quality product ● Inflexible system – Can't accommodate change – Can't add new functionality ● Pervasive code problems ● Infrequent releases ● Staffing problems ● Messy internal politics ● Lack of success ● Many painful headaches and late nights 29
  • 30. The
Messy
 Metropolis So
what? Our roadmap 4 30
  • 31. Design
Town The
Messy
 Metropolis So
what? Our roadmap 5 31
  • 33. Involved from very start ● New team of capable programmers – Small team – Flat structure – No rivalry ● Clear roadmap – Initial product First contact – Future functionality ● XP development 33
  • 34. XP and design? ● YAGNI eXtreme Programming ● Spikes 34
  • 35. Started with design! ● Not a big up-front design ● Identified main areas of functionality ● Initial architecture ● Core threading models User Interface First steps Control Components Audio Path OS/Audio Codecs 35
  • 36. Audio path as sub-architecture ● Pipe and filter ● Product configuration determines individual audio path User Interface A B C D E F First steps Control Components Audio file Audio hardware Audio Path OS/Audio Codecs 36
  • 37. Other early choices: – Supporting libraries – Top-level file structure – Naming – “House” presentation style – Coding idioms – Choice of unit test framework – Infrastructure First steps ● Source control ● Build system ● Continuous integration ● These influenced design decisions 37
  • 38. Helped to locate new functionality – With clear system overview... – New units of functionality consistently added the the right place – Easy to find where existing functionality implemented The story unfolds – Easy to locate/fix bugs – Not always convenient ● Made programmers work harder ● Payoff: easier life later 38
  • 39. Entire system was consistent – Every decision was taken in the context of the whole design – Done intentionally – Design always in view: All code produced fitted the design The story unfolds ● – Over entire life of system, things followed original design 39
  • 40. Elegance at top level fed down to the lower levels – At lowest level, code uniform and neat – Helped by ● Pair programming ● Code reviews The story unfolds ● Code standards – No unusual surprises 40
  • 41. New areas of functionality appeared – Not a problem – Design (like code) malleable – Nothing is set in stone – Design must be changed when required The story unfolds – Encouraged simple design – Consequence: ● Code could grow rapidly ● Code could maintain good internal structure 41
  • 42. (Unit) test everything – Change sections of software without breaking everything else ● Design town had major design changes – Shaping of the code design ● Enforce good code structure The story unfolds ● Loosely coupled: construct in a test harness ● Cohesive – Encouraged good APIs 42
  • 43. Quality control – Pair programming – Code reviews – Reviews ensured changes did not sully design The story unfolds ● Programmers took responsibility for the design 43
  • 44. Pragmatic approach to design – Deadlines lead to corner-cutting – Technical debt – Scheduled for later revision The story unfolds ● Timescales worked in favour – Not too long – Not too short 44
  • 45. Team dynamics followed code design – No one “owned” code – Everyone expected to write high-quality code – Closely co-operating colleagues – Conway's Law The story unfolds ● Design was sufficiently well documented – Architecture overview – Code as documentation ● Naming conventions ● Structure (namespaces, nested classes, enums, etc) – Doxygen 45
  • 46. New team members could enter project easily ● Code still enjoyable to work with – Low turnover of members The story unfolds – Programmers taking ownership 46
  • 47. User Interface Control Components User Interface One We Made Earlier External Audio Path Control controllers OS/Audio Codecs Storage Audio path management A B C D E F OS/Audio codecs Audio file Audio hardware 47
  • 48. Still in use ● Still being developed ● Still changing ● Not perfect Where is it now? 48
  • 49. Design
Town The
Messy
 Metropolis So
what? Our roadmap 5 49
  • 50. Learning
lessions Design
Town The
Messy
 Metropolis So
what? Our roadmap 6 50
  • 51. Design matters – It can go spectacularly wrong – It can go spectacularly right You've got to design on purpose The moral of the story ● – This does not mean a big up-front design ● Good design – Leads to better code – Leads to better teams – Leads to success 51
  • 52. Good design comes from: – Actually doing up-front design (as much as required) – Quality and experience of designers The moral of the story – Keeping design in view at all times – Team being given/talking responsibility – Not being afraid of changing design – Team: ● Having the right people on the team ● Size of the team ● Health of working relationships – Making decisions at the right time – Good project management 52
  • 53. Fin 53
  • 55. What's the best system you've ever seen? – What have you learnt from it? – What were the consequences of this design: ● Inside code ● Outside code ● What's the worst system you've ever seen Your turn – What have you learnt from it? – What were the consequences of this design: ● Inside code ● Outside code 55
  • 57. “Its useful and fun and it'll make you a better programmer.” Jez Higgins “A goldmine of information that every professional software developer should be aware of.” Tim Penhey “A terrific resource for developers wanting to learn or teach good coding practices ... . . . buy it now! deserves a place on the bookshelf.” Frazzled Dad blog “A unique and practical guide to being a professional programmer in the modern workplace.” Andrew Burrows “Readable, engaging, and even funny ... It's the book I wish I'd had when I started work as a programmer.quot; Steve Love “A 'must read' for any The book programmer who wants to be a better programmer” Linux Tutorial “This is exactly the kind of book you should give raw recruits.” Jon Jagger 57
  • 59. © 2008 Pete Goodliffe. All rights reserved. No part of this document may be reproduced without the author's prior permission. 59
  • 60. Version info: Slides version: 0.5 Last updated: 2008-03-12 Copyright: © 2008 Pete Goodliffe 60