SlideShare a Scribd company logo
1 of 29
Designing for Tomorrow,
   Delivering Today

          Frank Rydzewski
     Software Architect, iAware




                                  1
Delivery        Design

• Quality       • Encapsulation
• Testing       • Abstraction
• Performance   • Testability
• Timelines     • Long-Term Bias
• Sacrifice      • Glorious “Perfection”

                                          2
Warning: Philosophical Stuff Ahead




http://xkcd.com/220/
                                                    3
What Are Your
 Priorities?


                4
Don’t even think about shipping without...

  • Error Handling
  • Logging
  • Measuring
  • i18n
  • Testing
  • Documentation

                                             5
The “Perfect” API
•   Nearly an art form

•   Very Important, but “not always”

    •   Are you really writing an important API?

    •   “Better” APIs tend to be intuitive, clear, concise

•   Focus on what is visible to consumers

•   API might be more than methods in classes

•   Packaging solution may allow high levels of
    “forgiveness” for “bad” design




                                                             6
“What If” and “Can’t Happen”
•   Ask as many “what ifs” as you can

    •   Handle all answerable outcomes

    •   e.g. what if a service call fails?

•   Don’t waste too much time on “Can’t Happen”
    issues but be sure to handle them gracefully

    •   e.g.. Database will “NEVER” return null for a
        value, which is true until the day it happens




                                                        7
The World’s Problems are
              Not Yours
•   Task: Displaying a graph of well-defined values

    •   Solve that first

    •   Then prioritize any unrelated issues or
        improvements uncovered during
        development

•   Avoid the temptation to “dig more holes”

•   Manage “Scope Creep”



                                                     8
The Day After Tomorrow

• Don’t over-engineer based on guesses
• Design to be flexible and adaptable
• Release equals Support
• Half implemented solutions just make
  everything confusing




                                         9
Clarity FTW
•   A nice, clean solution is way easier to hand off
    to the “next class”

•   Bugs stick out in clear code

•   Passing around an array of multi-dimensional
    arrays of makes you cool, but with the wrong
    crowd

•   Complex interactions make everything more
    difficult

•   You’re the only one who can support it



                                                       10
Change is Constant

• Cliche but true
• Requirements change all the time. Don’t
  live in a fantasy world
• Get ready to throw away that glorious API
  you spent 4 weeks “perfecting”
• Expect change when designing software


                                              11
Make Tomorrow Easier



                       12
Good Practices Lead to Good Designs




http://xkcd.com/292/
                                                  13
Abstraction & Encapsulation

“The single most important factor that
distinguishes a well-designed module from a
poorly designed one is the degree to which
the module hides its internal data and other
implementation details from other modules.”
                             -Joshua Bloch




                                               14
Chaos




http://www.flickr.com/photos/kelp/4894023263/
                                                       15
Order




http://www.flickr.com/photos/kelp/4894889826
                                                      16
Abstraction
•   Reducing visible chaos

•   Creating your own API to consolidate or simplify
    access to another system/service

•   Generally is tailored to your specific needs, rather
    than directly consuming something more generic

•   Can be satisfied by any number of potential
    implementors

•   If you’re just duplicating an existing API, be sure that’s
    the right approach

•   Everything isn’t worthy of the effort - don’t overdo it



                                                                 17
????????




http://www.etsy.com/listing/62735793/original-snes-super-nintendo-controller
                                                                                     18
12 well-defined inputs




            Not possible to tell the system “Z” was pressed

http://en.wikipedia.org/wiki/File:Snes_control.jpg
                                                                             19
Encapsulation
• Enforce the rules of your design/contract
  and control what is exposed
• Manage (hide) complexity
• Can help you avoid tough decisions about
  exposing API that isn’t ready for prime time
• Don’t rely on documentation to prevent
  use - disallow use with scoping/exporting




                                                 20
What scares you?
• Things you can’t control
 • External systems
 • Buggy code
 • Unclear APIs
