Different software evolutions
from Start till Release in PHP product
Oleksandr Savchenko
Speaker.
winner of Ukrainian IT Awards in category
Software Engineering in 2019
10+ years in software design & development
worked as Developer, Architect, Head of PHP
Head of Core Development in Ciklum
co-founder and contributor of open-source
products
partnership programs with big IT companies
(SensioLabs, AWS, Microsoft, Google Cloud
Platform)
What to expect for You?
● Pet-projects
● Front-End topics
TO BE:
● Common software development practices
● Architecture patterns & approaches
● Useful components & libs
● Examples from real world
● Links to useful materials
NOT TO BE:
Agenda.
● What can be evolved?
● Evolution Stages.
BrownField
BrownField
TDD BDD
DDD
RDDResume Driven Development
Architecture Tradeoff Analysis Method.
Understand
context
Define
alternatives
Define criteria
Set criteria
weights
Set score
Analyse results and
take decision
agility deployment testability performance scalability simplicity cost
Monolithic - - + - - + $
Microservices + + + - - + $$
Space-based + + - + + - $$$$
Service-oriented - - - - + - $$$$
Service-Based + + + - + - $$
Architecture Tradeoff Analysis Method.
Business
Drivers
Software
Architecture
Quality
Attributes
Architectural
Approaches
Scenarios
Architectural
Decisions
Analysis
Trade offs
Sensitivity Points
Non-Risks
Risks
Risk
Themes
Impacts
Detailed
info
Product Stages.
Project Start
Core Development
Search of truth
Continuously Improvements
First Evolution
Components for Evolution.
Software Architecture
patterns
Development
practices
Code Repository
Structure
Development Team
Composition
Infrastructure
Testing Strategy
Software Architecture
components
Project Start.
Project Start
Single Team
Development practices. Methods & Tools
Software Architecture
● Common Quality Attributes (NFR)
● Architecture Views
● Technologies stack
● Common DataFlow, Storages, DB’s
● Architecture decision making process
Infrastructure
● DevOps toolset
● Cloud / on-premise infrastructure
● Provisioning & Infrastructure as a code
● DevOps Code structure
● Monitoring & Logging Requirements
● Specific processes, restrictions
● Infrastructure security / accesses
● CI/CD flow diagram, Release flow
Software Development Practices
● Development tools (IDE, Docker, OS, etc)
● Production environment requirements
● Setup local dev env process
● External 3rd party solutions (for local dev env)
● Components & libs
● Code Development Approach
○ Code Style / Code Definition Convention
○ Software development guides (Tips & Tricks,
Frameworks Best practices, Cloud Best Practices)
○ Code Debug
○ Error Handling
○ Upgrading of external components / dependencies
○ Create new product component (boilerplates)
○ Working with Storages, DB
● Code Repository structure
● Branching Strategy
● Components Versioning strategies
● Code-Review Process and Requirements
● Definition of Done for Software Developers
Software Development Testing approach
● Types of tests
● Code coverage strategy
● Working with storages for tests
● Code Health, Integration with code quality tools
Development practices. Code-Style strategy
Development practices. Code-Style strategy
Software Components. Vendors
Development practices. Cross-Stack contracts
Development practices. Cross-Stack contracts
Architecture components. HTTP Error component
RFC 7807 - Problem Details for HTTP APIs - IETF Tools
Development practices. Methodologies
Lean Development
MonolithArchitecture
никому не рассказывать
что у вас монолит
никогда никому не рассказывать,
что у вас монолит
Software Architecture. Monolithic Architecture
Layered Architecture
Software Architecture. Hexagonal Architecture
Framework
Application
Domain
Core
Domain
Software Architecture. Monolith Architecture
Component
configs
DB
code
code tests
specifications
First Evolution
MicroservicesArchitecture
всем рассказывать
что у вас микросервисы
всем везде рассказывать,
что у вас микросервисы
Software Architecture. Architecture Views
SEI software architecture views
Module
Decomposition Uses
Layered
Class
Component -
and - connector
Client-Server Concurrence Process Shared Data
Allocation
Work
Assignment
Deployment Implementation
4+1 View Model
Software Architecture. Microservices Architecture
Distributed
Separate Deploy
Service Template
Bounded Context
API Layer
Software Architecture. Service-Oriented Architecture
Software Architecture. Service-Based Architecture
Service
granularity
Macroservices
Database scope
CI/CD
Software Architecture. Microservices Architecture
Service 1
Shared DB
Entities
Mapping
Repositories
Migrations
ORM config
Service 2
Entities
Mapping
Repositories
Migrations
ORM config
S1 Repositories S2 Repositories
shared-data-model
Entities
Migrations
Mapping
Repositories
ORM config
Service
shared-db-loader
shared-data-model
Migrations
SA components. Microservices Architecture
Service 1
Shared DB
ORM config
Repositories shared-data-model
library
Entities
Migrations
Mapping
Repositories
ORM config
Service
shared-db-loader
shared-data-model shared-data-model
Service 1
ORM config
Repositories
shared-data-model
Software Dev practices. Spotify Model
Tribes:
● Seller
● Buyer
● Cross-Tribe functionality
Chapters:
● BE
● FE
● QA
● DevOps
Guilds:
● Architecture,
● Infrastructure
● Prod-Preparation,
● etc.
Core Development.
Stage
Core Development
Software Architecture components.
Business service 1
open-source libs
business logic
shared data model
shared business logic
shared libs
infra service clients
Business service N
open-source libs
business logic
shared data model
shared business logic
shared libs
infra service clients
FE
src open-source libs FE shared libs
Infra service 1
open-source libs
logic
shared libs
Infra service N
open-source libs
logic
shared libs
Software Dev practices. Core Team
Core Team Business Team
● Responsible for shared components:
○ infra services
○ infra services client libs
○ shared business related libs
○ shared none-business related libs
● Drives Product Architecture and Infrastructure
● Enablers for future business features
● Should know business scope
● Responsible for shared components:
○ business services
○ shared business related libs
● Drives Service Architecture and
Infrastructure
● Use functionality of Core Team
● Should know business scope
Software Architecture components. Boilerplates
https://github.com/thephpleague/skeleton
Software Architecture components. Service API Client
Business Service
Client 1
Infra Service 1 Infra Service 2 Infra Service 3
Client 2 Client 3
Business Logic
Business
Logic
Client DTO
RequestData
DTOparams
Caller
YAML configGuzzle
Endpoint
Symfony
HTTP Client
1
2
RequestData
<<validates>>
7
<<creates>>
<<creates>>
8
RequestData
3
4
5
ResponseData6
ResponseData
Software Architecture components. Service API Client
Software Architecture components. Service API Client
http://httplug.io/
Software Architecture components. Responsibilities
Business Services
business logic
open-source libs
open-source
packs
infra services
clients
shared business
libs
shared
non-business libs
Infra Services
src
open-source libs
open-source
packs
shared
non-business libs
Test Business Services
src
open-source libs
open-source
packs
shared
non-business libs
shared business
libs
infra services
clients
Service Boilerplate
Library Boilerplate
Polyrepo
Code Repository Structure. Polyrepo
services
shared-libs
open-source
packs
boilerplates
test services
Semver
Software Dev practices. GYSHIDO
Software Architecture components. Delivery Approach
idea,
requirements,
dependencies
Implementation to
Test service
Implementation to
Business Service
Components Development
New versions,
Change logs,
Documentations,
Knowledge Sharings
Definition of Done
Software Architecture components. Delivery Approach
idea,
requirements,
dependencies
1 week
2 week
3 week
Implementation to
Test service
Implementation to
Business Service
Components Development
New versions,
Change logs,
Documentations,
Knowledge Sharings
Definition of Done
1 month
4 week
Search of truth.
Stage
Search for truth
Development practices. Feature Teams
Business Services
business logic
open-source libs
open-source
packs
infra services
clients
shared business
libs
shared
non-business libs
Infra Services
src
open-source libs
open-source
packs
shared
non-business libs
Service Boilerplate
Library Boilerplate
Development practices. Feature Teams
Business service
open-source libs
business logic
shared data model
shared business logic
shared libs
infra service 1 client
Infra service 1
open-source libs
logic
shared libs
infra service 2 client
Infra service 1
open-source libs
logic
shared libs
7pull-requests
7repo code review
6change logs
Code Repository Structure. Monorepo?!
Polyrepo
services
shared-libs
open-source
packs
boilerplates
test services
Monorepo
services
shared-libs
open-source
packs
boilerplates
test services
Code Repository Structure. Migration to Monorepo
Monorepo
migration process
folder structure
migration tool
branching strategy
versioning
shared libs
to control the functionality
CI/CD
Code Repository Structure. Monorepo - migration process.
❏ /web-app-*
❏ /service-*
❏ /boilerplate-*
❏ /library-be-*
❏ /library-fe-*
❏ /automation-*
❏ /testing-*
❏ /integration-*
❏ /deprecated/*
folder structure
symplify/monorepo-builder
Knowledge sharing
Last commits to Polyrepo
Create Monorepo
Checkout Monorepo
First Pull Request
migration process
Code Repository Structure. Monorepo - branching strategy
Trunk Based
Development
https://trunkbaseddevelopment.com/
MASTER M1 M2 M3 M4 M5 M6
R1 R1.1 R2
F1 F2 F2.1 F2.2
M7
R1.1
● all FEATURE branches from MASTER;
● all PR’s merged to MASTER;
● short-living FEATURE branch;
● CI/CD, Tests;
● MASTER is always stable (green);
● RELEASE branch if needed only;
● Cherry picked from MASTER to RELEASE;
Code Repository Structure. Monorepo - working with components
Polyrepos READONLY
Monorepo
business service
shared-lib-3
shared-lib-2
infra service
shared-lib-1
shared-lib-1
shared-lib-2
shared-lib-3
Satis
SINGLEversion
Version ?
Tag ?
MASTER M1 M2 M3 M4
F1 F1.1 F1.1
Code Repository Structure. Monorepo - working with components
composer.json
composer.lock
service
open-source libs
logic
shared-libs-1
/library-be-shared-lib-1
/library-be-shared-lib-2
/library-be-shared-lib-3
/library-be-shared-lib-4
/service-1
/service-2
shared-libs-4
Code Repository Structure. Monorepo - Feature Flags
https://featureflags.io/
Development practices. Monorepos
● Single Feature in a Single PR
● Refactoring is very easy
● Developer onboarding
● Codebase “Big Picture”
● Productivity increase & Less
management
● One Team == One Repository
● Easy on start of project
PROS CONS
● “One version fits all”
● Releasable components
● composer symlinks
● IDE performance, Git History
● new CI / CD
● No real code ownership
Continuous Improvements
Software Architecture.
Service 1 Service 2
2
1
3
4
Software Architecture components. Infra as a code
PHP console
command
app_config.yaml
infra.yaml
None-Breaking change development.
code
Storages
Bundles,
configurations
queues
None-Breaking change development. Code
Backward Compatibility Promise
code
● Class renaming/namespace changes
● New method added to the interface
● Method removed from class
● New required parameter added to class constructor
● Dependency changed in class constructor
None-Breaking change development. Bundles & Configurations
Bundles,
configurations
None-Breaking change development. Storages & Queues
Storages queues
● new mandatory fields
● table / field renaming
● index renaming
● topic renaming
● message structure
Test Strategy. Quality Gates.
PHPStan
PHP Static Analysis Tool
PCOV
CodeCoverage compatible driver
for PHP
phpdbg
SAPI module
Test Strategy. Quality Gates - SonarQube
quality gate for Libraries
quality gate for Services
Test Strategy. Quality Gates - SonarQube
Soft Dev. categories,
Methods & Tools,
Cross-Stack contracts,
Lean Development,
Code Styles Strategy
Monolith,
Microkernel,
Hexagonal
vendors list
Git Flow /
Github Flow
initial setup initial setup
Spotify model
service-based,
Shared DB,
Architecture views
service DB Polyrepos new test types improvements
GYSHIDO,
Core development,
Cross-Team depend.
Services types
components types,
boilerplates,
API client libs
versioning,
Satis
SonarQube,
BlackFire
orchestration &
choreography
Feature Teams Event-Driven Feature Flags
Monorepo,
Trunk-based dev,
new versioning
None-Breaking
change test
approach
Monitoring,
Autoscaling
POC,
Guildies,
None-Breaking changes
BD per service,
Transactions
Infra as a code,
etc
Monorepo
improvements,
Integration branch
SonarQube quality
gates stars
approach
Costs optimization
Project
Start
First
Evolution
Core
Development
Search for
Truth
Continuous
Improvements
Software Dev.
practices
SA patterns
SA
components
Code Repo.
Structure
Test Strategy Infrastructure
Summary.
THANK YOU

"Different software evolutions from Start till Release in PHP product" Oleksandr Savchenko

  • 1.
    Different software evolutions fromStart till Release in PHP product Oleksandr Savchenko
  • 2.
    Speaker. winner of UkrainianIT Awards in category Software Engineering in 2019 10+ years in software design & development worked as Developer, Architect, Head of PHP Head of Core Development in Ciklum co-founder and contributor of open-source products partnership programs with big IT companies (SensioLabs, AWS, Microsoft, Google Cloud Platform)
  • 3.
    What to expectfor You? ● Pet-projects ● Front-End topics TO BE: ● Common software development practices ● Architecture patterns & approaches ● Useful components & libs ● Examples from real world ● Links to useful materials NOT TO BE:
  • 4.
    Agenda. ● What canbe evolved? ● Evolution Stages.
  • 7.
  • 8.
  • 9.
  • 10.
    Architecture Tradeoff AnalysisMethod. Understand context Define alternatives Define criteria Set criteria weights Set score Analyse results and take decision agility deployment testability performance scalability simplicity cost Monolithic - - + - - + $ Microservices + + + - - + $$ Space-based + + - + + - $$$$ Service-oriented - - - - + - $$$$ Service-Based + + + - + - $$
  • 11.
    Architecture Tradeoff AnalysisMethod. Business Drivers Software Architecture Quality Attributes Architectural Approaches Scenarios Architectural Decisions Analysis Trade offs Sensitivity Points Non-Risks Risks Risk Themes Impacts Detailed info
  • 12.
    Product Stages. Project Start CoreDevelopment Search of truth Continuously Improvements First Evolution
  • 13.
    Components for Evolution. SoftwareArchitecture patterns Development practices Code Repository Structure Development Team Composition Infrastructure Testing Strategy Software Architecture components
  • 14.
  • 15.
  • 16.
    Development practices. Methods& Tools Software Architecture ● Common Quality Attributes (NFR) ● Architecture Views ● Technologies stack ● Common DataFlow, Storages, DB’s ● Architecture decision making process Infrastructure ● DevOps toolset ● Cloud / on-premise infrastructure ● Provisioning & Infrastructure as a code ● DevOps Code structure ● Monitoring & Logging Requirements ● Specific processes, restrictions ● Infrastructure security / accesses ● CI/CD flow diagram, Release flow Software Development Practices ● Development tools (IDE, Docker, OS, etc) ● Production environment requirements ● Setup local dev env process ● External 3rd party solutions (for local dev env) ● Components & libs ● Code Development Approach ○ Code Style / Code Definition Convention ○ Software development guides (Tips & Tricks, Frameworks Best practices, Cloud Best Practices) ○ Code Debug ○ Error Handling ○ Upgrading of external components / dependencies ○ Create new product component (boilerplates) ○ Working with Storages, DB ● Code Repository structure ● Branching Strategy ● Components Versioning strategies ● Code-Review Process and Requirements ● Definition of Done for Software Developers Software Development Testing approach ● Types of tests ● Code coverage strategy ● Working with storages for tests ● Code Health, Integration with code quality tools
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
    Architecture components. HTTPError component RFC 7807 - Problem Details for HTTP APIs - IETF Tools
  • 23.
  • 24.
    MonolithArchitecture никому не рассказывать чтоу вас монолит никогда никому не рассказывать, что у вас монолит
  • 25.
    Software Architecture. MonolithicArchitecture Layered Architecture
  • 26.
    Software Architecture. HexagonalArchitecture Framework Application Domain Core Domain
  • 27.
    Software Architecture. MonolithArchitecture Component configs DB code code tests specifications
  • 28.
  • 29.
    MicroservicesArchitecture всем рассказывать что увас микросервисы всем везде рассказывать, что у вас микросервисы
  • 30.
    Software Architecture. ArchitectureViews SEI software architecture views Module Decomposition Uses Layered Class Component - and - connector Client-Server Concurrence Process Shared Data Allocation Work Assignment Deployment Implementation 4+1 View Model
  • 31.
    Software Architecture. MicroservicesArchitecture Distributed Separate Deploy Service Template Bounded Context API Layer
  • 32.
  • 33.
    Software Architecture. Service-BasedArchitecture Service granularity Macroservices Database scope CI/CD
  • 34.
    Software Architecture. MicroservicesArchitecture Service 1 Shared DB Entities Mapping Repositories Migrations ORM config Service 2 Entities Mapping Repositories Migrations ORM config S1 Repositories S2 Repositories shared-data-model Entities Migrations Mapping Repositories ORM config Service shared-db-loader shared-data-model Migrations
  • 35.
    SA components. MicroservicesArchitecture Service 1 Shared DB ORM config Repositories shared-data-model library Entities Migrations Mapping Repositories ORM config Service shared-db-loader shared-data-model shared-data-model Service 1 ORM config Repositories shared-data-model
  • 36.
    Software Dev practices.Spotify Model Tribes: ● Seller ● Buyer ● Cross-Tribe functionality Chapters: ● BE ● FE ● QA ● DevOps Guilds: ● Architecture, ● Infrastructure ● Prod-Preparation, ● etc.
  • 37.
  • 38.
    Software Architecture components. Businessservice 1 open-source libs business logic shared data model shared business logic shared libs infra service clients Business service N open-source libs business logic shared data model shared business logic shared libs infra service clients FE src open-source libs FE shared libs Infra service 1 open-source libs logic shared libs Infra service N open-source libs logic shared libs
  • 39.
    Software Dev practices.Core Team Core Team Business Team ● Responsible for shared components: ○ infra services ○ infra services client libs ○ shared business related libs ○ shared none-business related libs ● Drives Product Architecture and Infrastructure ● Enablers for future business features ● Should know business scope ● Responsible for shared components: ○ business services ○ shared business related libs ● Drives Service Architecture and Infrastructure ● Use functionality of Core Team ● Should know business scope
  • 41.
    Software Architecture components.Boilerplates https://github.com/thephpleague/skeleton
  • 42.
    Software Architecture components.Service API Client Business Service Client 1 Infra Service 1 Infra Service 2 Infra Service 3 Client 2 Client 3 Business Logic Business Logic Client DTO RequestData DTOparams Caller YAML configGuzzle Endpoint Symfony HTTP Client 1 2 RequestData <<validates>> 7 <<creates>> <<creates>> 8 RequestData 3 4 5 ResponseData6 ResponseData
  • 43.
  • 44.
    Software Architecture components.Service API Client http://httplug.io/
  • 45.
    Software Architecture components.Responsibilities Business Services business logic open-source libs open-source packs infra services clients shared business libs shared non-business libs Infra Services src open-source libs open-source packs shared non-business libs Test Business Services src open-source libs open-source packs shared non-business libs shared business libs infra services clients Service Boilerplate Library Boilerplate
  • 46.
    Polyrepo Code Repository Structure.Polyrepo services shared-libs open-source packs boilerplates test services Semver
  • 47.
  • 48.
    Software Architecture components.Delivery Approach idea, requirements, dependencies Implementation to Test service Implementation to Business Service Components Development New versions, Change logs, Documentations, Knowledge Sharings Definition of Done
  • 50.
    Software Architecture components.Delivery Approach idea, requirements, dependencies 1 week 2 week 3 week Implementation to Test service Implementation to Business Service Components Development New versions, Change logs, Documentations, Knowledge Sharings Definition of Done 1 month 4 week
  • 52.
  • 53.
    Development practices. FeatureTeams Business Services business logic open-source libs open-source packs infra services clients shared business libs shared non-business libs Infra Services src open-source libs open-source packs shared non-business libs Service Boilerplate Library Boilerplate
  • 54.
    Development practices. FeatureTeams Business service open-source libs business logic shared data model shared business logic shared libs infra service 1 client Infra service 1 open-source libs logic shared libs infra service 2 client Infra service 1 open-source libs logic shared libs 7pull-requests 7repo code review 6change logs
  • 55.
    Code Repository Structure.Monorepo?! Polyrepo services shared-libs open-source packs boilerplates test services Monorepo services shared-libs open-source packs boilerplates test services
  • 56.
    Code Repository Structure.Migration to Monorepo Monorepo migration process folder structure migration tool branching strategy versioning shared libs to control the functionality CI/CD
  • 57.
    Code Repository Structure.Monorepo - migration process. ❏ /web-app-* ❏ /service-* ❏ /boilerplate-* ❏ /library-be-* ❏ /library-fe-* ❏ /automation-* ❏ /testing-* ❏ /integration-* ❏ /deprecated/* folder structure symplify/monorepo-builder Knowledge sharing Last commits to Polyrepo Create Monorepo Checkout Monorepo First Pull Request migration process
  • 58.
    Code Repository Structure.Monorepo - branching strategy Trunk Based Development https://trunkbaseddevelopment.com/ MASTER M1 M2 M3 M4 M5 M6 R1 R1.1 R2 F1 F2 F2.1 F2.2 M7 R1.1 ● all FEATURE branches from MASTER; ● all PR’s merged to MASTER; ● short-living FEATURE branch; ● CI/CD, Tests; ● MASTER is always stable (green); ● RELEASE branch if needed only; ● Cherry picked from MASTER to RELEASE;
  • 59.
    Code Repository Structure.Monorepo - working with components Polyrepos READONLY Monorepo business service shared-lib-3 shared-lib-2 infra service shared-lib-1 shared-lib-1 shared-lib-2 shared-lib-3 Satis SINGLEversion Version ? Tag ? MASTER M1 M2 M3 M4 F1 F1.1 F1.1
  • 60.
    Code Repository Structure.Monorepo - working with components composer.json composer.lock service open-source libs logic shared-libs-1 /library-be-shared-lib-1 /library-be-shared-lib-2 /library-be-shared-lib-3 /library-be-shared-lib-4 /service-1 /service-2 shared-libs-4
  • 61.
    Code Repository Structure.Monorepo - Feature Flags https://featureflags.io/
  • 62.
    Development practices. Monorepos ●Single Feature in a Single PR ● Refactoring is very easy ● Developer onboarding ● Codebase “Big Picture” ● Productivity increase & Less management ● One Team == One Repository ● Easy on start of project PROS CONS ● “One version fits all” ● Releasable components ● composer symlinks ● IDE performance, Git History ● new CI / CD ● No real code ownership
  • 63.
  • 64.
  • 65.
    Software Architecture components.Infra as a code PHP console command app_config.yaml infra.yaml
  • 66.
  • 67.
    None-Breaking change development.Code Backward Compatibility Promise code ● Class renaming/namespace changes ● New method added to the interface ● Method removed from class ● New required parameter added to class constructor ● Dependency changed in class constructor
  • 68.
    None-Breaking change development.Bundles & Configurations Bundles, configurations
  • 69.
    None-Breaking change development.Storages & Queues Storages queues ● new mandatory fields ● table / field renaming ● index renaming ● topic renaming ● message structure
  • 70.
    Test Strategy. QualityGates. PHPStan PHP Static Analysis Tool PCOV CodeCoverage compatible driver for PHP phpdbg SAPI module
  • 71.
    Test Strategy. QualityGates - SonarQube quality gate for Libraries quality gate for Services
  • 72.
    Test Strategy. QualityGates - SonarQube
  • 73.
    Soft Dev. categories, Methods& Tools, Cross-Stack contracts, Lean Development, Code Styles Strategy Monolith, Microkernel, Hexagonal vendors list Git Flow / Github Flow initial setup initial setup Spotify model service-based, Shared DB, Architecture views service DB Polyrepos new test types improvements GYSHIDO, Core development, Cross-Team depend. Services types components types, boilerplates, API client libs versioning, Satis SonarQube, BlackFire orchestration & choreography Feature Teams Event-Driven Feature Flags Monorepo, Trunk-based dev, new versioning None-Breaking change test approach Monitoring, Autoscaling POC, Guildies, None-Breaking changes BD per service, Transactions Infra as a code, etc Monorepo improvements, Integration branch SonarQube quality gates stars approach Costs optimization Project Start First Evolution Core Development Search for Truth Continuous Improvements Software Dev. practices SA patterns SA components Code Repo. Structure Test Strategy Infrastructure
  • 74.
  • 75.