{"id":8382,"date":"2015-02-24T05:55:33","date_gmt":"2015-02-24T13:55:33","guid":{"rendered":"http:\/\/localhost\/exoblog\/?p=8382"},"modified":"2015-02-24T05:55:33","modified_gmt":"2015-02-24T13:55:33","slug":"on-the-road-to-success-defining-the-architecture-and-preparing-the-team","status":"publish","type":"post","link":"https:\/\/www.exoplatform.com\/blog\/on-the-road-to-success-defining-the-architecture-and-preparing-the-team\/","title":{"rendered":"On the Road to Success: defining the architecture and preparing the team"},"content":{"rendered":"<p><a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2015\/02\/Road-to-Succes_2.jpg\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2015\/02\/Road-to-Succes_2.jpg\" alt=\"Road-to-Succes_2\" width=\"650\" height=\"220\" class=\"aligncenter size-full wp-image-8396\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2015\/02\/Road-to-Succes_2.jpg 650w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2015\/02\/Road-to-Succes_2-300x102.jpg 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2015\/02\/Road-to-Succes_2-500x169.jpg 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2015\/02\/Road-to-Succes_2-360x122.jpg 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2015\/02\/Road-to-Succes_2-200x68.jpg 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2015\/02\/Road-to-Succes_2-100x34.jpg 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2015\/02\/Road-to-Succes_2-70x24.jpg 70w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><\/a><\/p>\n<p>This article is a follow-up on the <a href=\"https:\/\/www.exoplatform.com\/blog\/2015\/02\/19\/on-the-road-to-success-planning-and-starting-your-project\/\">first post of the \u201cOn the Road to Success\u201d series about planning and starting a project<\/a>.<\/p>\n<h2>Defining a relevant and reliable architecture<\/h2>\n<p><!--more--><\/p>\n<p>The technical architecture document is probably the most important document. It should contain:<\/p>\n<ul>\n<li>Software architecture: with details of frameworks and standards you can use in your project<\/li>\n<li>Description of the target infrastructure, norms and protocols used<\/li>\n<li>Network infrastructure, components and zones<\/li>\n<li>Used flows and network protocols<\/li>\n<li>System quality attributes study (high availability, security, extensibility, fault tolerance, maintainability&#8230;)<\/li>\n<li>Deployment view and design<\/li>\n<li>Environments required: development, test, integration, pre-production and production<\/li>\n<\/ul>\n<p>The final result of this document will be the deployment view (or physical view) of each environment. This view shows the components and the flows in one single schema. I want to insist that you have a pre-production environment, which is sometimes ignored. This environment should be an exact copy of your production environment. It is used for:<\/p>\n<ul>\n<li>Dry runs of releases to be executed by system administrators before doing the release on your production environment<\/li>\n<li>Reproducing and analyzing problems that have occurred on production<\/li>\n<\/ul>\n<p>This environment should be managed the same as your production environment (in terms of security, deployment, administrators&#8230;), but it is not used by the end users.<\/p>\n<p>This document is the most important deliverable before you develop any source code.<\/p>\n<p>It is mainly used to answer the question: How will I guide my team members during the project. It is used by:<\/p>\n<ul>\n<li>Developers<\/li>\n<li>Testers<\/li>\n<li>Final users<\/li>\n<li>System administrators<\/li>\n<\/ul>\n<p>What should you consider in writing this document? Here is a <a href=\"https:\/\/docs.exoplatform.org\/\" target=\"_blank\" rel=\"noopener\">generic answer<\/a>. I can\u2019t answer this question in one blog post because it depends on many factors relating to your specific project, its infrastructure and the environments required.<\/p>\n<p>You should consider:<\/p>\n<ul>\n<li>The <a href=\"https:\/\/docs.exoplatform.org\/\" target=\"_blank\" rel=\"noopener\">clustering<\/a> capability of eXo Platform<\/li>\n<li>The different flows between application servers, software and hardware load balancers, <a href=\"https:\/\/docs.exoplatform.org\/\" target=\"_blank\" rel=\"noopener\">RDBMS<\/a>, <a href=\"https:\/\/docs.exoplatform.org\/\" target=\"_blank\" rel=\"noopener\">LDAP<\/a>&#8230;<\/li>\n<li>The different system integrations that can be made (<a href=\"https:\/\/community.exoplatform.com\/portal\/intranet\/addon-detail\/exchange-extension\" target=\"_blank\" rel=\"noopener\">MS Exchange<\/a>, <a href=\"https:\/\/community.exoplatform.com\/portal\/intranet\/addon-detail\/bonita-extension\" target=\"_blank\" rel=\"noopener\">Bonita<\/a>, <a href=\"https:\/\/docs.exoplatform.org\/\" target=\"_blank\" rel=\"noopener\">CMIS<\/a>&#8230;)<\/li>\n<li><a href=\"https:\/\/www.exoplatform.com\/blog\/2014\/06\/11\/deploying-exo-platform-jboss-domain-mode\">JBoss domain mode configuration<\/a><\/li>\n<\/ul>\n<h2>Building an effective team<\/h2>\n<p>Once your team has been trained as developers, you&#8217;ll have to ask a senior developer to prepare an eXo add-on to configure the platform before starting development.<\/p>\n<p>This extension can include customizations such as:<\/p>\n<ul>\n<li>Site pages and layouts<\/li>\n<li>Default HTML web contents used in the site layout (e.g. your banners and footers)<\/li>\n<li>Site CSS files<\/li>\n<li>Enterprise directory integration configuration, if needed<\/li>\n<li><a href=\"https:\/\/docs.exoplatform.org\/\" target=\"_blank\" rel=\"noopener\">eXo Platform extension<\/a> (create a new empty extension based on <a href=\"https:\/\/github.com\/exoplatform\/extension-tutorial\/tree\/master\/empty-extension\" target=\"_blank\" rel=\"noopener\">this project<\/a>)<\/li>\n<li>Services that will be used for interactions between your system and eXo Platform IOC<\/li>\n<li>SSO activation configuration, if needed<\/li>\n<\/ul>\n<p>I recommend that you use the <a href=\"https:\/\/community.exoplatform.com\/portal\/intranet\/addon-detail\/configuration-extension-generator\" target=\"_blank\" rel=\"noopener\">Extension Generator<\/a> add-on to generate your extension. It will use your UI modifications and you won\u2019t need to write XML files manually.<\/p>\n<p>You&#8217;ll have to prepare:<\/p>\n<ul>\n<li>Development environment that is shared with all your team for periodically integrating their work (weekly for example)<\/li>\n<li>Developer workstation: define the technical requirements, development IDE and configuration of each tool (and also the code formatting template)<\/li>\n<li>Source code management, continuous integration and artifacts repository systems<\/li>\n<\/ul>\n<p>To make the development productive, I personally usually advise that each developer works on one portlet in standalone mode without integrating it inside the eXo Platform server. That&#8217;s why I choose, most of the time, to develop using the JSF 2 or <a href=\"https:\/\/juzuweb.org\/\" target=\"_blank\" rel=\"noopener\">Juzu<\/a> frameworks. Using those frameworks, the switch from standalone to portal integration mode needs few changes and it can be automatized in the build process (using Maven profiles).<\/p>\n<p>To be productive and deliver high-quality software, I recommend you use a good setup for:<\/p>\n<ul>\n<li>Unit tests<\/li>\n<li>Automatic functional tests (GUI test automation)<\/li>\n<\/ul>\n<p>Using <a href=\"https:\/\/zeroturnaround.com\/software\/jrebel\/\" target=\"_blank\" rel=\"noopener\">JRebel<\/a> can save up to 25% of your development time (even more in some cases).<\/p>\n<p>Next week, for the 3<sup>rd<\/sup> and last article of this series, we\u2019ll have deeper look at deploying, monitoring and planning the future.<br \/>\n<br \/>\n<b><a href=\"https:\/\/community.exoplatform.com\/portal\/dw\/\" target=\"_blank\" rel=\"noopener\">Join the eXo tribe<\/a> by registering for the community and get updates, tutorials, support, and access to the Platform and add-on downloads!<\/b><\/p>\n<p><!--begin adv-events--><\/p>\n<div class=\"adv-events\" style=\"background: #476fad; padding: 30px 20px; color: white;\">\n<div class=\"media\">\n<div class=\"pull-right\"><a href=\"https:\/\/www.exoplatform.com\/contact-us\/\"><br \/>\n<img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-6587 alignright\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/02\/how-to-make-the-most-of-eXo-platform41.png\" alt=\"make-the-most-out-of-eXo-platform4\" width=\"161\" height=\"85\" \/><br \/>\n<\/a><\/div>\n<div class=\"media-body\">\n<h4 class=\"media-heading\">Make the most out of eXo Platform 4<\/h4>\n<p>Register to the next weekly live demo session and get a complete overview of what you can do with eXo Platform 4. <strong><a href=\"https:\/\/www.exoplatform.com\/contact-us\/\">Reserve your seat now!<\/a><\/strong><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!--end adv-events--><\/p>\n","protected":false},"excerpt":{"rendered":"This article is a follow-up on the first post of the \u201cOn the Road to Success\u201d series about planning and starting a project. Defining a relevant and reliable architecture","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[699],"tags":[],"lang":"en","translations":{"en":8382},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/8382"}],"collection":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/comments?post=8382"}],"version-history":[{"count":0,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/8382\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/media?parent=8382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/categories?post=8382"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/tags?post=8382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}