• Things that you know will change soon
• Subsystems that you didn’t have time to
  properly design



                                            21
Everything is a “service”
• View external APIs / systems like they are
  just another service
• Stay decoupled
• Create an abstraction layer to encapsulate
  calls as you would any service
• Define your contract and create an
  implementation that uses the external API /
  service to fulfill




                                                22
Are you too good for your home?

• “Risky” code can be given its own “home”
• Don’t be afraid to create new projects in
  order to encapsulate things you don’t trust
• ...but use your best judgement to avoid
  10,000 jars in your assembly




                                                23
Avoid the Release
    Waterfall


                    24
Testing
• White-box, check.
• Black-box, check.
• Expected exception from a service
  implementation that I can’t ever re-create?
• Bad data that can “never” be returned?
• Mock implementations FTW.
• Design the proper abstractions up front


                                                25
Know Your Dependencies
• What do you depend on and why?
• What versions cause joy/pain?
• Which pieces are tightly coupled and which
  can be abstracted?
• Don’t get surprised by a new version
• Test against upgraded dependencies early


                                               26
Releasing / Deploying
• More jars = more “fun”
• Release when ready vs “at the end”
 • more difficult than it sounds
 • temptation is to wait “in case”
• Always diff your end states
 • You should be intimately aware of what is
    changing (versions, additions, removals)



                                               27
Installing / Upgrading
•   Will any given change/feature cause any
    difficulty in installation?

    •   is it worth it?

    •   can we design around it?

•   What does the client need to do to use the
    new version?

    •   Automate as much as possible

    •   May need additional functionality to support



                                                       28
Questions?




http://xkcd.com/327/
                                    29

More Related Content

What's hot

Seven Jobs You Should Be Running #sqlsat126
Seven Jobs You Should Be Running #sqlsat126Seven Jobs You Should Be Running #sqlsat126
Seven Jobs You Should Be Running #sqlsat126Mike Hillwig
 
Everything You Know is Not Quite Right Anymore: Rethinking Best Practices to ...
Everything You Know is Not Quite Right Anymore: Rethinking Best Practices to ...Everything You Know is Not Quite Right Anymore: Rethinking Best Practices to ...
Everything You Know is Not Quite Right Anymore: Rethinking Best Practices to ...Dave Olsen
 
The DevOps Journey at bwin.party
The DevOps Journey at bwin.partyThe DevOps Journey at bwin.party
The DevOps Journey at bwin.partyKelly Looney
 
Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...Peter Gfader
 
DevOps Picc12 Management Talk
DevOps Picc12 Management TalkDevOps Picc12 Management Talk
DevOps Picc12 Management TalkMichael Rembetsy
 
Automated testing DrupalCamp in Asheville
Automated testing DrupalCamp in AshevilleAutomated testing DrupalCamp in Asheville
Automated testing DrupalCamp in AshevillePromet Source
 
Devops at Startup Weekend BXL
Devops at Startup Weekend BXLDevops at Startup Weekend BXL
Devops at Startup Weekend BXLKris Buytaert
 
The StartUp Agency - A Case Study on CFPB
The StartUp Agency - A Case Study on CFPBThe StartUp Agency - A Case Study on CFPB
The StartUp Agency - A Case Study on CFPBGovLoop
 
React, London JS Meetup, 11 Aug 2015
React, London JS Meetup, 11 Aug 2015React, London JS Meetup, 11 Aug 2015
React, London JS Meetup, 11 Aug 2015Stuart Harris
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous DeliveryJez Humble
 
DrupalCon 2013 Making Support Fun & Profitable
DrupalCon 2013 Making Support Fun & ProfitableDrupalCon 2013 Making Support Fun & Profitable
DrupalCon 2013 Making Support Fun & ProfitablePromet Source
 
Are You Really Using Kanban?
Are You Really Using Kanban?Are You Really Using Kanban?
Are You Really Using Kanban?Tom Cudd
 
