#Design

 CUPID—for joyful coding

What started as lighthearted iconoclasm, poking at the bear of SOLID, has developed into something more concrete and tangible. If I do not think the SOLID principles are useful these days, then what would I replace them with? Can any set of principles hold for all software? What do we even mean by principles?

Design SOLID

May 12 2022

 Strategic Domain-Driven Design

If you’re a software developer or architect who wants to play a more influential role in ensuring your software systems are optimised to support business goals, then you need to learn about the benefits and techniques of modern strategic domain-driven design. Many people think that DDD is about software design patterns, but that’s only a small part, and the least important part of DDD. In fact, Eric Evans wishes he’d focused more on the strategic aspects of DDD in his famous book (Domain-Driven Design: Tackling Complexity in the Heart of Software) and pushed the tactical coding patterns to the back! Strategic domain-driven design is about truly understanding the business domain. It involves collaboratively modelling business processes using advanced modelling techniques, like Event Storming and Domain Storytelling, with domain experts on an ongoing basis. One of the core outcomes of strategic DDD is identifying cohesive modules, known as bounded context. Bounded contexts help you to create a maintainable, comprehensible codebase by isolating dependencies and delineating concepts that reference different classes of business value. In this talk, you’ll see many of the most effective bounded context design heuristics, recurring patterns in the wild, and you’ll learn how to facilitate those vital modelling sessions so you can lead the adoption of strategic DDD in your organisation.

DDD Design Video

Mar 20 2022

 A Case for Outside In Design

Software architecture should enable business agility, but often it does not happen because of the mismatch between product design and software architecture. In this talk, Sandro will describe how a software design approach, focused on behavior and also driven by external interactions and business flows, can enable better collaboration between business and technology. This talk shows techniques (used in real projects) to bring product and software design together, at the same time, produce an Agile architecture that is more resilient, focused, and fully aligned to business goals.

Architecture Design Video

Jan 3 2022

 ES Evolving a Pragmatic, Clean Architecture - A Craftsman's Guide

Are you in a mood for a brainstorm? Join this critical review of the major decisions taken in a typical enterprise application architecture and learn to balance pragmatism with your design goals. Find out how to do just-in-time design to keep as much use-cases as simple as possible. The core purpose of this presentation is to learn to strike a **balance between pragmatism and maintainability** in your design. Without continuous refactoring, a simple design will inevitably degenerate into a Big Ball of Mud, under the assault of the new features and bugfixes. On the other hand, very highly-factored code can burden the take-off of the development and end up freezing the mindset in some rigid 'a-priori' design. The end goal of this talk is to challenge you to rethink critically the architecture of your own systems, and seek ways to simplify it to match your actual needs, with a pragmatic mindset. "Architecture is the art of postponing decisions", said Uncle Bob. This talk takes this idea further and explains an optimal mindset about designing enterprise applications: Evolving (Continuously Refactoring) a Pragmatic (Simple), Clean (aka Onion) Architecture, aiming to provide Developer Safety™️ and Comfort™️. It’s the philosophy that Victor distilled over the past 5 years, designing and implementing 9 applications as IBM Lead Architect, and delivering trainings and advises to many other companies. You’ll learn how to break data into pieces (Fit Entities, Value Objects, Data Transfer Objects), how to keep the logic simple (Facades, Domain Services, logic extraction patterns, Mappers, AOP), layering to enforce boundaries (keeping DTOs out of your logic, Dependency Inversion Principle), and many more, all in a dynamic, interactive and extremely entertaining session.

Design Hexagonal Architecture Video

Oct 20 2021

 Engineering You • Martin Thompson

What are the characteristics of a good software engineer? It's a topic many people would argue endlessly about. This is not surprising given we are effectively living in the era of software alchemy. Some of the best programmers draw on strong scientific and engineering backgrounds and combine this with craft-like coding skills in a virtuous feedback cycle. In this talk, we explore the individual practices and techniques that can help bring out the engineer in you.

Design Philosophy Video

Sep 16 2021

 Django structure for scale and longevity

Why? Django is great. But as we add new features, as our dev team grows and the software needs to be stable on production, things can get quite messy. We are going to look at some common patterns, derived from experience, on how to structure your Django project for scale and longevity. What? Main topics are: Django service layer or where should business logic live? Using Django Rest Framework in a clean and repeatable way and combining it with the service layer. Testing everything that matters, without repeating ourselves in different tests. We are going to talk about when to rely on existing abstraction so it's actually helpful and when to avoid existing abstraction, and code things ourselves. The examples showed in this talk are derived from working with Django in the last 5 years on projects with: Daily production usage and production deploys. Dozens of apps. Hundreds of models and APIs. Tens of integrations working simultaneously. Teams of 5 to 10 people. Who? Key takeaways from the talk: Increased productivity when developing with Django. Deeper understanding of the software development process with Django. Demo project with everything mentioned in it. The talk is great for all levels of Django knowledge - from beginners to advanced users and teams. How The main way of getting the point across is going to be by showing regular code, talking how it can get messy and then following up with examples of improving that code. Hopefully this talk will start a lot of discussion afterwards. Breakdown of the talk: Django service layer: Fat models or fat views? Where do I put my business logic? What is a service and what goes into a service? What is a selector and what goes into a selector? General Django structure: How many apps should I have? Structuring your code so youр team can be more productive and have less conflicts. Common modules and utilities. Doing APIs with Django Rest Framework: Splitting APIs in 2 groups - "giving data" and "taking data" Using a lot of generics for "give data" When do to selectors? Using no generics for "take data" (APIView + Services) Handling errors from services Inlining serializers and avoiding serializers reuse A neat inline_serializer util Introducing general error formatting for your API Testing all of that - what should be and not be tested?

Design Django Python Video

Aug 18 2021

 Unconditional Code • Michael Feathers

Many systems are full of error checks and conditional logic. They introduce discontinuities that make reasoning difficult. In this talk, Michael Feathers will present a conceptual framework for dealing with errors, conditionality and decision making at the level of code, architecture and user interface. Often by changing design and revisiting requirements we can make various error cases impossible, and make code and architecture simpler as well as more robust.

Abstraction Design Video

Mar 18 2021

 Core Design Principles for Software Developers by Venkat Subramaniam

Writing code is easy. Writing good quality code is an entirely different story. How can we measure the quality of design? How do we know we're doing the right set of things that will lead us to a better design? In this session, we will learn about some core software design principles that help programmers every day. Instead of talking about theory and what we could potentially do, we will take on multiple examples, discuss the solution, pros and cons, and bring out key design principles that have an impact on the outcome.

Architecture Design Video

Feb 14 2016