IntroductionWhy DesignIn this module we will cover general design principles and those that are tailored for scientific softwareMotivation and Objectives


  • Investing in design is critical for reliable, maintainable and extensible software

General Design PrinciplesGeneral Design PrinciplesDesigning Software – High Level PhasesRequirements GatheringDecompositionConnectivity


  • FIXME

Design Principles ApplicationExample 1 – Problem DescriptionSimplifying AssumptionsRequirement gatheringDecompositionConnectivityConnectivity – Alternative Possibility


  • Understanding process of software design with a simple application

Design Principles for Reserach SoftwareResearch Software Specific ChallengesSOLID Principles Pose Some DifficultiesAdditional Considerations for Research Software


  • Design principles need to be adapted for research software

Research Software Design ExampleMore Complex Application Design – Sedov Blast WaveDeeper Dive into RequirementsComponentsConnectivityExploring design space – AbstractionsA Design Model for Separation of ConcernsSeparation of Concerns AppliedTakeaways So far


  • More complex requirements gathering and connectivity and -implications on design

Challenges of HeterogeneityNew Paradigm Because of Platform HeterogeneityGo Back to the Design Model for Separation of ConcernsPlatform Heterogeneity


  • More computations rely on accelerators, software design should be cognizant of added constraints

Design for HeterogeneityMechanisms Needed by the CodeUnderlying Ideas: Unification of Computational ExpressionsUnderlying Ideas: Moving Work and Data to the TargetUnderlying Ideas: Mapping Work to TargetsFeatures and Abstractions to be Added to Earlier ExampleMechanisms Needed by the Code : Example Flash-XConstruction of Application with Components and Tools


  • More separation of concerns and abstractions are needed

ConclusionsFinal takeawaysResources


  • Investing in design is critical for reliable, maintainable and extensible software