SlideShare une entreprise Scribd logo
1  sur  75
Télécharger pour lire hors ligne
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.
PHPFrameworkDay 2020 - Different software evolutions from Start till Release in PHP product
PHPFrameworkDay 2020 - Different software evolutions from Start till Release in PHP product
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
PHPFrameworkDay 2020 - Different software evolutions from Start till Release in PHP product
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
PHPFrameworkDay 2020 - Different software evolutions from Start till Release in PHP product
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
PHPFrameworkDay 2020 - Different software evolutions from Start till Release in PHP product
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

Contenu connexe

Tendances

Flexible delivery options
Flexible delivery options Flexible delivery options
Flexible delivery options Micro Focus
 
Beacon v2 Reference Implementation: An Overview
Beacon v2 Reference Implementation: An OverviewBeacon v2 Reference Implementation: An Overview
Beacon v2 Reference Implementation: An OverviewCINECAProject
 
Developer Experience Overview
Developer Experience OverviewDeveloper Experience Overview
Developer Experience OverviewRoss Jimenez
 
Import filters for vector graphic formats in LibreOffice: the reverse- and st...
Import filters for vector graphic formats in LibreOffice: the reverse- and st...Import filters for vector graphic formats in LibreOffice: the reverse- and st...
Import filters for vector graphic formats in LibreOffice: the reverse- and st...lgworld
 
DevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and ProjectsDevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and ProjectsFedir RYKHTIK
 