DevOps for Drupal: Why We Cook With Chef
DevOps for Drupal: Why We Cook With ChefDevOps for Drupal: Why We Cook With Chef
DevOps for Drupal: Why We Cook With ChefPromet Source
 
Devops Devops Devops, at Froscon
Devops Devops Devops, at FrosconDevops Devops Devops, at Froscon
Devops Devops Devops, at FrosconKris Buytaert
 
14 Habits of Great SQL Developers
14 Habits of Great SQL Developers14 Habits of Great SQL Developers
14 Habits of Great SQL DevelopersIke Ellis
 
Continuously Deploying Culture: Scaling Culture at Etsy - Velocity Europe 2012
Continuously Deploying Culture: Scaling Culture at Etsy - Velocity Europe 2012Continuously Deploying Culture: Scaling Culture at Etsy - Velocity Europe 2012
Continuously Deploying Culture: Scaling Culture at Etsy - Velocity Europe 2012Patrick McDonnell
 
Moving From Infrastructure Automation To True DevOps
Moving From Infrastructure Automation To True DevOpsMoving From Infrastructure Automation To True DevOps
Moving From Infrastructure Automation To True DevOpsXebiaLabs
 

What's hot (20)

Seven Jobs You Should Be Running #sqlsat126
Seven Jobs You Should Be Running #sqlsat126Seven Jobs You Should Be Running #sqlsat126
Seven Jobs You Should Be Running #sqlsat126
 
Everything You Know is Not Quite Right Anymore: Rethinking Best Practices to ...
Everything You Know is Not Quite Right Anymore: Rethinking Best Practices to ...Everything You Know is Not Quite Right Anymore: Rethinking Best Practices to ...
Everything You Know is Not Quite Right Anymore: Rethinking Best Practices to ...
 
The DevOps Journey at bwin.party
The DevOps Journey at bwin.partyThe DevOps Journey at bwin.party
The DevOps Journey at bwin.party
 
Team work
Team workTeam work
Team work
 
Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...
 
DevOps Picc12 Management Talk
DevOps Picc12 Management TalkDevOps Picc12 Management Talk
DevOps Picc12 Management Talk
 
Automated testing DrupalCamp in Asheville
Automated testing DrupalCamp in AshevilleAutomated testing DrupalCamp in Asheville
Automated testing DrupalCamp in Asheville
 
Devops at Startup Weekend BXL
Devops at Startup Weekend BXLDevops at Startup Weekend BXL
Devops at Startup Weekend BXL
 
DevOps Note 20120224
DevOps Note 20120224DevOps Note 20120224
DevOps Note 20120224
 
The StartUp Agency - A Case Study on CFPB
The StartUp Agency - A Case Study on CFPBThe StartUp Agency - A Case Study on CFPB
The StartUp Agency - A Case Study on CFPB
 
React, London JS Meetup, 11 Aug 2015
React, London JS Meetup, 11 Aug 2015React, London JS Meetup, 11 Aug 2015
React, London JS Meetup, 11 Aug 2015
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
DevOps game lego
DevOps game legoDevOps game lego
DevOps game lego
 
DrupalCon 2013 Making Support Fun & Profitable
DrupalCon 2013 Making Support Fun & ProfitableDrupalCon 2013 Making Support Fun & Profitable
DrupalCon 2013 Making Support Fun & Profitable
 
Are You Really Using Kanban?
Are You Really Using Kanban?Are You Really Using Kanban?
Are You Really Using Kanban?
 
DevOps for Drupal: Why We Cook With Chef
DevOps for Drupal: Why We Cook With ChefDevOps for Drupal: Why We Cook With Chef
DevOps for Drupal: Why We Cook With Chef
 
Devops Devops Devops, at Froscon
Devops Devops Devops, at FrosconDevops Devops Devops, at Froscon
Devops Devops Devops, at Froscon
 
14 Habits of Great SQL Developers
14 Habits of Great SQL Developers14 Habits of Great SQL Developers
14 Habits of Great SQL Developers
 
