Monolith? Microservices?

Who cares?

Bartek „Koziołek” Kuczyński / @koziolek

Join at

slido.com

#geecon2019

What is architecture?

Which one?

Enterprise Architecture – structure of corp

Infrastructure Architecture – hardware

System Architecture – automation

Application Architecture – proetinology

When we pick architecture?

At the beginning?

At the end?

In the 'middle'?

Never!

Architecture is alive!

What is our motivatio?

Is an architecture a technology ?

It depends

Architecture depends on technology

Is limited

Is motivated by it

Architecture as marketing

Intel Inside™

Client should take care 

Problem of year 1991

Let's learn client to look for logo

A software system can best be designed if the testing is interlaced with the designing instead of being used after the design.

TDD

The good systems that are presently working were written by small groups. More than twenty programmers working on a project is usually disastrous.

Agile like?

Each stage produced a usable product and the period between the end of one stage and the start of the next provided the operational experience upon which the next design was based.

Nihil Novi

Fashion for Architecture

SOA

Microservices

Blockchain

It's all the same fucking day, man

And if so…

make LEGO?

Modular code

All popular languages support it

Tools support it

Theory is easy to understand

How to achieve it?

Physics laws of code

Architecture independent

Has source in observation

Well known rules

TDD

BDD

YAGNI

DRY

KISS

Wzorce

DDD

}

OO BDSM

Costs

@Test
public void client_registration_via_sso(){
    Client newClient = new Client(DEFAULT_NAME);
    Registration reg = regServ.register(newClient);
    assertEquals(reg.client, newClient);
    assertNotNull(reg.clientIdCard);
    assertNot(reg.passwordData);
}
@Test
public void client_registration_via_sso(){
    Client newClient = giveMeNewClientNoPass();
    Registration reg = regServ.register(newClient);
    assertThat(reg)
        .isForClient(newClient)
        .hasClientIdCard()
        .isFromSSO();
}
@Test
public void client_registration_via_sso(){
    Client newClient = new Client(DEFAULT_NAME);
    Registration reg = regServ.register(newClient);
    assertEquals(reg.client, newClient);
    assertNotNull(reg.clientIdCard);
    assertNot(reg.passwordData);
}
@Test
public void client_registration_via_sso(){
    Client newClient = giveMeNewClientNoPass();
    Registration reg = regServ.register(newClient);
    assertThat(reg)
        .isForClient(newClient)
        .hasClientIdCard()
        .isFromSSO();
}

Cost (time)

Pareto Rule

80/20

ROI

return on investment

Marginalism

code coverage

Longer start

Learn & teach

Extra stuff (hardware/sofware)

Wrong chose

Good code

follow the rules

Break them in smart way

because came from Architecture

How o check it?

Do not test architecture

It is impossible :D

Check&test the code

Tools

Checkstyle i PMD

Structure 101

Archunit

And what about deployment?

Deployment architecture

System independet

Deployment system is different system

Our system is just input data

Must be valid