Clues (which may range from hints, heuristics, tips, ... patterns, ... checklists, ...) for architects, creating good, right successful systems (and the architectures that enable them).
How is design like a comic?
Visual design, visual collaboration, stickies and diagrams are all integral to DDD. But why? How is it so effective? Is it though? We’ll take a look at the role of the visual in communication, collaboration and reasoning, drawing on work in various related areas. Including comics.
How we think of architecture shapes what we do as architects, and what we do, shapes how we think of architecture. We will explore our conception of architecture in this dual sense, with an emphasis on visualization and visual expression of design (intention and reflection).
Presented at SATURN 2017
One of the main advantages of PHP is that it allows you and your company to build up projects in no time and with immediate feedback and business value. Sometimes, however, fast growth and unprevented complexities could make your codebase more and more difficult to manage as time passes and new features are added.Domain Driven Design can be an elegant solution to the problem, but introducing it in mid-large sized projects is not always easy: you have to deal with difficulties at technical, team and knowledge levels. This talk focuses on how to approach the change in your codebase and in your team mindset without breaking legacy code or stopping the development in favor of neverending refactoring sessions.
User Story Maps: Secrets for Better Backlogs and PlanningAaron Sanders
User story mapping is an intuitive way to build and organize a product backlog. During this session you’ll get hands-on experience building a user story map. You’ll learn:
How story mapping drives productive conversations with users and stakeholders.
How to plan incremental releases of your product using minimal holistic slices that deliver value at each product release.
Secrets to effective prioritization for both planning releases, and figuring out what to build next.
Tactical management of your backlog as you grow your working software to releasability.
The backlog building and managing strategies in this session will take you well beyond the agile basics.
How is design like a comic?
Visual design, visual collaboration, stickies and diagrams are all integral to DDD. But why? How is it so effective? Is it though? We’ll take a look at the role of the visual in communication, collaboration and reasoning, drawing on work in various related areas. Including comics.
How we think of architecture shapes what we do as architects, and what we do, shapes how we think of architecture. We will explore our conception of architecture in this dual sense, with an emphasis on visualization and visual expression of design (intention and reflection).
Presented at SATURN 2017
One of the main advantages of PHP is that it allows you and your company to build up projects in no time and with immediate feedback and business value. Sometimes, however, fast growth and unprevented complexities could make your codebase more and more difficult to manage as time passes and new features are added.Domain Driven Design can be an elegant solution to the problem, but introducing it in mid-large sized projects is not always easy: you have to deal with difficulties at technical, team and knowledge levels. This talk focuses on how to approach the change in your codebase and in your team mindset without breaking legacy code or stopping the development in favor of neverending refactoring sessions.
User Story Maps: Secrets for Better Backlogs and PlanningAaron Sanders
User story mapping is an intuitive way to build and organize a product backlog. During this session you’ll get hands-on experience building a user story map. You’ll learn:
How story mapping drives productive conversations with users and stakeholders.
How to plan incremental releases of your product using minimal holistic slices that deliver value at each product release.
Secrets to effective prioritization for both planning releases, and figuring out what to build next.
Tactical management of your backlog as you grow your working software to releasability.
The backlog building and managing strategies in this session will take you well beyond the agile basics.
From capabilities to services modelling for business-it alignment v.2Trond Hjorteland
Our industry seems to go through cycles of re-discovery of lost knowledge with every new generation of developers, which probably is not so odd considering the exponential growth of practitioners. Allegedly half of the programmers today are juniors, which means many of them have yet to encounter the challenges faced decades ago. For example, many run the risk of falling into the trap of modelling services around domain entities, risking ending up with a distributed monolith with its devastating coupling, fragility, and cognitive nightmare. Lucky for us, we have shoulders to stand on to get us out of the quagmire, or even better, prevent us from getting on that slippery slope in the first place.
Being conscious of fallacies like those of distributed computing and anti-patterns like functional decomposition and entity services are all well and good, and necessary heuristics to good service design, but we often crave more concrete guidance. There are many great techniques to consider, like context mapping, user story mapping, event storming, and value chain analysis, but in this talk I will focus on the lost art of business capability modelling. My thesis is that a technique that was relevant in the pre-computing era might be just as useful and relevant when we split our monoliths into a mesh of autonomous (micro)services. Maybe they even could help us identify subdomains, contexts, and organisational structure; in effect the construction of sociotechnical systems?
Dynamics AX 2009 CRM Implementation : The fit gap analysis Julien Lecadou,MSc.
In this paper, we focused our attentions into the fit gap analysis and solutions related to the CRM implementation. This fit gap analysis is part of a broad range of activities that are needed to be processed in order to design, develop and deploy a CRM application.
We attended several meetings with the stakeholders in order to implement the solutions. And during those meetings, we understood that every CRM solution is unique and it should be tailored to the company overall business process and culture.
Explain Domain-Driven Design, its main concepts and tools, and the Event Storming practice to highlight the importance of a good design and empower a team to start using it progressively.
Managing Infrastructure as a Product - Introduction to Platform EngineeringAdityo Pratomo
This is an introduction to platform engineering, the bridge that truly fulfills DevOps potential inside a mid-large scale organization. Sure, it's all the rage these days, but I'd argue to completely develop a platform, a product thinking mindset is also required.
This talk was presented in Kubernetes Day Indonesia 2022
This session introduces the key patterns in Cloud Native application development. It highlights the need of a unique architecture style, further, the fitment of DevOps, usage of Microservices and the runtime of Cloud Native application (* as a Service). The precautions of distributed computing gives insights of how to plan the application design and architecture.
Funny stories and anti-patterns from DevOps landscapeMikalai Alimenkou
During last several years DevOps became strong buzzword used almost in every project, team and company. But almost everywhere it is used in very funny and strange context. For example, existing ops guys are renamed to DevOps just to sell them to the client for more money. Or DevOps is used as new job title for some magically powerful person who is able to operate cloud environment and modern infrastructure related tools, leading team of old school ops and participating in management meetings. In this talk I’m going to review all different anti-patterns and bad practices in DevOps landscape using stories from my personal experience as Delivery Manager and independent consultant.
I've spent the last years modelling complex businesses and Software Architectures with EventStorming. The original recipe evolved a lot from the initial one. This is EventStorming state of the art.
Domain Driven Design - Strategic Patterns and MicroservicesRadosław Maziarka
Presentation describes Domain Driven Design - approach to create applications driven by business domain. I show how to split your monolith base on DDD strategic patterns.
What we know today as "SDLC" originated about 60 years ago. Engineers and Scientists kept optimising and coming up with different SDLC Models.
Well planned SDLC was capable of delivering the quality software. As time went by, Agile flavours like Scrum became the most popular approach for many well-known reasons.
Life was good but something was missing.
And that was...DEVOPS!
Sometimes lines get blur in understanding the difference between DevOps and SDLC but in simple terms, we can say that SDLC takes care of the earlier phase and DEVOPS worry about the later phase of the software lifecycle.
SDLC was used in the creation of software but Devops takes all the developed products and gets them where they need to be.
Simplified application management framework created taking information from PMBOK, ITIL, COBIT5, CMMI, ASL and Microsoft compliance. This aims at putting the first steps in place to be able to understand and manage an applications life cycle.
The project was undertaken to try and identify how to reduce risk associated with the applications that the department create, implement and manage. It dovetailed into an audit of the applications that the department use and have implemented in the past 5 years.
Part i: Introduction and Context setting around Design in Agile; Decisions and Constraints; Decisions and Trade-offs; Getting to know the domains (contexts of use, development and operations, value partners and others); Design and expressions of system value, capabilities and properties
Part ii: Why Visual Matters to Design, some exemplars we can learn from, and lessons we can draw about why we need to bring visual models back into our design toolkit (some already do, obviously, but why more of us need to)
Part iii: Architectural design -- using visual models to look inside the system, and design the organizing structure, and how it works.
Annotated slides here: https://www.ruthmalan.com/Journal/2019/201902OReillySAConPresentation.htm
Markup's data-centric human-readable approach offers a unique opportunity for us to build systems that are more than the usual automation. We haven't taken advantage of that power, however. Why? Because we've stayed on the in
From capabilities to services modelling for business-it alignment v.2Trond Hjorteland
Our industry seems to go through cycles of re-discovery of lost knowledge with every new generation of developers, which probably is not so odd considering the exponential growth of practitioners. Allegedly half of the programmers today are juniors, which means many of them have yet to encounter the challenges faced decades ago. For example, many run the risk of falling into the trap of modelling services around domain entities, risking ending up with a distributed monolith with its devastating coupling, fragility, and cognitive nightmare. Lucky for us, we have shoulders to stand on to get us out of the quagmire, or even better, prevent us from getting on that slippery slope in the first place.
Being conscious of fallacies like those of distributed computing and anti-patterns like functional decomposition and entity services are all well and good, and necessary heuristics to good service design, but we often crave more concrete guidance. There are many great techniques to consider, like context mapping, user story mapping, event storming, and value chain analysis, but in this talk I will focus on the lost art of business capability modelling. My thesis is that a technique that was relevant in the pre-computing era might be just as useful and relevant when we split our monoliths into a mesh of autonomous (micro)services. Maybe they even could help us identify subdomains, contexts, and organisational structure; in effect the construction of sociotechnical systems?
Dynamics AX 2009 CRM Implementation : The fit gap analysis Julien Lecadou,MSc.
In this paper, we focused our attentions into the fit gap analysis and solutions related to the CRM implementation. This fit gap analysis is part of a broad range of activities that are needed to be processed in order to design, develop and deploy a CRM application.
We attended several meetings with the stakeholders in order to implement the solutions. And during those meetings, we understood that every CRM solution is unique and it should be tailored to the company overall business process and culture.
Explain Domain-Driven Design, its main concepts and tools, and the Event Storming practice to highlight the importance of a good design and empower a team to start using it progressively.
Managing Infrastructure as a Product - Introduction to Platform EngineeringAdityo Pratomo
This is an introduction to platform engineering, the bridge that truly fulfills DevOps potential inside a mid-large scale organization. Sure, it's all the rage these days, but I'd argue to completely develop a platform, a product thinking mindset is also required.
This talk was presented in Kubernetes Day Indonesia 2022
This session introduces the key patterns in Cloud Native application development. It highlights the need of a unique architecture style, further, the fitment of DevOps, usage of Microservices and the runtime of Cloud Native application (* as a Service). The precautions of distributed computing gives insights of how to plan the application design and architecture.
Funny stories and anti-patterns from DevOps landscapeMikalai Alimenkou
During last several years DevOps became strong buzzword used almost in every project, team and company. But almost everywhere it is used in very funny and strange context. For example, existing ops guys are renamed to DevOps just to sell them to the client for more money. Or DevOps is used as new job title for some magically powerful person who is able to operate cloud environment and modern infrastructure related tools, leading team of old school ops and participating in management meetings. In this talk I’m going to review all different anti-patterns and bad practices in DevOps landscape using stories from my personal experience as Delivery Manager and independent consultant.
I've spent the last years modelling complex businesses and Software Architectures with EventStorming. The original recipe evolved a lot from the initial one. This is EventStorming state of the art.
Domain Driven Design - Strategic Patterns and MicroservicesRadosław Maziarka
Presentation describes Domain Driven Design - approach to create applications driven by business domain. I show how to split your monolith base on DDD strategic patterns.
What we know today as "SDLC" originated about 60 years ago. Engineers and Scientists kept optimising and coming up with different SDLC Models.
Well planned SDLC was capable of delivering the quality software. As time went by, Agile flavours like Scrum became the most popular approach for many well-known reasons.
Life was good but something was missing.
And that was...DEVOPS!
Sometimes lines get blur in understanding the difference between DevOps and SDLC but in simple terms, we can say that SDLC takes care of the earlier phase and DEVOPS worry about the later phase of the software lifecycle.
SDLC was used in the creation of software but Devops takes all the developed products and gets them where they need to be.
Simplified application management framework created taking information from PMBOK, ITIL, COBIT5, CMMI, ASL and Microsoft compliance. This aims at putting the first steps in place to be able to understand and manage an applications life cycle.
The project was undertaken to try and identify how to reduce risk associated with the applications that the department create, implement and manage. It dovetailed into an audit of the applications that the department use and have implemented in the past 5 years.
Part i: Introduction and Context setting around Design in Agile; Decisions and Constraints; Decisions and Trade-offs; Getting to know the domains (contexts of use, development and operations, value partners and others); Design and expressions of system value, capabilities and properties
Part ii: Why Visual Matters to Design, some exemplars we can learn from, and lessons we can draw about why we need to bring visual models back into our design toolkit (some already do, obviously, but why more of us need to)
Part iii: Architectural design -- using visual models to look inside the system, and design the organizing structure, and how it works.
Annotated slides here: https://www.ruthmalan.com/Journal/2019/201902OReillySAConPresentation.htm
Markup's data-centric human-readable approach offers a unique opportunity for us to build systems that are more than the usual automation. We haven't taken advantage of that power, however. Why? Because we've stayed on the in
Essential Complexity in Systems ArchitectureMark Mishaev
In this presentation we will into real system architectures, present essential and accidental complexity and see patterns that could help us to reduce accidental complexity.
Design as Leadership: Exploring the TerrainRick Fox
In contrast to the notion of design as a form of self-expression, this presentation advocates that architects and design professionals view design as an act of leadership. It was prepared for a graduate seminar I lead at the Interior Designers Institute in Newport Beach California.
Agile Architecture and Modeling - Where are we TodayGary Pedretti
Ideals, Misinterpretations, Backlash, a New Hope - A talk on where we've been and where we're going with agile application architecture. As presented at Toronto Agile and Software 2014 on 11/10/2014.
Presented at Build Stuff (19th November 2014)
Ralph Johnson defined architecture as "the decisions that you wish you could get right early in a project, but that you are not necessarily more likely to get them right than any other". Given our inability to tell the future how can we design effectively for it? Much project management thinking is based on the elimination of uncertainty, and advice on software architecture and guidance for future-proofing code often revolves around adding complexity to embrace uncertainty. In most cases, this is exactly the opposite path to the one that should be taken.
The talk looks at how uncertainty, lack of knowledge and options can be used to partition and structure the code in a system.
Presented at NDC London (5th December 2014)
Ralph Johnson defined architecture as "the decisions that you wish you could get right early in a project, but that you are not necessarily more likely to get them right than any other". Given our inability to tell the future how can we design effectively for it? Much project management thinking is based on the elimination of uncertainty, and advice on software architecture and guidance for future-proofing code often revolves around adding complexity to embrace uncertainty. In most cases, this is exactly the opposite path to the one that should be taken.
The talk looks at how uncertainty, lack of knowledge and options can be used to partition and structure the code in a system.
What (Else) Can Agile Learn From ComplexityJurgen Appelo
How can complexity science be applied to software development? This presentation shows you which scientific concepts can be mapped to agile software development.
http://www.noop.nl
http://www.jurgenappelo.com
Presentation I gave on August 24th, 2011 in Bangkok at the ITARC Thailand 2011: Business Agility with Enterprise Architecture conference.
Intention is to refocus Architecture towards delivering customer value, talk a bit about where things stand today, and introduce the concept of Domain Context Interaction.
A great deal of this content comes from papers and podcasts published by James Coplien on the subject. The last slide has some useful references to follow up on.
Why do enterprise-architecture fail? Three of the most common causes are:
-- Blurring between the distinct rolesof architecture and design
-- Starting architecture too lateand/or finishing too early in the process for making something real
-- Placing arbitrary constraintson content, scope and/or scale
Each of these errors causes the architecture to fragment and then fail.
In this slidedeck, we explore the causes for each of these errors, why they occur, the effects that the errors have, and what to do to avoid them.
Favoring the Emergence through Agile ScaffoldingEmiliano Soldi
The frameworks for scaling Agile in organizations are certainly an excellent tool on which to leverage to develop strategic skills such as market adaptation, innovation and the reduction of product creation times; characteristics that, in all likelihood, will be able to significantly raise the level of general customer satisfaction.
Not a few times, alas, we found ourselves having to deal with practices suggested by those same frameworks that did not fit well with the circumstances and environment of reference. In those cases it is of little use to abandon one framework in favor of another as, in most cases, we would face new failures and a sense of frustration squared.
In business contexts where a minimum but sufficient Agile adoption maturity has been reached to be defined as practitioners, it is certainly worth experimenting with new approaches.
In this deck we will talk about how it is possible to encourage the emergence of emerging practices by teams in their native contexts, and which allow to scale Agile in a more organic and coordinated way, to achieve the above benefits, without the risk of rejection and decreasing to a minimum the inefficiencies due to lack of alignment, collaboration and communication.
We will use the example of "biological scaffolding" to explain how in a human body, in a completely natural way, it is possible to influence a system from the inside, cellular in that case, towards certain directions and behaviors, avoiding invasive, constricting interventions or structures or limiting.
We will use that concept as a metaphor to apply to Agile transformations.
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Globus
The Earth System Grid Federation (ESGF) is a global network of data servers that archives and distributes the planet’s largest collection of Earth system model output for thousands of climate and environmental scientists worldwide. Many of these petabyte-scale data archives are located in proximity to large high-performance computing (HPC) or cloud computing resources, but the primary workflow for data users consists of transferring data, and applying computations on a different system. As a part of the ESGF 2.0 US project (funded by the United States Department of Energy Office of Science), we developed pre-defined data workflows, which can be run on-demand, capable of applying many data reduction and data analysis to the large ESGF data archives, transferring only the resultant analysis (ex. visualizations, smaller data files). In this talk, we will showcase a few of these workflows, highlighting how Globus Flows can be used for petabyte-scale climate analysis.
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns
Unlocking Business Potential: Tailored Technology Solutions by Prosigns
Discover how Prosigns, a leading technology solutions provider, partners with businesses to drive innovation and success. Our presentation showcases our comprehensive range of services, including custom software development, web and mobile app development, AI & ML solutions, blockchain integration, DevOps services, and Microsoft Dynamics 365 support.
Custom Software Development: Prosigns specializes in creating bespoke software solutions that cater to your unique business needs. Our team of experts works closely with you to understand your requirements and deliver tailor-made software that enhances efficiency and drives growth.
Web and Mobile App Development: From responsive websites to intuitive mobile applications, Prosigns develops cutting-edge solutions that engage users and deliver seamless experiences across devices.
AI & ML Solutions: Harnessing the power of Artificial Intelligence and Machine Learning, Prosigns provides smart solutions that automate processes, provide valuable insights, and drive informed decision-making.
Blockchain Integration: Prosigns offers comprehensive blockchain solutions, including development, integration, and consulting services, enabling businesses to leverage blockchain technology for enhanced security, transparency, and efficiency.
DevOps Services: Prosigns' DevOps services streamline development and operations processes, ensuring faster and more reliable software delivery through automation and continuous integration.
Microsoft Dynamics 365 Support: Prosigns provides comprehensive support and maintenance services for Microsoft Dynamics 365, ensuring your system is always up-to-date, secure, and running smoothly.
Learn how our collaborative approach and dedication to excellence help businesses achieve their goals and stay ahead in today's digital landscape. From concept to deployment, Prosigns is your trusted partner for transforming ideas into reality and unlocking the full potential of your business.
Join us on a journey of innovation and growth. Let's partner for success with Prosigns.
Large Language Models and the End of ProgrammingMatt Welsh
Talk by Matt Welsh at Craft Conference 2024 on the impact that Large Language Models will have on the future of software development. In this talk, I discuss the ways in which LLMs will impact the software industry, from replacing human software developers with AI, to replacing conventional software with models that perform reasoning, computation, and problem-solving.
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
In this slide, we show the simulation example and the way to compile this solver.
In this solver, the Helmholtz equation can be solved by helmholtzFoam. Also, the Helmholtz equation with uniformly dispersed bubbles can be simulated by helmholtzBubbleFoam.
Unleash Unlimited Potential with One-Time Purchase
BoxLang is more than just a language; it's a community. By choosing a Visionary License, you're not just investing in your success, you're actively contributing to the ongoing development and support of BoxLang.
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTier1 app
Even though at surface level ‘java.lang.OutOfMemoryError’ appears as one single error; underlyingly there are 9 types of OutOfMemoryError. Each type of OutOfMemoryError has different causes, diagnosis approaches and solutions. This session equips you with the knowledge, tools, and techniques needed to troubleshoot and conquer OutOfMemoryError in all its forms, ensuring smoother, more efficient Java applications.
A Comprehensive Look at Generative AI in Retail App Testing.pdfkalichargn70th171
Traditional software testing methods are being challenged in retail, where customer expectations and technological advancements continually shape the landscape. Enter generative AI—a transformative subset of artificial intelligence technologies poised to revolutionize software testing.
Enhancing Research Orchestration Capabilities at ORNL.pdfGlobus
Cross-facility research orchestration comes with ever-changing constraints regarding the availability and suitability of various compute and data resources. In short, a flexible data and processing fabric is needed to enable the dynamic redirection of data and compute tasks throughout the lifecycle of an experiment. In this talk, we illustrate how we easily leveraged Globus services to instrument the ACE research testbed at the Oak Ridge Leadership Computing Facility with flexible data and task orchestration capabilities.
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...Juraj Vysvader
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I didn't get rich from it but it did have 63K downloads (powered possible tens of thousands of websites).
We describe the deployment and use of Globus Compute for remote computation. This content is aimed at researchers who wish to compute on remote resources using a unified programming interface, as well as system administrators who will deploy and operate Globus Compute services on their research computing infrastructure.
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus
As part of the DOE Integrated Research Infrastructure (IRI) program, NERSC at Lawrence Berkeley National Lab and ALCF at Argonne National Lab are working closely with General Atomics on accelerating the computing requirements of the DIII-D experiment. As part of the work the team is investigating ways to speedup the time to solution for many different parts of the DIII-D workflow including how they run jobs on HPC systems. One of these routes is looking at Globus Compute as a way to replace the current method for managing tasks and we describe a brief proof of concept showing how Globus Compute could help to schedule jobs and be a tool to connect compute at different facilities.
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Shahin Sheidaei
Games are powerful teaching tools, fostering hands-on engagement and fun. But they require careful consideration to succeed. Join me to explore factors in running and selecting games, ensuring they serve as effective teaching tools. Learn to maintain focus on learning objectives while playing, and how to measure the ROI of gaming in education. Discover strategies for pitching gaming to leadership. This session offers insights, tips, and examples for coaches, team leads, and enterprise leaders seeking to teach from simple to complex concepts.
Software Engineering, Software Consulting, Tech Lead.
Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Security,
Spring Transaction, Spring MVC,
Log4j, REST/SOAP WEB-SERVICES.
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Globus
The U.S. Geological Survey (USGS) has made substantial investments in meeting evolving scientific, technical, and policy driven demands on storing, managing, and delivering data. As these demands continue to grow in complexity and scale, the USGS must continue to explore innovative solutions to improve its management, curation, sharing, delivering, and preservation approaches for large-scale research data. Supporting these needs, the USGS has partnered with the University of Chicago-Globus to research and develop advanced repository components and workflows leveraging its current investment in Globus. The primary outcome of this partnership includes the development of a prototype enterprise repository, driven by USGS Data Release requirements, through exploration and implementation of the entire suite of the Globus platform offerings, including Globus Flow, Globus Auth, Globus Transfer, and Globus Search. This presentation will provide insights into this research partnership, introduce the unique requirements and challenges being addressed and provide relevant project progress.
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfJay Das
With the advent of artificial intelligence or AI tools, project management processes are undergoing a transformative shift. By using tools like ChatGPT, and Bard organizations can empower their leaders and managers to plan, execute, and monitor projects more effectively.
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Mind IT Systems
Healthcare providers often struggle with the complexities of chronic conditions and remote patient monitoring, as each patient requires personalized care and ongoing monitoring. Off-the-shelf solutions may not meet these diverse needs, leading to inefficiencies and gaps in care. It’s here, custom healthcare software offers a tailored solution, ensuring improved care and effectiveness.
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Globus
Large Language Models (LLMs) are currently the center of attention in the tech world, particularly for their potential to advance research. In this presentation, we'll explore a straightforward and effective method for quickly initiating inference runs on supercomputers using the vLLM tool with Globus Compute, specifically on the Polaris system at ALCF. We'll begin by briefly discussing the popularity and applications of LLMs in various fields. Following this, we will introduce the vLLM tool, and explain how it integrates with Globus Compute to efficiently manage LLM operations on Polaris. Attendees will learn the practical aspects of setting up and remotely triggering LLMs from local machines, focusing on ease of use and efficiency. This talk is ideal for researchers and practitioners looking to leverage the power of LLMs in their work, offering a clear guide to harnessing supercomputing resources for quick and effective LLM inference.
3. “Some decisions are consequential
and irreversible or nearly
irreversible [..] these decisions
must be made methodically,
carefully, slowly, with great
deliberation and consultation”
— Jeff Bezos, letter to shareholders, 2015
Decisions
Image source: wikipedia
4. “If you walk through and don’t like
what you see on the other side,
you can’t get back to where you
were before. We can call these
Type 1 decisions.”
— Jeff Bezos, letter to shareholders, 2015
Irreversible Decisions
5. “But most decisions aren’t like that
– they are changeable, reversible –
they’re two-way doors. If you’ve
made a suboptimal Type 2 decision,
you don’t have to live with the
consequences for that long. You
can reopen the door and go back
through.”
— Jeff Bezos, letter to shareholders, 2015
Reversible Decisions
6. Architecturally significant?
• Cost of change
• Strategic
• Address challenges
• create systems with desired
capabilities and properties
• under forces and constraints
• that are demanding, push
the limits, require design
attention
Architecture Decisions
• System outcomes
• cross-cutting concerns
• require organizational will
• First/early/before/not yet
• create “ground under the feet”
• reversible/irreversible
7. Super hella important
decisions of great
consequence to
• Structural integrity
• Design integrity
• Strategic impact
Architecture Decisions
Need clues – stat!
8. Kinds of clues:
• tips, hints, heuristics, …
principles, laws
• patterns, designs, …
• analogies, …
And clues on getting clues
What Do We Want? Clues!
Image source: Matthew Jones
9. Good, right, successful Architecture
Good: technically sound
Right: meets stakeholder needs
Successful: delivers value
What Do We Want?
11. The architect’s SCARS:
• Separation of Concerns
• crisp and resilient
Abstractions
• balanced distribution of
Responsibilities
• strive to Simplify — Grady Booch
Good: Architecture
12. “I go along with the natural
makeup”…
“when I come to the tricky parts,
I slow down”
— Chuang Tzu:
“The Dexterous Butcher”
SCARS: Separation of Concerns
13. ABATIS, n. [1.] Rubbish in front of a
fort, to prevent the rubbish outside
from molesting the rubbish inside.
— Ambrose Bierce, Devil’s Dictionary
Image: Engineering and the Mind’s Eye
“Design things to make their
performance as insensitive to the
unknown or uncontrollable external
influence as practical.” — Eb
Rechtin
SCARS: Separation of Concerns
16. SCARS: crisp Abstractions
"The responsibility of architecture is the
architecture of responsibility.“
— Tom Graves (as paraphrased by Jan van Til)
17. SCARS: crisp Abstractions
“Things that are cohesive, [..] naturally stick to
each other because they are of like kind, or
because they fit so well together.[..] the pieces
all seem to be related, they seem to belong
together, and it would feel somewhat unnatural
(it would result in tight coupling!) to pull them
apart” — Glenn Vanderburg
18. Single Responsibility at the level of
abstraction of the abstraction
SCARS: crisp Abstractions
“The responsibility of architecture is the
architecture of responsibility.”
-- Jan van Til
19. SCARS: crisp Abstractions
"To find the right abstraction, guess. If it exhibits
the right properties, stop. "— Jessica Kerr
21. “We propose instead that one begins with a
list of difficult design decisions or design
decisions which are likely to change. Each
module is then designed to hide such a
decision from the others.” — David Parnas
SCARS: crisp and resilient Abstractions
22. Resilient under change
SRP: each software module should have one and
only one reason to change (Uncle Bob Martin)
Retrospective (Feathers)
Prospective (thought experiments)
SCARS: resilient Abstractions
23. “disorder is easier and more
permanent than order, which is difficult
and temporary”
— Jeremy Campbell
SCARS: resilient Abstractions
24. “There was a wall. It did not look important. It was
built of uncut rocks roughly mortared. An adult
could look right over it, and even a child could climb
it. Where it crossed the roadway, instead of having
a gate it degenerated into mere geometry, a line,
an idea of boundary. But the idea was real. It was
important. For seven generations there had been
nothing in the world more important than that wall.
Like all walls it was ambiguous, two-faced. What
was inside it and what was outside it depended
upon which side of it you were on.”
— Ursula K. Le Guin, The Dispossessed
Image: welshwaller.files.wordpress.com/2013/01/llwest-and-elan-valley-017.jpg
SCARS: Separation of Concerns
25. Boundaries: Conway’s Law
“Any organization that designs a
system (defined broadly) will
produce a design whose structure
is a copy of the organization's
communication structure.”
—Melvyn Conway (in 1968!)
Separate, and Keep Separate
29. “disorder is easier and more
permanent than order, which is difficult
and temporary”
— Jeremy Campbell
SCARS: strive to Simplify
30. SCARS: strive to Simplify
“An evolving system increases its
complexity unless work is done to
reduce it.” — Meir Lehman
31. SCARS: strive to Simplify
“Every program attempts to expand
until it can read mail. Those programs
which cannot so expand are replaced
by ones which can.”
— Jamie Zawinski
32. “Do the simplest thing that could possibly
work”
Occam’s Razor: the simplest solution is
usually the correct one
YAGNI
SCARS: strive to Simplify
33. Chad Fowler: “The older I get, the more I realize
the biggest problem to solve in
tech is to get people to stop
making things harder than they
have to be.”
Michael Feathers: “It's not that easy.”
SCARS: strive to Simplify
36. “old code doesn’t die; you have
to kill it”
— Grady Booch
SCARS: strive to Simplify
37. StranglerApplication: “An alternative route is
to gradually create a new system around the
edges of the old, letting it grow slowly over
several years until the old system is
strangled.”
— Martin Fowler
SCARS: strive to Simplify
38. The architect’s SCARS:
• Separation of Concerns
• crisp and resilient
Abstractions
• balanced distribution of
Responsibilities
• strive to Simplify — Grady Booch
Good: Architecture
40. Image: from Undoing the harm of layers by Bjørn Bjartnes
Good: Architecture 💔
Actually, it looks more like this
41. “we have to keep it crisp,
disentangled, and simple if we
refuse to be crushed by the
complexities of our own
making...”
— Dijkstra
SCARS: Crisp, disentangled
42. “Architecture represents the
significant design decisions that
shape a system, where significant is
measured by cost of change”
— Grady Booch
Architecture Decisions
43. • Pay more attention to
consequential
irreversible decisions
• Make more decisions
reversible
44. Decoupled modular structure
Reversible
• Isolate impact of change
• Isolate arenas of uncertainty and experiment
• Increase replaceability
• Increase responsiveness/adaptability
• Reduce complexity
• separate concerns, reveal intent: increase
comprehensibility
46. “If you're good at course
correcting, being wrong may be
less costly than you think”
— Jeff Bezos
Image source: wikipedia
Reversible
47. Small changes, quick feedback, easy to undo
Reversible
• Development servers. Each engineer has their own copy
of the entire site. Engineers can make a change, see the
consequences, and reverse the change in seconds
without affecting anyone else.
• Code review. Engineers can propose a change, get
feedback, and improve or abandon it in minutes or hours,
all before affecting any people using Facebook.
• Internal usage. Engineers can make a change, get
feedback from thousands of employees using the change,
and roll it back in an hour.
• Staged rollout. We can begin deploying a change to a billion
people and, if the metrics tank, take it back before problems
affect most people using Facebook.
• Dynamic configuration. If an engineer has planned for it in the
code, we can turn off an offending feature in production in
seconds. Alternatively, we can dial features up and down in
tiny increments (i.e. only 0.1% of people see the feature) to
discover and avoid non-linear effects
https://m.facebook.com/notes/kent-beck/taming-complexity-with-reversibility/
49. “The defining properties
of any system, are
properties of the whole,
which none of the parts
have. If you take the
system apart, it loses its
essential properties”
— Russell Ackoff
Good: Shape a System
50. Essence of systems is:
• Relationships
• Interfaces
• Form
• Fit
• Function
— Eberhardt Rechtin
Systems
51. Essence of systems is:
• Relationships
• Interfaces
“Relationships among the elements are what give
systems their added value”
“The greatest leverage in architecting is at the interfaces”
“It is inadequate to architect up to the boundaries or interfaces of a system; one must
architect across them.” – Robert Spinrad, quoted by Eb Rechtin
Systems: Interfaces
architect across
52. “A lock is a lock because of the key [--] when
we design abstractions for lock, we are also
[in parallel] designing abstractions for key”
— Shripad Agashe
Systems: Interfaces
53. “Don’t partition by slicing through regions
where high rates of information exchange are
required” – Eb Rechtin
Systems: Interfaces
Image source: Martin Fowler’s bliki
54. Posit structure Explore behavior
Revise structure
Explore — with sketches
“Design is not just what it looks like and feels like.
Design is how it works.” — Steve Jobs
Systems: How it Works
55. Essence of architecture is:
• Structuring
• Simplification
• Compromise
• Balance
— Eberhardt Rechtin
Systems
56. “dependencies are a
tradeoff between the
cost of maintaining the
code yourself (and
implementing it) & the
cost of the risk of
breakage”
— Kent Beck
Systems: Tradeoffs/Compromise
58. "Always design a thing by considering it in
its next larger context" -- Eliel Saarinen
Context System-in-Context
(use, dev, ops)
System
(Ecosystem)
Architecture
structure and
mechanisms
“Requirements”
design of system
capabilities
Strategy
ecosystem
interventions
Right: Fit to Context
59. Architecture Decisions
Title: short noun phrase
Context: desired outcomes and the forces
at play (probably in tension)
Decision: describes our response to these
forces
Status: proposed, accepted, deprecated or
superseded
Consequences: describes the resulting
context, after applying the decision
— Michael Nygard, Documenting
Architecture Decisions, Nov 2011
Right: Fit to Context
61. Context: Factors
Image source: Sarah Mei on Twitter
“Design quality is not a
property of the code. It's
a joint property of the
code and the context in
which it exists.”
– Sarah Mei
63. Getting Clues: Look/Change PoV
“You don't understand
something until you
understand it more
than one way”
— Marvin Minsky
Image:
wikipedia.org/wiki/Marvin_Minsky#/media/File:Marvin_Minsky_at_OLPCb.jpg
64. “If you haven’t thought of
three possibilities, you
haven’t thought enough.”
— Jerry Weinberg
Rule of Three
Getting Clues: Look/Change PoV
65. Expose your mental models to the open air.
Remember, always, that everything you
know, and everything everyone knows, is only
a model.
Get your model out there where it can be
shot at.
Invite others to challenge your assumptions
and add their own.
Instead of becoming a champion for one
possible explanation or hypothesis or model,
collect as many as possible.
— Donella Meadows
Getting Clues: Look/Change PoV
Image source: Donella Meadows Institute
72. Architecture Story
“I confess that there are several parts of this
constitution which I do not at present
approve, but I am not sure I shall never
approve them: For having lived long, I have
experienced many instances of being obliged
by better information, or fuller
consideration, to change opinions even on
important subjects, which I once thought
right, but found to be otherwise. It is
therefore that the older I grow, the more
apt I am to doubt my own judgment, and to
pay more respect to the judgment of
others.”
— Benjamin Franklin
73. “it seems to have been reserved to the
people of this country, [..], to decide the
important question, whether societies of
men are really capable or not, of
establishing good government from
reflection and choice, or whether they
are forever destined to depend, for their
political constitutions, on accident and
force.”
Federalist No.1
Architecture Story
75. Ask
• [not just] What do users need?
• [but also] What do developers and testing need?
• [and] What does operations need?
• [and] What do others in the value network need?
to be successful
76. Ask
• What does the code need?
• What does the system need
• What does the ecosystem need?
to be successful
“Systems develop goals
the minute they come
into being”
— John Gall
78. The Clue-Space: More than Technical
Personal Organizational
Technical
Strategic
“Architecture is a way
of thinking that is
inescapably concerned
with everything”
— Dana Bredemeyer
79. Where to Go for More Clues
Personal Organizational
Technical
Strategic
Strategic Effectiveness
• Strategic context and
situational awareness
• Mapping, ecosystems, value
networks and differentiation
• Technology radars, capability
evolution and trends
• Operating models
• How we create value
• How we make money(/survive)
80. Strategy: Why go there?
Personal Organizational
Technical
Strategic
• You’re leading; where to?
• Inform/influence business
direction, given technology
capabilities and challenges
• Shape technical direction, to
enable business direction
• Architecture decisions
• Understand shaping forces,
differentiating value/outcomes
• Achieve fit to context / purpose
81. Where to Go for More Clues
Personal Organizational
Technical
Strategic
Organizational Effectiveness
• Leadership and social
dynamics
• Building relationships, trust and
teams
• Working across the organization
• Persuasion and influence;
negotiation, disagreement
• Decision making, judgment, effects
of groups
• …
82. Where to Go for More Clues
Personal Organizational
Technical
Strategic
Personal Effectiveness
• How we work: cognition (4Es), ..
• Empathy and design
imagination
• Cognitive amplifiers, fallibilities
and biases
• Perception and meaning making
• Opportunity discovery; problem
solving and problem framing
• …
Sometimes we just need to get a clue, and this talk has a bucket full.
The idea of a clue bucket came up when we were working on a project and grasping around for ideas, and I said “I need a clue bucket so I can just reach in a get a clue.”
We develop, through direct and indirect experience, "a considerable body of contextual sense" -- that is, "a knowledge of what is reasonable within a given context" (Rechtin, 1991). Engineering heuristics, or rules of thumb, are "statements of common, or contextual, sense that aid in concept development, problem solving, decision making, or judgment"(Rechtin, 1991). They can be descriptive (what is the situation) or prescriptive (what to do about it) (Rechtin, 1991).
"Heuristics offer plausible approaches to solving problems, not infallible ones."— Rebecca Wirfs-Brock
Image created from “15 Fundamental Laws of Software Development” by Matthew Jones, https://exceptionnotfound.net/fundamental-laws-of-software-development/
Let’s talk first about creating a good architecture – one that fellow architects would recognize as having the properties of a good architecture
Let’s talk first about creating a good architecture – one that fellow architects would recognize as having the properties of a good architecture
Grady Booch identified these four “fundamentals remain fundamental“ to architectural design.
mne·mon·ic — scars
Taking the first of those (Separation of Concerns), and to illustrate surfacing and illuminating heuristics, here's a story from the Tao. It is the story of the dextrous butcher. In one translation, the master cook tells us:
Chuang Tzu — Taoist thinker
‘Cook Ting was cutting up an ox for Lord Wen-hui. As every touch of his hand, every heave of his shoulder, every move of his feet, every thrust of his knee — zip! zoop! He slithered the knife along with a zing, and all was in perfect rhythm, as though he were performing the dance of the Mulberry Grove or keeping time to the Ching-shou music.
“Ah, this is marvelous!” said Lord Wen-hui. “Imagine skill reaching such heights!”
Cook Ting laid down his knife and replied, “What I care about is the Way, which goes beyond skill. When I first began cutting up oxen, all I could see was the ox itself. After three years I no longer saw the whole ox. And now — now I go at it by spirit and don’t look with my eyes. Perception and understanding have come to a stop and spirit moves where it wants. I go along with the natural makeup, strike in the big hollows, guide the knife through the big openings, and following things as they are. So I never touch the smallest ligament or tendon, much less a main joint.
“A good cook changes his knife once a year — because he cuts. A mediocre cook changes his knife once a month — because he hacks. I’ve had this knife of mine for nineteen years and I’ve cut up thousands of oxen with it, and yet the blade is as good as though it had just come from the grindstone. There are spaces between the joints, and the blade of the knife has really no thickness. If you insert what has no thickness into such spaces, then there’s plenty of room — more than enough for the blade to play about it. That’s why after nineteen years the blade of my knife is still as good as when it first came from the grindstone.
“However, whenever I come to a complicated place, I size up the difficulties, tell myself to watch out and be careful, keep my eyes on what I’m doing, work very slowly, and move the knife with the greatest subtlety, until — flop! the whole thing comes apart like a clod of earth crumbling to the ground. I stand there holding the knife and look all around me, completely satisfied and reluctant to move on, and then I wipe off the knife and put it away.”
“Excellent!” said Lord Wen-hui. “I have heard the words of Cook Ting and learned how to care for life!”’ Translated by Burton Watson (Chuang Tzu: The Basic Writings, 1964)
It goes according to natural laws, Striking apart large gaps, Moving toward large openings, Following its natural structure. …
Nevertheless, every time I come across joints, I see its tricky parts, I pay attention and use caution,
What do we extract, that helps guide us in architecting? Two heuristics jump out:
follow the natural structure
when we come to the tricky parts, slow down
software doesn't have natural topology. Or does it?
The system boundary is an obvious candidate: separate interactions at the boundary from the core of the system.
In the founding classic of system architecture, Eberhardt Rechtin presents heuristics gleaned from his amazing career as a system architect in aerospace, and master teacher of system architects in the seminal program he created at USC. One of these heuristics (is a "turtles all the way down" sort of thing, but applies also at the system level):
"Design things to make their performance as insensitive to the unknown or uncontrollable external influence as practical."
That, for me anyway, has echoes of fort design and Ambrose Bierce' Devil's Dictionary definition of abatis:
"rubbish in front of a fort, to prevent the rubbish outside from molesting the rubbish inside"
A fort visually, and in intent, has echoes of Alistair Cockburn's hexagonal architecture (pattern). Here, adapters at the system boundary, shield the (core) application (code) from interactions with the outside, keeping business logic uncontaminated by the peculiarities of external agents or systems and their states, interactions and interaction paradigms, and keeping business logic from leaching into user, or other system, interface code. Moreover, ports and adapters are a first mechanism of address for cost of change, partitioning the system boundary into plug-and-play access points.
One place to go, in looking for the natural topology, to find the natural shape to follow in creating internal system boundaries, is the "problem" domain — that is, the domain(s) being served by the system(s) we're evolve-building. This brings us to bounded contexts and heuristics and guidance in Domain-Driven Design to suggest system and component or microservice boundaries.
http://martinfowler.com/bliki/BoundedContext.html
Another place to go, in looking for abstractions, is back to 1989 and Ward Cunningham and Kent Beck's CRC cards, but repurposed for components, along with a heuristic that takes the form of a neat antimetabole (thanks to Jan van Til's paraphrase of a Tom Graves point):
"The responsibility of architecture is the architecture of responsibility."
Which points us in the direction of identifying responsibilities related to system capabilities and properties, and the arrangement of responsibilities. Separating responsibilities along the lines of concerns. [This is not the only way we use the term "separation of concerns' in software design, of course.]
The dual to separation of concerns is a coalescence or cohesion of concerns?
That is, not only are we looking for what to pull apart, but what to keep together to form crisp and resilient abstractions.
We use abstraction in different ways — levels of abstraction, abstractions as elements of code we work with, the activity of abstracting. J. Edsger Dijkstra (The Humble Programmer, 1972) noted:
http://vanderburg.org/blog/2011/01/31/cohesion.html
We use abstraction in different ways — levels of abstraction, abstractions as elements of code we work with, the activity of abstracting. J. Edsger Dijkstra (The Humble Programmer, 1972) noted:
“The purpose of abstracting is not to be vague, but to create a new semantic level in which one can be absolutely precise.”
Here, we're talking about heuristics for identifying architectural elements (or components, or microservices if those are the architectural elements of the system in question). A crisp abstraction has a clear, unifying purpose or cohesive identity; it has, in effect,
a single responsibility at the level of abstraction of the abstraction.
That is, there is high cohesion among its sub-responsibilities, and all contribute to the element's distinguishing purpose, or single responsibility. A single, if you like, defining job-to-be-done.
This suggests a focus on responsibilities as an avenue to system (de)composition. We identify responsibilities and assign to them components, working in either (and both!) direction: start with a first cut notion of components the system will need, and identify and allocate responsibilities to them; or start with responsibilities evident from what the system needs to do, and factor to find components. A related heuristic takes the form:
We take a guess as a starting point, and improve on it: Run thought experiments and model (use cases or user stories; focus on one property, then another, etc.) to flush out responsibilities we overlooked in our initial guess. Change perspective, and review the responsibilities and abstractions in the view of, for example, thinking through allocation to the physical system topology, or a system change. Be disciplined in seeking alternatives — for example, by emphasizing a different requirement. Do this quickly and cheaply, to get a good enough starting point to build the next increment of code, and iterate on the design. Update the responsibilities lists as we do so.
These lists of responsibilities are a powerful and largely overlooked/underused tool in the architect's toolbelt. If the responsibilities don't cohere within an overarching responsibility, or purpose, that should trip the architect's boundary bleed detectors. We may need to refactor responsibilities, and discover new components in the process. We think that "naming things" is the big problem of software development, but "places to put things" is the proximate corollary.
Heuristics don't take away the need to think, to reason and try things out. They help us identify what to think about, as we do so, and may suggest how to go about it (better). In another of the foundational classics of our field, David Parnas (On the Criteria To Be Used in Decomposing Systems into Modules, 1972) proposes:
"that one begins with a list of difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others. "
The other heuristic in his criteria for decomposing (already quoted above) is:
"[begin] with a list of difficult design decisions [..] Each module is then designed to hide such a decision from the others ."
As an aside, we also recommend identifying key architectural challenges when we're determining architectural strategy, to think about principles we might craft to help shape our approach to the challenge. And this approach is again useful, when identifying abstractions, or (re)assessing already identified abstractions for goodness.
In a modular approach, parts of the system that are unstable, due to uncertainty and experimentation to resolve that uncertainty, can be shielded from other, better understood and more stable parts of the system.
That's two heuristics, and thanks to Robert Martin, the second has primary place in the SOLID set of principles that have been a touchstone of software design, and object-oriented design in particular:
Single Responsibility Principle (SRP): a class should have one and only one reason to change
Stuart Brand, writing about pace or shearing layers in building architecture in How Buildings Learn, observed that different parts of a structure change at different rates (with the building site, and then the structure, being least likely to change, given the cost and difficulty of doing so; and the stuff inside being the most likely to change). This observation gives rise to the heuristic:
keep things that change together, together
Jeremy Campbell, GRAMMATICAL MAN: Information, Entropy,Language and Life
Systems evolve – we’re constantly adapting them.
Complexity from accrual
Complexity from mess
Accidental complexity
Versus inherent complexity
Several things in the quote are striking:
An idea of boundary
But the idea was real. Important.
Ambiguous.
Two-faced.
What was inside it, and what was outside it, depended on what side you were on.
But what about the boundaries within the boundary? These abstractions we use to give our system internal form, must be invented. They are conceits. In every sense of the word, perhaps. At least, when asked about the granularity of microservices, I point to the WELC master going "about so big." Obviously a joke, the joke being on us, the right answer of course being "the right size, and no bigger." Which is not an answer, but where can we look, for a better answer?
One place to go, in looking for the natural topology, to find the natural shape to follow in creating internal system boundaries, is the "problem" domain -- that is, the domain(s) being served by the system(s) we're evolve-building. And indeed, we're broadly using bounded contexts in Domain-Driven Design to suggest microservice boundaries. And when we get to the tricky parts, like "customer" or "product" that have potentially overlapping, yet different, meanings in different domains, we slow down, and move more carefully. A customer, after all, experiences themselves to be one person through all touchpoints with "the system," and doesn't want to feel like the system cleaved them brutalistically. So we separate domains, but the architect is noting this point of articulation, this tricky part, where we have to move more carefully.
What is often the case with something we might call common sense -- even if we mean the contextual sense variety -- is that it looks obvious once noted. And yet it time and again that a system design ends up with a component that has a high center of gravity or something, and attracts way more responsibility than other components (common enough it goes by a name, "god class"). "A single responsibility at the level of abstraction of the abstraction" is a judgment call (or set of judgment calls). One way to check our judgment is to apply the heuristic: consider the distribution of responsibilities for balance.
The last of the fundamentals organized by the SCARS mnemonic, reminds us to strive to simplify. In response to H.D. Thoreau's "simplify, simplify," Ralph Waldo Emerson reportedly retorted 'One "simplify" would have sufficed.'
Eb Rechtin, on the other hand, offers us the heuristic:
"Simplify, simplify, simplify. "
Another heuristic (Rechtin, 1991) might illuminate:
"Communicate, communicate, communicate. "
That is, we need to simplify, and simplify again, and again, maintaining a discipline of repeatedly simplifying. And we need to communicate the need, and underscore the need, to simplify. Complexity is something we both embrace (we want more than hammers in our toolsets) and eschew (complexity costs -- attention, errors, ..., resources), so we need to harness complexity and reduce accidental, gratuitous, and unnecessary complexity.
“Everything that needs to be said has already been said. But since no one was listening, everything must be said again.
— André Gide
Jeremy Campbell, GRAMMATICAL MAN: Information, Entropy,Language and Life
Systems evolve – we’re constantly adapting them.
Complexity from accrual
Complexity from mess
Accidental complexity
Versus inherent complexity
There's considerable discipline in applying Occam's Razor (also Ockham's razor or Ocham's razor; Latin: lex parsimoniae "law of parsimony"):
Occam's razor is the problem-solving principle that the simplest solution tends to be the right one.
That is, given a solution, it takes discipline and discernment to look for a simple(r) solution.
Simplicity--the art of maximizing the amount of work not done--is essential. – Agile Manifesto, 12 Principles http://agilemanifesto.org/principles.html
Following the spirit of Bill Venner's conversation with Ward Cunningham on "do the simplest thing that could possibly work," we form the heuristic: "do the simplest thing that is good enough."
We're looking to simplify our system design, and if we only consider the system internals, the obvious can be hidden in plain sight -- the simplest way to reduce complexity, is to not add to it:
Steve Jobs: “The hardest thing is, when you think about focusing, focusing is saying, yes, no, “he said, walking backwards as his argument changed direction, his hands splayed out wide. “Focusing is about saying no. Focusing is about saying no,” he repeated, as scattered applause breaks out.
“You’ve got to say no, no no and when you say no you piss off people"
http://observer.com/2011/10/steve-jobs-is-dead-has-died-passed-away/
"A primary cause of complexity is that software vendors uncritically adopt almost any feature that users want." — Niklaus Wirth
"I wasn't the one pushing things in the wrong direction, but I should have been the one to stop it." -- Chad Fowler
Everything you use, must save you time and pay for itself – Martin Thompson
“Inside every large program is a small program struggling to get out.” - Tony Hoare
"A programming language is low level when its programs require attention to the irrelevant." - Alan Perlis
spent some time in the rain forests on the Queensland coast. One of the natural wonders of this area are the huge strangler vines. They seed in the upper branches of a fig tree and gradually work their way down the tree until they root in the soil. Over many years they grow into fantastic and beautiful shapes, meanwhile strangling and killing the tree that was their host.
This metaphor struck me as a way of describing a way of doing a rewrite of an important system. Much of my career has involved rewrites of critical systems. You would think such a thing as easy - just make the new one do what the old one did. Yet they are always much more complex than they seem, and overflowing with risk. The big cut-over date looms, the pressure is on. While new features (there are always new features) are liked, old stuff has to remain. Even old bugs often need to be added to the rewritten system.
An alternative route is to gradually create a new system around the edges of the old, letting it grow slowly over several years until the old system is strangled. Doing this sounds hard, but increasingly I think it's one of those things that isn't tried enough.
The most important reason to consider a strangler application over a cut-over rewrite is reduced risk.
Booch's fundamentals yield a system where responsibilities have a clear and well-understood location in the system; architectural elements provide clear realms of test, experiment, and change; and elements are loosely coupled.
protect by not naming the source!
Everything you use, must save you time and pay for itself – Martin Thompson
“Inside every large program is a small program struggling to get out.” - Tony Hoare
"A programming language is low level when its programs require attention to the irrelevant." - Alan Perlis
Abstraction depends on context
When I heard the statement “A lock is a lock because of the key”, it was one of the exhilarating insights I have listened to. To put in perspective, if you happen to lose the key to the lock, the lock is nothing but a dead weight. So when we design abstractions for lock, we are also parallelly designing abstractions for key. So our prior knowledge is playing a role there. We are always designing abstraction in pair most of the time sub-consciously. The abstraction we derive is nothing but interactions between the two components of the coupling. As coupling changes the abstraction should also change. But since only a part of the coupling is exhibited in code, the other part is often left to interpretations and assumptions.
https://shripad-agashe.github.io/2 018/03/19/abstractions/
Interfaces -- Whether Remote or in-Process is a shaping influence om the interface
although you can encapsulate many things behind object boundaries, you can't encapsulate the remote/in-process distinction. An in-process function call is fast and always succeeds (in that any exceptions are due to the application, not due to the mere fact of making the call). Remote calls, however, are orders of magnitude slower, and there's always a chance that the call will fail due to a failure in the remote process or the connection.
https://martinfowler.com/articles/distributed-objects-microservices.html
https://twitter.com/KentBeck/status/713044232722718720 in response to
NPM -- Left pad (11 LOC)
“Every package that you use adds yet another dependency to your project. Dependencies, by their very name, are things you need in order for your code to function. The more dependencies you take on, the more points of failure you have. Not to mention the more chance for error: have you vetted any of the programmers who have written these functions that you depend on daily?” http://www.haneycodes.net/npm-left-pad-have-we-forgotten-how-to-program/
"Always design a thing by considering it in its next larger context" -- Eliel Saarinen
What do we do — selective attention and bubbles?
move to different PoV — value of the process! not to be a big framework thing but scaffolding; and reminder of where we can go (next) to take a different look, etc.
Also, a matter of discipline — self-discipline, and discipline of engineering — probe, criticism, come up with alternatives, model, reason, come up with counter arguments
We see things not as they are, but as we are”
— Anais Nin
Virginia Plan — Madison’s notebook
On May 29, 1787, Virginia delegate Edmund Randolph proposed what became known as "The Virginia Plan." Written primarily by fellow Virginian James Madison, the plan traced the broad outlines of what would become the U.S. Constitution: a national government consisting of three branches with checks and balances to prevent the abuse of power. In its amended form, this page of Madison's plan shows his ideas for a legislature. It describes 2 houses: one with members elected by the people for 3-year terms and the other composed of older leaders elected by the state legislatures for 7-year terms. Both would use population as a basis for dividing seats among the states.
The Virginia Plan went through several revisions before it was finalized.
We the People of the United States, in Order to form a more perfect Union, establish Justice, insure domestic Tranquility, provide for the common defense, promote the general Welfare, and secure the Blessings of Liberty to ourselves and our Posterity, do ordain and establish this Constitution for the United States of America.
Commitment to making other people successful
Commitment to making other people successful
• good: technically sound;
• right: meets stakeholders goals and fits context and purpose; and
• successful: actually delivers strategic outcomes.
“Much of the essence of building a program is in fact the debugging of the specification.” — Fred Brooks