Certified Professionals Meet-up:
Paulo and Pedro worked in some of the most complex projects delivered with the Agile Platform. They will share with you a set of tips and best practices about architecture design and refactoring. You will be able to apply these in your own projects and avoid spaghetti architectures that would eventually kill your project.
13. Design Design first, develop second Keep it simple, yet modular Don’t focus on optimization details Validate your design with peers Listen to the business
14. Design Did you validate your architecture with peers? test #3 Can you identify the core modules? test #4 Can you map your business into the architecture? test #5
16. Implementation Create well defined modules Simplify with abstraction Isolate integrations Use a Model View Controller pattern
17. Implementation Can you foresee module changes for new requirements? test #6 Is it clear which module is responsible for an integration? test #7 Can you reuse/replace a module? test #8
22. Evaluation Iteratively and during the project Grow your team’s architecture knowledge Keep an updated list of tests/metrics
23.
24. Disclamer Loremipsumdolorsitamet, consecteturadipiscingelit. Quisqueiaculisvehiculanisinecvenenatis. Integerpretiumelementummetusconsecteturgravida. Etiamorcisapien, interdumbibendumvulputate eu, lobortisnecpurus. Insedduinisl, neccondimentumaugue. Maecenasfeugiatsemperhendrerit. Etiamconsequatblanditnunc, necviverrasapiencursus quis. Utaliquetipsumacnisivenenatis porta. Sedutrisus urna, tinciduntinterdum massa. Maurisconvalliserat a risusvenenatisaccumsan. Praesentmetusfelis, fringillaegetelementumnon, semper a purus. Morbiac justo quis magna eleifendplacerat. Etiamrhoncusvenenatiselit, velimperdietarcuconvallisid.Aliquampellentesquedoloregetestdignissimtristique. Curabiturinmolliselit. Sed vitae nislnisl. Maurisvehicula porta quamegetmattis. Morbilectusvelit, volutpat quis tincidunt quis, adipiscingiddiam. Suspendissepotenti. Utaliquetullamcorperauctor. Aeneanlobortiseuismodipsum, quis rhoncusfelisiaculisnec. Nunctinciduntaccumsan porta. Nullaviverramauris quis loremhendreritornare. Pellentesque porta rhoncusodio, eu accumsanleoelementumid.Inlectusrisus, pulvinar eu scelerisqueeget, porttitorsednibh. Vestibulumetpretiumpurus. Inrisus justo, vestibulumidvulputateet, rhoncus quis dui. Quisquenequetortor, ultriciesacpellentesquevel, tempor eu nibh. Sed quis lectusnecelitauctorsemperac vitae dui. Pellentesquehendreritpharetratincidunt. Nullaturpis massa, dignissimidmolestieat, volutpatindolor. Vestibulum sem arcu, auctorsedconguesitamet, feugiatidnisi. Maurisnecdiam quis estfacilisis porta egetnondolor. Aliquameratvolutpat. Quisqueutnisllacus, inpharetranibh. Namfringillamalesuadaenim, egetcommodoligulasodalesvel. Praesentvulputateplaceratfelis vitae volutpat. Pellentesquevelpulvinarfelis. Nullafacilisi. Uttincidunt justo eu magna pretiumnonaliquam urna faucibus. Nullam vitae malesuadaleo. Fusce eu turpis a metusultricieslaoreet. Integerlacuslorem, convallisidcommodonec, laoreetin magna. Nuncaliquetfeugiatelit, egetegestasturpisdictumfacilisis. Sed vitae dignissimneque. Vestibulumfeugiat, ligula quis egestasplacerat, ante justo imperdiet libero, egetsemperrisusipsumsitameterat. Quisquesodalesconsecteturenim, ultriciesplaceratquamvehicula vitae. Aliquamsedneque vitae felisfacilisisimperdiet. Proinintellus eros, fringillafermentumnibh.
25. Thankyou! Paulo Garrudo paulo.garrudo@outsystems.com Pedro Queirós pedro.queiros@outsystems.com
Editor's Notes
1.Pedro Queirós is building agile projects since 2006, and is has been responsible for almost 2 million software units (and counting) Paulo Garrudo along with 9 years of agile experience he join the knowledge of more than 25 projects.2.We have 10 items that will help you finding out if your architecture is on the right path and kicking off the right way3.Several examples will be giving along with the checklist
1.Pedro Queirós is building agile projects since 2006, and is has been responsible for almost 2 million software units (and counting) Paulo Garrudo along with 9 years of agile experience he join the knowledge of more than 25 projects.2.We have 10 items that will help you finding out if your architecture is on the right path and kicking off the right way3.Several examples will be giving along with the checklist
1.Pedro Queirós is building agile projects since 2006, and is has been responsible for almost 2 million software units (and counting) Paulo Garrudo along with 9 years of agile experience he join the knowledge of more than 25 projects.2.We have 10 items that will help you finding out if your architecture is on the right path and kicking off the right way3.Several examples will be giving along with the checklist
Section of our presentation.Impact – if you don’t do nothing what can happen to your projectDesign – how should you startImplementation – during the development phase you must be on top of thingsDocumentation – knowledge, decisions, and awarenessEvaluation – don’t let your decisions vanish, buttheymustbe fine tune.
Impact – if you don’t do nothing what can happen to your project
Productivity could be better?EXAMPLE: small changes must be made to several componentes, only to deliver what you want?
- Team unhappy - if the architecture is good but you dont explain it - if the architecture is bad and they can't change it - too complex (to many layers): hard to implement, test, troubleshoot, fix, etc
Reusabilitywith high cost - you need to remove business logic, or 3rd party integration from your “isolated” module?EXAMPLE: do you have a CRM module that is also responsible for managing the make/model of vehicles? (this is not a core element of you module)
Manager (architect) - Impactanalysisof a smallchangecanbepainful - scalability - robustness
#1Can you execute deployment quickly using solutions? “metric of 30min to 1 hour”EXAMPLE: imaging a projectthattakes 6 hours to deploy, is a signofspagetti? Maybenot, wecanbe a resultofhaving 2.500.000 Software Units#2 Do you have complaints related with "code clashing" from the development team?Theycannottestthecodethatchanged, mainlybecausetheyneed to publish a solution to refreshthedepences. (Toomanylayers???)Yourdevelopmentteamisalwaysworkingonthesame espace?
Design – how should you start
Do it always upfront, usually 1.5weeks before the first development task (for a 12 weeks project)straightforward approachbottom upstart designing the coreslower to implement and to get results, but it will be more stable and robustup to bottomcan be used also, but if the project grows, its less robust and more adverse to change Don't focus too much on this topic, but take into consideration during the processEXAMPLE: you don’t need to know upfront if you will map 3 fields from ERP system (3rd party software) Peer validationget advice from other similar projectsthe more information you get, the better your decision will be
#5 Did you discuss the architecture with others when designing it?#4 - Can you identify which modules are core?EXAMPLE: #5 - Can you map your business into the architecture? EXAMPLE: Did you use meaningful names to your database entities?EMPLOYEE EMPLOYEE _EXTENDEXTRA_EMPLOYEE
Implementation – during the development phase you must be on top of things
Well defined modulesEXAMPLE: you should avoid to centralize you data model for the entire solution. Abstraction layerEXAMPLE: do you use a 3rd party data structure along with your solution, just to avoiding a “mapping”?IntegrationsEXAMPLE: there are SAP integrations that expose structure with 30 attributes and the attribute name don’t make sense to the business.Authentication should be inside the integration module (the consumers should not handle this)authentications for integrations is done inside the moduleModel View Controller (MVC) Do it for a Module, not for the whole solution. First split your factory in Modules, then apply the MVC, not the opposite.MVC should be implemented in Single eSpace applications as in multi-eSpaceEXAMPLE: All lookups in the same eSpaceDevelopmentTraceability during implementationSingle eSpace or multi-eSpace:size (Mb, loads) -> Metrics (limit size to split)OS platform allows parallel development EXAMPLE: if you have 10 developers you don’t need to create 10 espaces, but you don’t want to centralize everything.
#6 Change ControlAre you aware which modules should be affected by a change, but the impact was greater?EXAMPLE: Why the EnterpriseManager has been changed to include a new menu entry?#7 Module responsible for a integrationDid you isolate integration module correctly?EXAMPLE: You need to integrate with a webservice to send SMS all over your application, why do you add this webreference to all modules? #8 Reuse a module EXAMPLE: If you try to create a solution with the ServiceCenter, that only includes your isolated module responsible, check each modules you “really need” to make it works by seeing the dependencies list.
Documentation – knowledge, decisions, and awareness
Use SS to document your core architecture, so that in the future someone that does not understand the architecture breaks it (remember that the code will still compile)Enforce your architecture with 3rd parties. If they need "all together" try explaining you need them separated or else just create an extra module/eSpace that exposes the methods the way they want (but keeping your architecture) (eg, the business wants something that breaks, eg everything in the same screen)Everything seams to be on the right path, because you can compile your code, but be aware that during runtime you can get error.EXAMPLE:havingtwodatabaseentitiesthatmustbeinsync, butyoudidn’t centralize thisneedusing a action.
#9 Do your developers do know the architecture or do they keep asking the same questions over and over again? EXAMPLE:When you assign a task to a developer, do you explain the "big picture" and the architectural impact.I just want to map a new attribute from the 3rd party system, how can I tests it? The code is there, but I cannot see the result.#10EXAMPLE: you need to expose the list of vehicles that a customers has, but you need also the send all the invoices to the 3rd party software. Do you change the CRM module to expose those both thing OR you create a extra module (GOOD)?
Evaluation – don’t let your decisions vanish, buttheymustbe fine tune.
During the project it's important to evaluate your architecture.From time to time apply all these tests to your architecture.The developers should also be aware of all these tests to help you evaluate the architecture and provide feedback during development.Tests/metrics that you can easily extract from project/platformEXAMPLE:you can use the service center to assess your solution during development by checking how many outdated consumers do you have; if your core modules use strange producers; how many references to a webservice do you have; Create solutions to assess the module dependency matrix
During the project it's important to evaluate your architecture.From time to time apply all these tests to your architecture.The developers should also be aware of all these tests to help you evaluate the architecture and provide feedback during development.Tests/metrics that you can easily extract from project/platformEXAMPLE:you can use the service center to assess your solution during development by checking how many outdated consumers do you have; if your core modules use strange producers; how many references to a webservice do you have; Create solutions to assess the module dependency matrix
Bear in mind that each case is a case and there are exceptions.Like we said before, we shared your experience.