Continuously Deploying Culture: Scaling Culture at Etsy - Velocity Europe 2012
Continuously Deploying Culture: Scaling Culture at Etsy - Velocity Europe 2012Continuously Deploying Culture: Scaling Culture at Etsy - Velocity Europe 2012
Continuously Deploying Culture: Scaling Culture at Etsy - Velocity Europe 2012
 
Moving From Infrastructure Automation To True DevOps
Moving From Infrastructure Automation To True DevOpsMoving From Infrastructure Automation To True DevOps
Moving From Infrastructure Automation To True DevOps
 

Viewers also liked

Evaluation one
Evaluation oneEvaluation one
Evaluation oneJenW19
 
Target audience member profile
Target audience member profileTarget audience member profile
Target audience member profileLaura Fussey
 
E.Tarik Olian-CV3
E.Tarik Olian-CV3E.Tarik Olian-CV3
E.Tarik Olian-CV3Tarik Olian
 
Kosmo - Zon Penjual Bantu Peniaga Tempatan page 1
Kosmo - Zon Penjual Bantu Peniaga Tempatan page 1Kosmo - Zon Penjual Bantu Peniaga Tempatan page 1
Kosmo - Zon Penjual Bantu Peniaga Tempatan page 1Sean Oh
 
EE Prof. Henrique Bertolucci
EE Prof. Henrique BertolucciEE Prof. Henrique Bertolucci
EE Prof. Henrique BertolucciJaqueline Machado
 
HAP Energy Modeling Certificate
HAP Energy Modeling CertificateHAP Energy Modeling Certificate
HAP Energy Modeling CertificateAhmed Eltagoury
 
IMAPS 2003 Manuscript - E
IMAPS 2003 Manuscript - EIMAPS 2003 Manuscript - E
IMAPS 2003 Manuscript - EDavid Stark
 
Materi pkn bab 2
Materi pkn bab 2Materi pkn bab 2
Materi pkn bab 2DEVY0088
 
ROI Focused Mobile Marketing for Retailers
ROI Focused Mobile Marketing for RetailersROI Focused Mobile Marketing for Retailers
ROI Focused Mobile Marketing for RetailersNoteCloud
 
Büyük selçuklular
Büyük selçuklularBüyük selçuklular
Büyük selçuklularElifnurB
 
Top reasons customers choose SugarCRM over salesforce
Top reasons customers choose SugarCRM over salesforceTop reasons customers choose SugarCRM over salesforce
Top reasons customers choose SugarCRM over salesforceJan Sysmans
 

Viewers also liked (17)

Mi (1)
Mi  (1)Mi  (1)
Mi (1)
 
chinco ryan
chinco ryanchinco ryan
chinco ryan
 
Evaluation one
Evaluation oneEvaluation one
Evaluation one
 
Target audience member profile
Target audience member profileTarget audience member profile
Target audience member profile
 
E.Tarik Olian-CV3
E.Tarik Olian-CV3E.Tarik Olian-CV3
E.Tarik Olian-CV3
 
Katrina
KatrinaKatrina
Katrina
 
1293.18_RIA Brochure design V4(Print)
1293.18_RIA Brochure design V4(Print)1293.18_RIA Brochure design V4(Print)
1293.18_RIA Brochure design V4(Print)
 
Kosmo - Zon Penjual Bantu Peniaga Tempatan page 1
Kosmo - Zon Penjual Bantu Peniaga Tempatan page 1Kosmo - Zon Penjual Bantu Peniaga Tempatan page 1
Kosmo - Zon Penjual Bantu Peniaga Tempatan page 1
 
My beloved school
My beloved schoolMy beloved school
My beloved school
 
EE Prof. Henrique Bertolucci
EE Prof. Henrique BertolucciEE Prof. Henrique Bertolucci
EE Prof. Henrique Bertolucci
 
HAP Energy Modeling Certificate
HAP Energy Modeling CertificateHAP Energy Modeling Certificate
HAP Energy Modeling Certificate
 