Sharepoint and LibreOffice interoperability through CMIS (Protocols Plugfest ...
Sharepoint and LibreOffice interoperability through CMIS (Protocols Plugfest ...Sharepoint and LibreOffice interoperability through CMIS (Protocols Plugfest ...
Sharepoint and LibreOffice interoperability through CMIS (Protocols Plugfest ...Igalia
 
Resume - Joydeep Lodh -Updated
Resume - Joydeep Lodh -UpdatedResume - Joydeep Lodh -Updated
Resume - Joydeep Lodh -UpdatedJoydeep Lodh
 
Scaling Git for Enterprise DevOps
Scaling Git for Enterprise DevOpsScaling Git for Enterprise DevOps
Scaling Git for Enterprise DevOpsEng Teong Cheah
 
A vision about a LibreOffice document manager for Android (FOSDEM 2015)
A vision about a LibreOffice document manager for Android (FOSDEM 2015)A vision about a LibreOffice document manager for Android (FOSDEM 2015)
A vision about a LibreOffice document manager for Android (FOSDEM 2015)Igalia
 
What’s new in the 4.5
What’s new in the 4.5What’s new in the 4.5
What’s new in the 4.5Yuriy Seniuk
 
Meetup Devops-Geneva-19.10.2019
Meetup Devops-Geneva-19.10.2019Meetup Devops-Geneva-19.10.2019
Meetup Devops-Geneva-19.10.2019Hidora
 
Talent42 2014 Sam Wholley -
Talent42 2014 Sam Wholley - Talent42 2014 Sam Wholley -
Talent42 2014 Sam Wholley - Talent42
 
Improving Automated Tests with Fluent Assertions
Improving Automated Tests with Fluent Assertions Improving Automated Tests with Fluent Assertions
Improving Automated Tests with Fluent Assertions TestingCR
 
DPC2007 Zend Framework (Gaylord Aulke)
DPC2007 Zend Framework (Gaylord Aulke)DPC2007 Zend Framework (Gaylord Aulke)
DPC2007 Zend Framework (Gaylord Aulke)dpc
 
Olaf_Senz_Resume
Olaf_Senz_ResumeOlaf_Senz_Resume
Olaf_Senz_ResumeOlaf Senz
 
10265 developing data access solutions with microsoft visual studio 2010
10265 developing data access solutions with microsoft visual studio 201010265 developing data access solutions with microsoft visual studio 2010
10265 developing data access solutions with microsoft visual studio 2010bestip
 

Tendances (20)

Flexible delivery options
Flexible delivery options Flexible delivery options
Flexible delivery options
 
Beacon v2 Reference Implementation: An Overview
Beacon v2 Reference Implementation: An OverviewBeacon v2 Reference Implementation: An Overview
Beacon v2 Reference Implementation: An Overview
 
Developer Experience Overview
Developer Experience OverviewDeveloper Experience Overview
Developer Experience Overview
 
Import filters for vector graphic formats in LibreOffice: the reverse- and st...
Import filters for vector graphic formats in LibreOffice: the reverse- and st...Import filters for vector graphic formats in LibreOffice: the reverse- and st...
Import filters for vector graphic formats in LibreOffice: the reverse- and st...
 
DevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and ProjectsDevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and Projects
 
Sharepoint and LibreOffice interoperability through CMIS (Protocols Plugfest ...
Sharepoint and LibreOffice interoperability through CMIS (Protocols Plugfest ...Sharepoint and LibreOffice interoperability through CMIS (Protocols Plugfest ...
Sharepoint and LibreOffice interoperability through CMIS (Protocols Plugfest ...
 
Resume - Joydeep Lodh -Updated
Resume - Joydeep Lodh -UpdatedResume - Joydeep Lodh -Updated
Resume - Joydeep Lodh -Updated
 
Scaling Git for Enterprise DevOps
Scaling Git for Enterprise DevOpsScaling Git for Enterprise DevOps
Scaling Git for Enterprise DevOps
 
A vision about a LibreOffice document manager for Android (FOSDEM 2015)
A vision about a LibreOffice document manager for Android (FOSDEM 2015)A vision about a LibreOffice document manager for Android (FOSDEM 2015)
A vision about a LibreOffice document manager for Android (FOSDEM 2015)
 
What’s new in the 4.5
What’s new in the 4.5What’s new in the 4.5
What’s new in the 4.5
 
Saroj_Profile
Saroj_ProfileSaroj_Profile
Saroj_Profile
 
Arnab_Majumdar_Resume
Arnab_Majumdar_ResumeArnab_Majumdar_Resume
Arnab_Majumdar_Resume
 
Meetup Devops-Geneva-19.10.2019
Meetup Devops-Geneva-19.10.2019Meetup Devops-Geneva-19.10.2019
Meetup Devops-Geneva-19.10.2019
 
Talent42 2014 Sam Wholley -
Talent42 2014 Sam Wholley - Talent42 2014 Sam Wholley -
Talent42 2014 Sam Wholley -
 
Improving Automated Tests with Fluent Assertions
Improving Automated Tests with Fluent Assertions Improving Automated Tests with Fluent Assertions
Improving Automated Tests with Fluent Assertions
 
Balaji Resume
Balaji ResumeBalaji Resume
Balaji Resume
 
DPC2007 Zend Framework (Gaylord Aulke)
DPC2007 Zend Framework (Gaylord Aulke)DPC2007 Zend Framework (Gaylord Aulke)
DPC2007 Zend Framework (Gaylord Aulke)
 
Olaf_Senz_Resume
Olaf_Senz_ResumeOlaf_Senz_Resume
Olaf_Senz_Resume
 
SwagatDash
SwagatDashSwagatDash
SwagatDash
 
10265 developing data access solutions with microsoft visual studio 2010
10265 developing data access solutions with microsoft visual studio 201010265 developing data access solutions with microsoft visual studio 2010
10265 developing data access solutions with microsoft visual studio 2010
 

Similaire à PHPFrameworkDay 2020 - Different software evolutions from Start till Release in PHP product

Building A Product Assortment Recommendation Engine
Building A Product Assortment Recommendation EngineBuilding A Product Assortment Recommendation Engine
Building A Product Assortment Recommendation EngineDatabricks
 
Delivering Developer Tools at Scale
Delivering Developer Tools at ScaleDelivering Developer Tools at Scale
Delivering Developer Tools at ScaleOracle Developers
 
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)Nedelcho Delchev
 
Latest trends in information technology
Latest trends in information technologyLatest trends in information technology
Latest trends in information technologyEldos Kuriakose
 
Cloud Native Application Integration With APIs
Cloud Native Application Integration With APIsCloud Native Application Integration With APIs
Cloud Native Application Integration With APIsNirmal Fernando
 
CI/CD Pipelines for Your Infrastructure...as Code!
CI/CD Pipelines for Your Infrastructure...as Code!CI/CD Pipelines for Your Infrastructure...as Code!
CI/CD Pipelines for Your Infrastructure...as Code!Harvey Bendaña
 
Content Strategy and Developer Engagement for DevPortals
Content Strategy and Developer Engagement for DevPortalsContent Strategy and Developer Engagement for DevPortals
Content Strategy and Developer Engagement for DevPortalsAxway
 
Azure DevOps Best Practices Webinar
Azure DevOps Best Practices WebinarAzure DevOps Best Practices Webinar
Azure DevOps Best Practices WebinarCambay Digital
 
Collision 2018: CodeStar for CICD Pipelines
Collision 2018: CodeStar for CICD PipelinesCollision 2018: CodeStar for CICD Pipelines
Collision 2018: CodeStar for CICD PipelinesAmazon Web Services
 
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...Janusz Nowak
 
Continuous Localisation On A Massive Scale
Continuous Localisation On A Massive ScaleContinuous Localisation On A Massive Scale
Continuous Localisation On A Massive ScaleGary Lefman
 
The Power of Azure DevOps
The Power of Azure DevOpsThe Power of Azure DevOps
The Power of Azure DevOpsJeff Bramwell
 
Skill_Level_ Strider
Skill_Level_ StriderSkill_Level_ Strider
Skill_Level_ StriderTushar R
 
Building Cloud Native Applications with Oracle Autonomous Database.
Building Cloud Native Applications with Oracle Autonomous Database.Building Cloud Native Applications with Oracle Autonomous Database.
Building Cloud Native Applications with Oracle Autonomous Database.Oracle Developers
 
Build Business Web Applications with PHPOpenbiz Framework and Cubi Platform
Build Business Web Applications with PHPOpenbiz Framework and Cubi PlatformBuild Business Web Applications with PHPOpenbiz Framework and Cubi Platform
Build Business Web Applications with PHPOpenbiz Framework and Cubi PlatformAgus Suhartono
 
SpringIO 2016 - Spring Cloud MicroServices, a journey inside a financial entity
SpringIO 2016 - Spring Cloud MicroServices, a journey inside a financial entitySpringIO 2016 - Spring Cloud MicroServices, a journey inside a financial entity
SpringIO 2016 - Spring Cloud MicroServices, a journey inside a financial entityjordigilnieto
 

Similaire à PHPFrameworkDay 2020 - Different software evolutions from Start till Release in PHP product (20)

Building A Product Assortment Recommendation Engine
Building A Product Assortment Recommendation EngineBuilding A Product Assortment Recommendation Engine
Building A Product Assortment Recommendation Engine
 
Delivering Developer Tools at Scale
Delivering Developer Tools at ScaleDelivering Developer Tools at Scale
Delivering Developer Tools at Scale
 
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)
Dirigible powered by Orion for Cloud Development (EclipseCon EU 2015)
 
Kunal bhatia resume mass
Kunal bhatia   resume massKunal bhatia   resume mass
Kunal bhatia resume mass
 
Latest trends in information technology
Latest trends in information technologyLatest trends in information technology
Latest trends in information technology
 
DevOps on GCP Course Compared to AWS
DevOps on GCP Course Compared to AWSDevOps on GCP Course Compared to AWS
DevOps on GCP Course Compared to AWS
 
Cloud Native Application Integration With APIs
Cloud Native Application Integration With APIsCloud Native Application Integration With APIs
Cloud Native Application Integration With APIs
 
CI/CD Pipelines for Your Infrastructure...as Code!
CI/CD Pipelines for Your Infrastructure...as Code!CI/CD Pipelines for Your Infrastructure...as Code!
CI/CD Pipelines for Your Infrastructure...as Code!
 
Content Strategy and Developer Engagement for DevPortals
Content Strategy and Developer Engagement for DevPortalsContent Strategy and Developer Engagement for DevPortals
Content Strategy and Developer Engagement for DevPortals
 
Vsts intro
Vsts introVsts intro
Vsts intro
 
Azure DevOps Best Practices Webinar
Azure DevOps Best Practices WebinarAzure DevOps Best Practices Webinar
Azure DevOps Best Practices Webinar
 
Collision 2018: CodeStar for CICD Pipelines
Collision 2018: CodeStar for CICD PipelinesCollision 2018: CodeStar for CICD Pipelines
Collision 2018: CodeStar for CICD Pipelines
 
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
 
Continuous Localisation On A Massive Scale
Continuous Localisation On A Massive ScaleContinuous Localisation On A Massive Scale
Continuous Localisation On A Massive Scale
 
The Power of Azure DevOps
The Power of Azure DevOpsThe Power of Azure DevOps
The Power of Azure DevOps
 
Skill_Level_ Strider
Skill_Level_ StriderSkill_Level_ Strider
Skill_Level_ Strider
 
The Decoupled CMS in Financial Services
The Decoupled CMS in Financial ServicesThe Decoupled CMS in Financial Services
The Decoupled CMS in Financial Services
 
Building Cloud Native Applications with Oracle Autonomous Database.
Building Cloud Native Applications with Oracle Autonomous Database.Building Cloud Native Applications with Oracle Autonomous Database.
Building Cloud Native Applications with Oracle Autonomous Database.
 
Build Business Web Applications with PHPOpenbiz Framework and Cubi Platform
Build Business Web Applications with PHPOpenbiz Framework and Cubi PlatformBuild Business Web Applications with PHPOpenbiz Framework and Cubi Platform
Build Business Web Applications with PHPOpenbiz Framework and Cubi Platform
 
SpringIO 2016 - Spring Cloud MicroServices, a journey inside a financial entity
SpringIO 2016 - Spring Cloud MicroServices, a journey inside a financial entitySpringIO 2016 - Spring Cloud MicroServices, a journey inside a financial entity
SpringIO 2016 - Spring Cloud MicroServices, a journey inside a financial entity
 

Dernier

JS-Experts - Cybersecurity for Generative AI
JS-Experts - Cybersecurity for Generative AIJS-Experts - Cybersecurity for Generative AI
JS-Experts - Cybersecurity for Generative AIIvo Andreev
 
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...OnePlan Solutions
 
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...Jaydeep Chhasatia
 
eAuditor Audits & Inspections - conduct field inspections
eAuditor Audits & Inspections - conduct field inspectionseAuditor Audits & Inspections - conduct field inspections
eAuditor Audits & Inspections - conduct field inspectionsNirav Modi
 
About .NET 8 and a first glimpse into .NET9
About .NET 8 and a first glimpse into .NET9About .NET 8 and a first glimpse into .NET9
About .NET 8 and a first glimpse into .NET9Jürgen Gutsch
 
Mastering Kubernetes - Basics and Advanced Concepts using Example Project
Mastering Kubernetes - Basics and Advanced Concepts using Example ProjectMastering Kubernetes - Basics and Advanced Concepts using Example Project
Mastering Kubernetes - Basics and Advanced Concepts using Example Projectwajrcs
 
Cybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and BadCybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and BadIvo Andreev
 
Your Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software TeamsYour Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software TeamsJaydeep Chhasatia
 
Growing Oxen: channel operators and retries
Growing Oxen: channel operators and retriesGrowing Oxen: channel operators and retries
Growing Oxen: channel operators and retriesSoftwareMill
 
online pdf editor software solutions.pdf
online pdf editor software solutions.pdfonline pdf editor software solutions.pdf
online pdf editor software solutions.pdfMeon Technology
 
Why Choose Brain Inventory For Ecommerce Development.pdf
Why Choose Brain Inventory For Ecommerce Development.pdfWhy Choose Brain Inventory For Ecommerce Development.pdf
Why Choose Brain Inventory For Ecommerce Development.pdfBrain Inventory
 
Kubernetes go-live checklist for your microservices.pptx
Kubernetes go-live checklist for your microservices.pptxKubernetes go-live checklist for your microservices.pptx
Kubernetes go-live checklist for your microservices.pptxPrakarsh -
 
Generative AI for Cybersecurity - EC-Council
Generative AI for Cybersecurity - EC-CouncilGenerative AI for Cybersecurity - EC-Council
Generative AI for Cybersecurity - EC-CouncilVICTOR MAESTRE RAMIREZ
 
20240330_고급진 코드를 위한 exception 다루기
20240330_고급진 코드를 위한 exception 다루기20240330_고급진 코드를 위한 exception 다루기
20240330_고급진 코드를 위한 exception 다루기Chiwon Song
 
Deep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - DatacampDeep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - DatacampVICTOR MAESTRE RAMIREZ
 
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/ML
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/MLBig Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/ML
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/MLAlluxio, Inc.
 
How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?AmeliaSmith90
 
AI Embracing Every Shade of Human Beauty
AI Embracing Every Shade of Human BeautyAI Embracing Every Shade of Human Beauty
AI Embracing Every Shade of Human BeautyRaymond Okyere-Forson
 

Dernier (20)

JS-Experts - Cybersecurity for Generative AI
JS-Experts - Cybersecurity for Generative AIJS-Experts - Cybersecurity for Generative AI
JS-Experts - Cybersecurity for Generative AI
 
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...
Transforming PMO Success with AI - Discover OnePlan Strategic Portfolio Work ...
 
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
Optimizing Business Potential: A Guide to Outsourcing Engineering Services in...
 
eAuditor Audits & Inspections - conduct field inspections
eAuditor Audits & Inspections - conduct field inspectionseAuditor Audits & Inspections - conduct field inspections
eAuditor Audits & Inspections - conduct field inspections
 
About .NET 8 and a first glimpse into .NET9
About .NET 8 and a first glimpse into .NET9About .NET 8 and a first glimpse into .NET9
About .NET 8 and a first glimpse into .NET9
 
Mastering Kubernetes - Basics and Advanced Concepts using Example Project
Mastering Kubernetes - Basics and Advanced Concepts using Example ProjectMastering Kubernetes - Basics and Advanced Concepts using Example Project
Mastering Kubernetes - Basics and Advanced Concepts using Example Project
 
Cybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and BadCybersecurity Challenges with Generative AI - for Good and Bad
Cybersecurity Challenges with Generative AI - for Good and Bad
 
Sustainable Web Design - Claire Thornewill
Sustainable Web Design - Claire ThornewillSustainable Web Design - Claire Thornewill
Sustainable Web Design - Claire Thornewill
 
Your Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software TeamsYour Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
Your Vision, Our Expertise: TECUNIQUE's Tailored Software Teams
 
Growing Oxen: channel operators and retries
Growing Oxen: channel operators and retriesGrowing Oxen: channel operators and retries
Growing Oxen: channel operators and retries
 
online pdf editor software solutions.pdf
online pdf editor software solutions.pdfonline pdf editor software solutions.pdf
online pdf editor software solutions.pdf
 
Program with GUTs
Program with GUTsProgram with GUTs
Program with GUTs
 
Why Choose Brain Inventory For Ecommerce Development.pdf
Why Choose Brain Inventory For Ecommerce Development.pdfWhy Choose Brain Inventory For Ecommerce Development.pdf
Why Choose Brain Inventory For Ecommerce Development.pdf
 
Kubernetes go-live checklist for your microservices.pptx
Kubernetes go-live checklist for your microservices.pptxKubernetes go-live checklist for your microservices.pptx
Kubernetes go-live checklist for your microservices.pptx
 
Generative AI for Cybersecurity - EC-Council
Generative AI for Cybersecurity - EC-CouncilGenerative AI for Cybersecurity - EC-Council
Generative AI for Cybersecurity - EC-Council
 
20240330_고급진 코드를 위한 exception 다루기
20240330_고급진 코드를 위한 exception 다루기20240330_고급진 코드를 위한 exception 다루기
20240330_고급진 코드를 위한 exception 다루기
 
Deep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - DatacampDeep Learning for Images with PyTorch - Datacamp
Deep Learning for Images with PyTorch - Datacamp
 
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/ML
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/MLBig Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/ML
Big Data Bellevue Meetup | Enhancing Python Data Loading in the Cloud for AI/ML
 
How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?How Does the Epitome of Spyware Differ from Other Malicious Software?
How Does the Epitome of Spyware Differ from Other Malicious Software?
 
AI Embracing Every Shade of Human Beauty
AI Embracing Every Shade of Human BeautyAI Embracing Every Shade of Human Beauty
AI Embracing Every Shade of Human Beauty
 

PHPFrameworkDay 2020 - Different software evolutions from Start till Release in PHP product

  • 1. Different software evolutions from Start till Release in PHP product Oleksandr Savchenko
  • 2. 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)
  • 3. 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:
  • 4. Agenda. ● What can be evolved? ● Evolution Stages.
  • 10. 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 + + + - + - $$
  • 11. 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
  • 12. Product Stages. Project Start Core Development Search of truth Continuously Improvements First Evolution
  • 13. Components for Evolution. Software Architecture patterns Development practices Code Repository Structure Development Team Composition Infrastructure Testing Strategy Software Architecture components
  • 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
  • 22. Architecture components. HTTP Error component RFC 7807 - Problem Details for HTTP APIs - IETF Tools
  • 24. MonolithArchitecture никому не рассказывать что у вас монолит никогда никому не рассказывать, что у вас монолит
  • 25. Software Architecture. Monolithic Architecture Layered Architecture
  • 26. Software Architecture. Hexagonal Architecture Framework Application Domain Core Domain
  • 27. Software Architecture. Monolith Architecture Component configs DB code code tests specifications
  • 29. MicroservicesArchitecture всем рассказывать что у вас микросервисы всем везде рассказывать, что у вас микросервисы
  • 30. 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
  • 31. Software Architecture. Microservices Architecture Distributed Separate Deploy Service Template Bounded Context API Layer
  • 33. Software Architecture. Service-Based Architecture Service granularity Macroservices Database scope CI/CD
  • 34. 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
  • 35. 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
  • 36. Software Dev practices. Spotify Model Tribes: ● Seller ● Buyer ● Cross-Tribe functionality Chapters: ● BE ● FE ● QA ● DevOps Guilds: ● Architecture, ● Infrastructure ● Prod-Preparation, ● etc.
  • 38. 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
  • 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. Software Architecture components. Service API Client
  • 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
  • 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
  • 53. 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
  • 54. 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
  • 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
  • 64. Software Architecture. Service 1 Service 2 2 1 3 4
  • 65. Software Architecture components. Infra as a code PHP console command app_config.yaml infra.yaml
  • 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. Quality Gates. PHPStan PHP Static Analysis Tool PCOV CodeCoverage compatible driver for PHP phpdbg SAPI module
  • 71. Test Strategy. Quality Gates - SonarQube quality gate for Libraries quality gate for Services
  • 72. Test Strategy. Quality Gates - 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