Resources

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

Oct 20 2021

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

 Breaking Dependencies: The SOLID Principles

Oct 20 2021

SOLID is an abbreviation for five of the most important software design principles:\n- (S)ingle Responsibility Principle\n- (O)pen-Closed Principle\n- (L)iskov Substitution Principle\n- (I)nterface Segregation Principle\n- (D)ependency Inversion Principle\n\n\nFor almost two decades, these principles have proven to be a valuable set of guidelines to cope with software dependencies. Although initially introduced as guidelines for object-oriented programming, they have become a universal set of guidelines that can be used equally well for procedural, functional or generic programming. In this talk I'll recap the SOLID principles and explain why they form such a valuable set of universal design guidelines. Also, I'll go into detail about several common misconceptions.

SOLID Video

 Engineering You • Martin Thompson

Sep 16 2021

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.\n\nIn this talk, we explore the individual practices and techniques that can help bring out the engineer in you.

Design Philosophy Video

 Django structure for scale and longevity

Aug 18 2021

Why?\n\nDjango is great.\n\nBut as we add new features, as our dev team grows and the software needs to be stable on production, things can get quite messy.\n\nWe are going to look at some common patterns, derived from experience, on how to structure your Django project for scale and longevity.\n\nWhat?\n\nMain topics are:\n\n\nDjango service layer or where should business logic live?\nUsing Django Rest Framework in a clean and repeatable way and combining it with the service layer.\nTesting everything that matters, without repeating ourselves in different tests.\n\n\nWe 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.\n\nThe examples showed in this talk are derived from working with Django in the last 5 years on projects with:\n\n\nDaily production usage and production deploys.\nDozens of apps.\nHundreds of models and APIs.\nTens of integrations working simultaneously.\nTeams of 5 to 10 people.\n\n\nWho?\nKey takeaways from the talk:\n\n\nIncreased productivity when developing with Django.\nDeeper understanding of the software development process with Django.\nDemo project with everything mentioned in it.\n\n\nThe talk is great for all levels of Django knowledge - from beginners to advanced users and teams.\n\nHow\n\nThe 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.\n\nBreakdown of the talk:\n\n\nDjango service layer:\n\nFat models or fat views?\nWhere do I put my business logic?\nWhat is a service and what goes into a service?\nWhat is a selector and what goes into a selector?\n\nGeneral Django structure:\n\nHow many apps should I have?\nStructuring your code so youр team can be more productive and have less conflicts.\nCommon modules and utilities.\n\nDoing APIs with Django Rest Framework:\n\nSplitting APIs in 2 groups - "giving data" and "taking data"\nUsing a lot of generics for "give data"\nWhen do to selectors?\nUsing no generics for "take data" (APIView + Services)\nHandling errors from services\nInlining serializers and avoiding serializers reuse\nA neat inline_serializer util\nIntroducing general error formatting for your API\n\nTesting all of that - what should be and not be tested?

Design Django Python Video

 The Pillars of Domain-Driven Design

May 16 2021

Domain-Driven Design is neither a method nor a technology, it is a culture, a way of thinking about the needs of the customers first and putting an emphasis on their language and human interactions. The promise of DDD is to tackle complexity in the heart of software, and the means are plentiful and can be overwhelming. There are three pillars though, on which the whole approach stands. A focus on learning, language, and empathy. With the right mindset, it becomes simple to derive good models, keep them pure and aligned with the business. Simple is not easy, but done right Domain-Driven Design transforms everything in your organization from code to culture, from agile to architecture.

DDD Event Sourcing Video

 Unconditional Code • Michael Feathers

Mar 18 2021

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