IMAPS 2003 Manuscript - E
IMAPS 2003 Manuscript - EIMAPS 2003 Manuscript - E
IMAPS 2003 Manuscript - E
 
Revista37
Revista37Revista37
Revista37
 
Materi pkn bab 2
Materi pkn bab 2Materi pkn bab 2
Materi pkn bab 2
 
ROI Focused Mobile Marketing for Retailers
ROI Focused Mobile Marketing for RetailersROI Focused Mobile Marketing for Retailers
ROI Focused Mobile Marketing for Retailers
 
Büyük selçuklular
Büyük selçuklularBüyük selçuklular
Büyük selçuklular
 
Top reasons customers choose SugarCRM over salesforce
Top reasons customers choose SugarCRM over salesforceTop reasons customers choose SugarCRM over salesforce
Top reasons customers choose SugarCRM over salesforce
 

Similar to Designing for Tomorrow with Abstraction and Encapsulation

Get your Project back in Shape!
Get your Project back in Shape!Get your Project back in Shape!
Get your Project back in Shape!Joachim Tuchel
 
Taking ownership of the challenges and problems of owning a grotty API and tu...
Taking ownership of the challenges and problems of owning a grotty API and tu...Taking ownership of the challenges and problems of owning a grotty API and tu...
Taking ownership of the challenges and problems of owning a grotty API and tu...Jexia
 
How to maintain a perfect product architecture in a non-stop start-up
How to maintain a perfect product architecture in a non-stop start-upHow to maintain a perfect product architecture in a non-stop start-up
How to maintain a perfect product architecture in a non-stop start-upAdam Kariv
 
24 Months - A DevOps Retrospective
24 Months - A DevOps Retrospective24 Months - A DevOps Retrospective
24 Months - A DevOps RetrospectiveSam McLeod
 
Executing for Every Screen: Build, launch and sustain products for your custo...
Executing for Every Screen: Build, launch and sustain products for your custo...Executing for Every Screen: Build, launch and sustain products for your custo...
Executing for Every Screen: Build, launch and sustain products for your custo...Steven Hoober
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
 
Devconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedDevconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedAlexander Makarov
 
What do the "Cool Kids" know about DevOps?
What do the "Cool Kids" know about DevOps?What do the "Cool Kids" know about DevOps?
What do the "Cool Kids" know about DevOps?Bill Holtshouser
 
Building self-service on demand infrastructure with Puppet and VMware
Building self-service on demand infrastructure with Puppet and VMwareBuilding self-service on demand infrastructure with Puppet and VMware
Building self-service on demand infrastructure with Puppet and VMwarePuppet
 
Dev Tools State of the Union (Part II) - Atlassian Summit 2010
Dev Tools State of the Union (Part II) - Atlassian Summit 2010Dev Tools State of the Union (Part II) - Atlassian Summit 2010
Dev Tools State of the Union (Part II) - Atlassian Summit 2010Atlassian
 
Serverless Toronto helps Startups
Serverless Toronto helps StartupsServerless Toronto helps Startups
Serverless Toronto helps StartupsDaniel Zivkovic
 
Conquering Chaos: Helix & DevOps
Conquering Chaos: Helix & DevOpsConquering Chaos: Helix & DevOps
Conquering Chaos: Helix & DevOpsPerforce
 
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...CloudBees
 
Why do mobile projects (still) fail - September 2014 edition
Why do mobile projects (still) fail - September 2014 editionWhy do mobile projects (still) fail - September 2014 edition
Why do mobile projects (still) fail - September 2014 editionIndiginox
 
KubeCon 2019 Recap (Parts 1-3)
KubeCon 2019 Recap (Parts 1-3)KubeCon 2019 Recap (Parts 1-3)
KubeCon 2019 Recap (Parts 1-3)Ford Prior
 

Similar to Designing for Tomorrow with Abstraction and Encapsulation (20)

