#61 - Evolving a Clean, Pragmatic Architecture - A Software Craftman's Guide


Meeting #61 - Evolving a Clean, Pragmatic Architecture - A Software Craftman's Guide

Speaker: Victor Rentea
Sponsor: IBM
Language: Romanian
Organized in partnership with Voxxed Days CJ

18.00 - 18.30: Reception
18.30 - 19.30: Talk - Evolving a Clean, Pragmatic Architecture (programming language-agnostic)
19.30 - 20.00: Break + Food
20.00 - 21.30: Extracts you select from 1-2 training topics in Victor's curricula, live-coding in Java.

Who's the speaker?
Victor is one of the most appreciated technical trainers in Bucharest, well-known for the passion he puts in every minute of his classes. His training experience is impressive: over the past 5 years he trained 1K+ developers over 150 days of in-house sessions held at 18 companies.

Part 1: The talk.
Evolving a Clean, Pragmatic Architecture - A Software Craftsman’s Guide

The purpose of this meetup is to help developers design well-crafted code. Meaning expressive, concise design that remains flexible and testable.

The talk is an intense brainstorm, walking through the major decisions usually taken in an enterprise application architecture. The hidden intention is to challenge the participants to rethink critically their own architecture, and find ways to simplify it or restructuring it following the hexagonal (aka "Clean") architecture.

The idea of this presentation came from trying to balance pragmatism with maintainability. Without continuous refactoring, a simple design will quickly break underneath new features. On the other hand very highly-factored code can burden the take-off of the development and then end up freezing the mindset in some rigid 'a-priori' decisions.

"Architecture is the art of postponing decisions", said Uncle Bob. This talk takes this idea further and explains what Victor believes to be the ideal mindset about designing an enterprise application: Evolving a Pragmatic, Clean Evolutionary Architecture.
* Pragmatic = Keep It Short & Simple
* Clean = The Hexagonal Architecture (Dependency Inversion Principle)
* Evolutionary = Continuously Redesign, to accommodate growing features
* Architecture = A way to ensure Developer Comfort
* Testable = To grant Developer Safety

This talk is basically a summary of the design principles that Victor distilled as over the past 4 years as IBM Lead Architect, designing and developing 8 enterprise applications for a client in the banking sector (the largest client of IBM Romania). Victor also taught this philosophy to many other companies as part of his trainings, and many developers stated that it "opened their eyes".

Some things you will hear:
1) Intro: KISS, Domain-Driven Design vs Transaction Script
2) Modeling Data
The Fit Entity, that you carefully craft to help you
Value Objects and immutability
Data Transfer Objects, under the influence of the enemy
3) Extracting Logic
Mappers, that encapsulate conversion
Facades, the birthplace of logic
Extracting Domain Services for KISS or DRY
Logic Extraction Patterns
4) The Clean Architecture
Dependency Inversion Principle, allowing a 'pure' domain
Repositories, what should they contain?
External Services, how to call them cleanly?
5) Testing
Design Feedback
Each bug should be found Once!
A new style of TDD?: Extract and Split

The only requirement for attending this presentation is a lot of passion.
The talk is language-agnostic, you need just OOP understanding( Java, C#, PHP, Ruby, Scala)

The talk is on a conceptual level, but there will be some code examples to support the arguments, easily understandable by non-Java too.

Part 2: Your selection.
During the break, the participants will vote what they want us to discuss during the second part of the meetup, as much as will fit in the remaining time. The options will be extracts of the most interesting snippets from Victor's training curricula (http://www.victorrentea.ro/#training), composed of slides and live-coding in Java. The options will include: jdk8, Mocking, TDD kata, Spring @Transactional.