1 of 48

2 of 48

Software Engineer/Software Architect

www.DomainDrivenDesign.ir

www.MasodBahrami.Ir

Twitter: @masodbahrami

LinkedIn: @masoud-bahrami

GitHub: @masoud-bahrami

Language-Driven Design

http://LanguageDrivenDesign.Com

3 of 48

“Everything has been said before, but since nobody listens we have to keep going back and beginning all over again.”

--Andre Gide

4 of 48

What date was Eid al-Fitr this year?

Lunar Calendar

DDD Europe 2024

@masod-bahrami

Naming is Caring

5 of 48

the biggest fear of a Software Developer/Product Manager?

Deadline

What’s

DDD Europe 2024

@masod-bahrami

Naming is Caring

6 of 48

The deadline is approaching

We are getting close to the deadline

DDD Europe 2024

@masod-bahrami

Naming is Caring

7 of 48

The talk "DDD and LLMs" moved forward one hour.

DDD Europe 2024

@masod-bahrami

Naming is Caring

8 of 48

“Eric Evans' talk "DDD and LLMs" at DDD Europe 2024 moved forward one hour.”

16:45

17:45

15:45

16:45

17:45

18:45

Thursday

Sunday

Friday

31

30

01

DDD Europe 2024

@masod-bahrami

Naming is Caring

9 of 48

DDD Europe 2024

@masod-bahrami

Naming is Caring

10 of 48

Thursday

Sunday

Friday

31

30

01

Sunday

شنبه

Thursday

پنچشنبه

Friday

جمعه

31

01

30

DDD Europe 2024

@masod-bahrami

Naming is Caring

11 of 48

Point the South-West

DDD Europe 2024

@masod-bahrami

Naming is Caring

12 of 48

Kuuk Thaayorre language

https://www.youtube.com/watch?v=RKK7wGAYP6k

DDD Europe 2024

@masod-bahrami

Naming is Caring

13 of 48

Blue

goluboy

siniy

https://www.youtube.com/watch?v=RKK7wGAYP6k

DDD Europe 2024

@masod-bahrami

Naming is Caring

14 of 48

Which comes first, Language or Thought?

Can a language shape the way we think about things?

DDD Europe 2024

@masod-bahrami

Naming is Caring

15 of 48

When

Participating in a protest

Before leaving the house

Building a House

Before beginning construction

Writing a program

Before writing any code

@Leslie lamport

DDD Europe 2024

@masod-bahrami

Naming is Caring

16 of 48

“Writing is nature’s way of thinking of letting you know how sloppy your thinking is.”

--Guindon

To think, we have to write …

DDD Europe 2024

@masod-bahrami

Naming is Caring

17 of 48

What To Write

Participating in a protest

Building a House

Writing a program

DANGEROUS ACTIVITY!

Blueprints

Specification

Specification by Example

DDD Europe 2024

@masod-bahrami

Naming is Caring

18 of 48

Language

Thinking

Writing

DDD Europe 2024

@masod-bahrami

Naming is Caring

19 of 48

Programming Language!

PHP

C#

Java

Java Script

Clojure

Erlang

F#

DDD Europe 2024

@masod-bahrami

Naming is Caring

20 of 48

Cultivating the LANGUAGE

Cultivating the Driver of your Design

means

Of the domain being modelled

DDD Europe 2024

@masod-bahrami

Naming is Caring

21 of 48

Language-Driven Design