Get your Project back in Shape!
Get your Project back in Shape!Get your Project back in Shape!
Get your Project back in Shape!
 
Core Principles Of Ci
Core Principles Of CiCore Principles Of Ci
Core Principles Of Ci
 
Taking ownership of the challenges and problems of owning a grotty API and tu...
Taking ownership of the challenges and problems of owning a grotty API and tu...Taking ownership of the challenges and problems of owning a grotty API and tu...
Taking ownership of the challenges and problems of owning a grotty API and tu...
 
How to maintain a perfect product architecture in a non-stop start-up
How to maintain a perfect product architecture in a non-stop start-upHow to maintain a perfect product architecture in a non-stop start-up
How to maintain a perfect product architecture in a non-stop start-up
 
24 Months - A DevOps Retrospective
24 Months - A DevOps Retrospective24 Months - A DevOps Retrospective
24 Months - A DevOps Retrospective
 
Executing for Every Screen: Build, launch and sustain products for your custo...
Executing for Every Screen: Build, launch and sustain products for your custo...Executing for Every Screen: Build, launch and sustain products for your custo...
Executing for Every Screen: Build, launch and sustain products for your custo...
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
Devconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedDevconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developed
 
Icebreaker with DevOps
Icebreaker with DevOpsIcebreaker with DevOps
Icebreaker with DevOps
 
What do the "Cool Kids" know about DevOps?
What do the "Cool Kids" know about DevOps?What do the "Cool Kids" know about DevOps?
What do the "Cool Kids" know about DevOps?
 
DevOps Days Ohio
DevOps Days OhioDevOps Days Ohio
DevOps Days Ohio
 
Building self-service on demand infrastructure with Puppet and VMware
Building self-service on demand infrastructure with Puppet and VMwareBuilding self-service on demand infrastructure with Puppet and VMware
Building self-service on demand infrastructure with Puppet and VMware
 
Dev Tools State of the Union (Part II) - Atlassian Summit 2010
Dev Tools State of the Union (Part II) - Atlassian Summit 2010Dev Tools State of the Union (Part II) - Atlassian Summit 2010
Dev Tools State of the Union (Part II) - Atlassian Summit 2010
 
Serverless Toronto helps Startups
Serverless Toronto helps StartupsServerless Toronto helps Startups
Serverless Toronto helps Startups
 
How to write bad code using C#
How to write bad code using C#How to write bad code using C#
How to write bad code using C#
 
Conquering Chaos: Helix & DevOps
Conquering Chaos: Helix & DevOpsConquering Chaos: Helix & DevOps
Conquering Chaos: Helix & DevOps
 
Get lean tutorial
Get lean tutorialGet lean tutorial
Get lean tutorial
 
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
 
Why do mobile projects (still) fail - September 2014 edition
Why do mobile projects (still) fail - September 2014 editionWhy do mobile projects (still) fail - September 2014 edition
Why do mobile projects (still) fail - September 2014 edition
 
KubeCon 2019 Recap (Parts 1-3)
KubeCon 2019 Recap (Parts 1-3)KubeCon 2019 Recap (Parts 1-3)
KubeCon 2019 Recap (Parts 1-3)
 

Recently uploaded

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 

Recently uploaded (20)

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 

