not written for the project specifically Derived - mostly not written for the project but somewhat adapted, eg. from other instruments Bespoke - written specifically for the project
not written for the project specifically Derived - mostly not written for the project but somewhat adapted, eg. from other instruments Bespoke - written specifically for the project
not written for the project specifically Derived - mostly not written for the project but somewhat adapted, eg. from other instruments Bespoke - written specifically for the project Astropy dependencies: numpy, matplotlib, pandas
not written for the project specifically Derived - mostly not written for the project but somewhat adapted, eg. from other instruments Bespoke - written specifically for the project Astropy dependencies: numpy, matplotlib, pandas CASA: openMPI, ImageMagick, Astropy
not written for the project specifically Derived - mostly not written for the project but somewhat adapted, eg. from other instruments Bespoke - written specifically for the project Astropy dependencies: numpy, matplotlib, pandas CASA: openMPI, ImageMagick, Astropy SKA: Tango messaging
not written for the project specifically Derived - mostly not written for the project but somewhat adapted, eg. from other instruments Bespoke - written specifically for the project Astropy dependencies: numpy, matplotlib, pandas CASA: openMPI, ImageMagick, Astropy SKA: Tango messaging ESO CPL: FFTW, WCSLib
not written for the project specifically Derived - mostly not written for the project but somewhat adapted, eg. from other instruments Bespoke - written specifically for the project Astropy dependencies: numpy, matplotlib, pandas CASA: openMPI, ImageMagick, Astropy SKA: Tango messaging ESO CPL: FFTW, WCSLib
not written for the project specifically Derived - mostly not written for the project but somewhat adapted, eg. from other instruments Bespoke - written specifically for the project Astropy dependencies: numpy, matplotlib, pandas CASA: openMPI, ImageMagick, Astropy SKA: Tango messaging ESO CPL: FFTW, WCSLib (And don’t forget operating systems, compilers, Ci/CD tools, networking systems)
choose, and when to build your own? 1. Know the quality attribute scenarios for your system. 2. Build and maintain a list of design concepts: architecture tactics, libraries, design patterns. 3. Continually measure and evaluate system components.
about the system, need to know what we care about. Start with mission goals and technical context. Mission goals: why are we doing this? “Examine epoch of reionization” “Understand fast radio bursts” “Keep government funding”
we already have, and what works. What constraints do we face? What legacy code and technical debt are we dealing with? Need to ensure we talk to people who know these questions and have answers (or could figure it out).
(mission/technical). Let’s generate “test cases” for what the system should be doing. From whom? People on either side (head of software, chief scientist/PI, data engineers, end users…) Where to start?
from non-functional requirements, the “ilities”: Usability, maintainability, reliability, accuracy, performance, scalability Start with a few of those and drill in to a specific, measurable test E.g. (SKA): “when the telescope manager schedules a SchedulingBlock, the new schedule is updated within 1 minute” must be able to validate this is the case (often analytically, not data-oriented) Then prioritize on mission importance and technical challenge
test cases by which to evaluate buy/build decisions. Should we use Tango, or write our own message passing infrastructure? → How well does each solution do on the different QAS? Use attribute-driven design approach to iteratively examine each piece.
a combination of “reuse model” and “add custom fine-tuning” Must include ML models (BERT, DALL-E) and training data in list of external components Sculley, “ML: The High Interest Credit Card of TD”
curve External software is an instantiated design concept 20 Maturity Popularity OSS health indicators Compatibility/integratability Support for key QA Size
50+ years Need to assess “health” of community (or company) building software CHAOSS Project: → Measure EDI, Value, Risk, Evolution https://chaoss.community/about/
not take decisions until absolutely necessary Cost of Delay: missing deadlines has a cost we often ignore. Technical Debt: beware creating a short-term solution at the expense of long- term maintainability
speed, time to market, new features Key architectural driver: how to deliver trades < 1sec? Design concept: enterprise message bus pattern Question: buy externally or build internally
speed, time to market, new features Key architectural driver: how to deliver trades < 1sec? Design concept: enterprise message bus pattern Question: buy externally or build internally Solution: evaluate in parallel and make decision with more data (Last responsible moment)
Constraints: longevity, latency, data volumes Key architectural driver: balance maintainability and speed Design concept: low-level instrument control Question: which control software to buy?
Constraints: longevity, latency, data volumes Key architectural driver: balance maintainability and speed Design concept: low-level instrument control Question: which control software to buy? Solution: Tango controls - after extensive prototyping → 2015 SKA Local Monitoring and Control (LMC) Standardisation Workshop → key low-level software that will be hard to change out → derived as SKA discovers edge cases - hire Tango expert to contribute to Tango Kernel
when to build your own? 1. Know the quality attribute scenarios for your system. 2. Build and maintain a list of design concepts: architecture tactics, libraries, design patterns. 3. Continually measure and evaluate system components.