Yet-another *DD(ish) :(

www.LanguageDrivenDesign.Com

DDD Europe 2024

@masod-bahrami

Naming is Caring

22 of 48

What is the most common thing in any language evolution?

Naming things

DDD Europe 2024

@masod-bahrami

Naming is Caring

23 of 48

Naming in software development

(Re(Re(Re(Naming)))...)

git

repo

branch

folder

file

api

class

object

Method/function

property

namespace

service

entity

Value object

microservices

tables

Nodes/relations

Domain service

Application service

Domain event

Internal event

External event

Creational objects

Integration event

Event in EventSourcing

Columns

Db Entity

DBs

Store Procedure

Commands

Queries

DTOs

View Models

DDD Europe 2024

@masod-bahrami

Naming is Caring

24 of 48

Naming in software development

git

repo

branch

folder

file

api

class

object

Method/function

property

namespace

service

entity

Value object

microservices

tables

Nodes/relations

Domain service

Application service

Domain event

Internal event

External event

Creational objects

Integration event

Event in EventSourcing

Columns

Db Entity

DBs

Store Procedure

Commands

Queries

DTOs

View Models

DDD Europe 2024

@masod-bahrami

Naming is Caring

25 of 48

Is it easier to get a job if you're Adam or Mohamed?

https://www.bbc.com/news/uk-england-london-38751307

What’s actually inside a name?

https://www.tandfonline.com/doi/abs/10.1080/00224545.1948.9918930

DDD Europe 2024

@masod-bahrami

Naming is Caring

26 of 48

Namicism

DDD Europe 2024

@masod-bahrami

Naming is Caring

27 of 48

Namicism

Scrum Master

Product Owner

Hexagonal Architecture

Clean Architecture

Even…

@SAFe

SAFe is not safe. Trust me ☹

DDD Europe 2024

@masod-bahrami

Naming is Caring

28 of 48

What date was Eid al-Fitr this year?

1367 - 1368 - 1369 - 1370

Born on:

1990-04-28�1369-02-07

DDD Europe 2024

@masod-bahrami

Naming is Caring

29 of 48

That’s Why …

Naming is Caring

Context

Context is King

because

because

DDD Europe 2024

@masod-bahrami

Naming is Caring

30 of 48

Masoud, have you forgotten that�“Talk is cheap, show me the code."

I understand what you are saying but I don’t realize

DDD Europe 2024

@masod-bahrami

Naming is Caring

31 of 48

Depth-First Exploration

Breadth-First Exploration

Wikipedia approach

DDD Europe 2024

@masod-bahrami

Naming is Caring

32 of 48

Just keep abstraction level of exploration

Exploration vs Discovery

Because

DDD Europe 2024

@masod-bahrami

Naming is Caring

33 of 48

Heuristics

ABSTRACTION

KEEP AWAY FROM WIKIPEDIA-APPROACH

NO “NUMBER” IN USER STORIES-EPICS

DDD Europe 2024

@masod-bahrami

Naming is Caring

34 of 48

Accounting

Create Accounts for different categories (e.g., assets, liabilities, income, expenses)

easily record income and expense transactions with proper categorization and dates

import bank statements and categorize transactions

reconcile bank statements with recorded transactions to ensure the accuracy of financial data

create group accounts to categorize related general ledger accounts

link specific general ledger accounts to subledgers

create and manage general ledger accounts

DDD Europe 2024

@masod-bahrami

Naming is Caring

35 of 48

Accounting

Show profit and loss statements

Show balance sheets

Show cash flow statements

view a hierarchical chart of accounts with standard categories

import a pre-defined chart of accounts template or upload a custom chart from a spreadsheet,

deactivate accounts that are no longer in use

create and manage general ledger accounts

DDD Europe 2024

@masod-bahrami

Naming is Caring

36 of 48

Accounting

define the financial year of the business, including start and end dates

Create opening balances for all general ledger accounts at the beginning of a new financial year

perform a year-end closing process at the end of the financial year

record all financial transactions in a chronological journal with detailed information, including dates, descriptions, accounts affected, and amounts

edit, delete, and reverse journal entries in the journal,

post journal entries from the journal to individual general ledger accounts

DDD Europe 2024

@masod-bahrami

Naming is Caring

37 of 48

Breadth-First Exploration

Where should we start to explore?

DDD Europe 2024

@masod-bahrami

Naming is Caring

38 of 48

Story Telling

99.99% is Context

Main Point

DDD Europe 2024

@masod-bahrami

Naming is Caring

39 of 48

(some!)Heuristics of BFE

  • Trying to find a Pattern in terms of flow with timing in the language of the domain
  • Explore to discover the main point of your story
  • Clojure of Concepts
  • Example-Storming

DDD Europe 2024

@masod-bahrami

Naming is Caring

40 of 48

Clojure of Concepts

As less as possible concepts

DDD Europe 2024

@masod-bahrami

Naming is Caring

41 of 48

Accounting

define the financial year of the business, including start and end dates

Create opening balances for all general ledger accounts at the beginning of a new financial year

perform a year-end closing process at the end of the financial year

record all financial transactions in a chronological journal with detailed information, including dates, descriptions, accounts affected, and amounts

edit, delete, and reverse journal entries in the journal,

post journal entries from the journal to individual general ledger accounts

DDD Europe 2024

@masod-bahrami

Naming is Caring

42 of 48

Accounting

Financial year

Financial year

Financial year

opening

year-end

Journal

Journal Entry or Financial Transaction

DDD Europe 2024

@masod-bahrami

Naming is Caring

43 of 48

Journal

Financial Transaction

Entries

Debits or Credits a Sub-Ledger Account

Double Entry bookkeeping

At least 2 entries

DDD Europe 2024

@masod-bahrami

Naming is Caring

44 of 48

Be Careful

False pulse of the domain

DDD Europe 2024

@masod-bahrami

Naming is Caring

45 of 48

Product Landing Page

https://search.muz.li/OGFjZGM1NzY0

DDD Europe 2024

@masod-bahrami

Naming is Caring

46 of 48

Thank You Very Much

DDD Europe 2024

@masod-bahrami

Naming is Caring

47 of 48

Be careful

Besic info paradox

Let’s look at a Payroll system

DDD Europe 2024

@masod-bahrami

Naming is Caring

48 of 48

Metaphor

DDD Europe 2024

@masod-bahrami

Naming is Caring