Designing for Tomorrow with Abstraction and Encapsulation

  • 1. Designing for Tomorrow, Delivering Today Frank Rydzewski Software Architect, iAware 1
  • 2. Delivery Design • Quality • Encapsulation • Testing • Abstraction • Performance • Testability • Timelines • Long-Term Bias • Sacrifice • Glorious “Perfection” 2
  • 3. Warning: Philosophical Stuff Ahead http://xkcd.com/220/ 3
  • 4. What Are Your Priorities? 4
  • 5. Don’t even think about shipping without... • Error Handling • Logging • Measuring • i18n • Testing • Documentation 5
  • 6. The “Perfect” API • Nearly an art form • Very Important, but “not always” • Are you really writing an important API? • “Better” APIs tend to be intuitive, clear, concise • Focus on what is visible to consumers • API might be more than methods in classes • Packaging solution may allow high levels of “forgiveness” for “bad” design 6
  • 7. “What If” and “Can’t Happen” • Ask as many “what ifs” as you can • Handle all answerable outcomes • e.g. what if a service call fails? • Don’t waste too much time on “Can’t Happen” issues but be sure to handle them gracefully • e.g.. Database will “NEVER” return null for a value, which is true until the day it happens 7
  • 8. The World’s Problems are Not Yours • Task: Displaying a graph of well-defined values • Solve that first • Then prioritize any unrelated issues or improvements uncovered during development • Avoid the temptation to “dig more holes” • Manage “Scope Creep” 8
  • 9. The Day After Tomorrow • Don’t over-engineer based on guesses • Design to be flexible and adaptable • Release equals Support • Half implemented solutions just make everything confusing 9
  • 10. Clarity FTW • A nice, clean solution is way easier to hand off to the “next class” • Bugs stick out in clear code • Passing around an array of multi-dimensional arrays of makes you cool, but with the wrong crowd • Complex interactions make everything more difficult • You’re the only one who can support it 10
  • 11. Change is Constant • Cliche but true • Requirements change all the time. Don’t live in a fantasy world • Get ready to throw away that glorious API you spent 4 weeks “perfecting” • Expect change when designing software 11
  • 13. Good Practices Lead to Good Designs http://xkcd.com/292/ 13
  • 14. Abstraction & Encapsulation “The single most important factor that distinguishes a well-designed module from a poorly designed one is the degree to which the module hides its internal data and other implementation details from other modules.” -Joshua Bloch 14
  • 17. Abstraction • Reducing visible chaos • Creating your own API to consolidate or simplify access to another system/service • Generally is tailored to your specific needs, rather than directly consuming something more generic • Can be satisfied by any number of potential implementors • If you’re just duplicating an existing API, be sure that’s the right approach • Everything isn’t worthy of the effort - don’t overdo it 17
  • 19. 12 well-defined inputs Not possible to tell the system “Z” was pressed http://en.wikipedia.org/wiki/File:Snes_control.jpg 19
  • 20. Encapsulation • Enforce the rules of your design/contract and control what is exposed • Manage (hide) complexity • Can help you avoid tough decisions about exposing API that isn’t ready for prime time • Don’t rely on documentation to prevent use - disallow use with scoping/exporting 20
  • 21. What scares you? • Things you can’t control • External systems • Buggy code • Unclear APIs • Things that you know will change soon • Subsystems that you didn’t have time to properly design 21
  • 22. Everything is a “service” • View external APIs / systems like they are just another service • Stay decoupled • Create an abstraction layer to encapsulate calls as you would any service • Define your contract and create an implementation that uses the external API / service to fulfill 22
  • 23. Are you too good for your home? • “Risky” code can be given its own “home” • Don’t be afraid to create new projects in order to encapsulate things you don’t trust • ...but use your best judgement to avoid 10,000 jars in your assembly 23
  • 24. Avoid the Release Waterfall 24
  • 25. Testing • White-box, check. • Black-box, check. • Expected exception from a service implementation that I can’t ever re-create? • Bad data that can “never” be returned? • Mock implementations FTW. • Design the proper abstractions up front 25
  • 26. Know Your Dependencies • What do you depend on and why? • What versions cause joy/pain? • Which pieces are tightly coupled and which can be abstracted? • Don’t get surprised by a new version • Test against upgraded dependencies early 26
  • 27. Releasing / Deploying • More jars = more “fun” • Release when ready vs “at the end” • more difficult than it sounds • temptation is to wait “in case” • Always diff your end states • You should be intimately aware of what is changing (versions, additions, removals) 27
  • 28. Installing / Upgrading • Will any given change/feature cause any difficulty in installation? • is it worth it? • can we design around it? • What does the client need to do to use the new version? • Automate as much as possible • May need additional functionality to support 28