Anzeige
Anzeige

Más contenido relacionado

Similar a "Different software evolutions from Start till Release in PHP product" Oleksandr Savchenko(20)

Anzeige

Más de Fwdays(20)

Anzeige

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

  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.
  5. BrownField
  6. BrownField
  7. TDD BDD DDD RDDResume Driven Development
  8. 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 + + + - + - $$
  9. 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
  10. Product Stages. Project Start Core Development Search of truth Continuously Improvements First Evolution
  11. Components for Evolution. Software Architecture patterns Development practices Code Repository Structure Development Team Composition Infrastructure Testing Strategy Software Architecture components
  12. Project Start. Project Start
  13. Single Team
  14. 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
  15. Development practices. Code-Style strategy
  16. Development practices. Code-Style strategy
  17. Software Components. Vendors
  18. Development practices. Cross-Stack contracts
  19. Development practices. Cross-Stack contracts
  20. Architecture components. HTTP Error component RFC 7807 - Problem Details for HTTP APIs - IETF Tools
  21. Development practices. Methodologies Lean Development
  22. MonolithArchitecture никому не рассказывать что у вас монолит никогда никому не рассказывать, что у вас монолит
  23. Software Architecture. Monolithic Architecture Layered Architecture
  24. Software Architecture. Hexagonal Architecture Framework Application Domain Core Domain
  25. Software Architecture. Monolith Architecture Component configs DB code code tests specifications
  26. First Evolution
  27. MicroservicesArchitecture всем рассказывать что у вас микросервисы всем везде рассказывать, что у вас микросервисы
  28. 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
  29. Software Architecture. Microservices Architecture Distributed Separate Deploy Service Template Bounded Context API Layer
  30. Software Architecture. Service-Oriented Architecture
  31. Software Architecture. Service-Based Architecture Service granularity Macroservices Database scope CI/CD
  32. 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
  33. 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
  34. Software Dev practices. Spotify Model Tribes: ● Seller ● Buyer ● Cross-Tribe functionality Chapters: ● BE ● FE ● QA ● DevOps Guilds: ● Architecture, ● Infrastructure ● Prod-Preparation, ● etc.
  35. Core Development. Stage Core Development
  36. 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
  37. 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
  38. Software Architecture components. Boilerplates https://github.com/thephpleague/skeleton
  39. 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
  40. Software Architecture components. Service API Client
  41. Software Architecture components. Service API Client http://httplug.io/
  42. 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
  43. Polyrepo Code Repository Structure. Polyrepo services shared-libs open-source packs boilerplates test services Semver
  44. Software Dev practices. GYSHIDO
  45. 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
  46. 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
  47. Search of truth. Stage Search for truth
  48. 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
  49. 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
  50. Code Repository Structure. Monorepo?! Polyrepo services shared-libs open-source packs boilerplates test services Monorepo services shared-libs open-source packs boilerplates test services
  51. Code Repository Structure. Migration to Monorepo Monorepo migration process folder structure migration tool branching strategy versioning shared libs to control the functionality CI/CD
  52. 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
  53. 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;
  54. 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
  55. 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
  56. Code Repository Structure. Monorepo - Feature Flags https://featureflags.io/
  57. 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
  58. Continuous Improvements
  59. Software Architecture. Service 1 Service 2 2 1 3 4
  60. Software Architecture components. Infra as a code PHP console command app_config.yaml infra.yaml
  61. None-Breaking change development. code Storages Bundles, configurations queues
  62. 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
  63. None-Breaking change development. Bundles & Configurations Bundles, configurations
  64. None-Breaking change development. Storages & Queues Storages queues ● new mandatory fields ● table / field renaming ● index renaming ● topic renaming ● message structure
  65. Test Strategy. Quality Gates. PHPStan PHP Static Analysis Tool PCOV CodeCoverage compatible driver for PHP phpdbg SAPI module
  66. Test Strategy. Quality Gates - SonarQube quality gate for Libraries quality gate for Services
  67. Test Strategy. Quality Gates - SonarQube
  68. 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
  69. Summary.
  70. THANK YOU
Anzeige