Monday, May 11, 2015

How to Make Sitecore Architecture More Powerful !

How to make Sitecore architecture more powerful!

Architecture begins where engineering ends. - Walter Gropius

Architecture is as important in software development as it is in building construction. No one breaks ground on a building without any plans and good architect.

With the non-functional requirements captured, the next step is to start thinking about how you're going to solve the problems set out by the stakeholders and define the architecture.

The architect should be very careful about IA architecture and initial back grounding of the project. He/she should know all the alternative and pros/cons of the technology and of course cost.
Architecture definition is about introducing structure, guidelines, principles and leadership to the technical aspects of a software project. So here I am adding some point that can help the Sitecore architect to build a robust system.

There are total 24 points that every Sitecore Architect Should Know:

1.       Identify the scope of the project: scope of the project must decide at the very begging  of the any project so accordingly we can design/architect the application, below are some few sample questions that needs to be asked for a customer for Sitecore applicable:
·         How will the website use the content?
·         Scope of data migration?
·         Scope of Web Forms?
·         Scope of any third party integration like CRM, Sales-force, Facebook
·         Infrastructure requirement would be on cloud or physical servers?
·         Any specific performance required?
·         Any rapid development requires like campaign etc.
·         Scope of multi-lingual and multi-site?
·         Scope of DMS, what type of reporting they want?
·         What kinds of content items exist?
·         What types of content elements will appear consistently on multiple pages (also known as reusable content)?
·         Where does the aforementioned, reusable content come from?
·         Does the reusable content display different content on different pages?
·         Does the system display content from other systems?
·         How do you integrate the content from the other systems?
·         Is the solution multilingual? If so, does the content on the multilingual versions differ?
·         What kinds of users will have access to the CMS?
·         What website regions or content types will each user have access to?

2.       Choose the Right Sitecore version:
Always choose the right version of Sitecore, before project getting started. It’s not always good to implement the latest version of Sitecore, it should be decided after considering the factors below
·         Team strength
·         Product version maturity and stability
·         Cost
·         Scope and timeline of the Project.
3.       Selection of technology:
Web Forms and MVC are two different approaches for building Sitecore application
Both can be excellent choices, and both can be very bad choices,
Depending the requirements of the application and the knowledge and experience of the team on technology.
4.       Setup Sitecore project and code deployment methodology:
There are two ways to set up the visual studio solution with Sitecore. Your solution is fully coupled with the Sitecore web site. Your solution is outside of Sitecore's website and you use some post build process to deploy. For more information please visit at http://sitecoresolution.blogspot.in/2015/02/setup-sitecore-development-environment.html
And it’s always recommended to keep your project outside the root directory
5.       Identify the build deployment process:
Architect need to be decided which methodology should be used for deployment purpose, obviously the cost can be the most important factor like TDS has license cost over serialization or package creation methodologies.
6.       Use of Sitecore Rocks: its need to be decided that Sitecore rock would be used in the project or not. Sitecore itself recommends using this tool for rapid development.
7.       Responsive design framework:  RWD is very common now’s a day, it need to be decided which framework would use for responsive design like bootstrap, htm5 etc. So, accordingly resource and design would be finalized.
8.       Third party integration: It should be proper planning for any third party integration with Sitecore application like CRM, Sales force, etc., so, accordingly IA architecture and solution can be designed.
9.       Defining IA: Information architecture design can be as significant as the coding of a CMS solution. Below are some important aspect that should be considered 
10.   Scope of DMS: Sitecore layout, template, DB design (Mongo-DB in Sitecore 7.5 or later) must be designed based on the DMS scope like personalization, email campaigning etc.
11.   Search selection: search is the backbone of any ECM system, so need to decide very carefully which search pattern or framework should be implemented like Lucence, Solr, Coveo, custom search pattern. You can find some  information on Coveo search here http://sitecoresolution.blogspot.in/2014/09/coveoindustrys-most-advanced-sitecore.html

12.   Setting multiple site solution: It is possible to have multiple sites in the same solution in Sitecore, but there are a few pitfalls and issues which need to be taken care while developing the solution.
13.   Identify the multi-lingual solution: Architect also needs to consider the factor of multi-lingual solution while creating an IA including template, layouts, presentation and standard value.
14.   Publishing architecture: publishing is very time consuming process in Sitecore application, sometime we required the dedicated Sitecore instance for publishing task to avoid long queue.
So here we need to decide and set up the accordingly
15.   Setup multiple CM and CD: By default, each Sitecore instance provides both content management (CM, for CMS users maintains the managed sites) and content delivery (CD, for visitors to those managed sites). But we can separate the CM and CD facilities into separate environments, typically involving separate servers. It’s always recommended to keep separate the CM and CD environment. Below are some advantage of separating CM and CD:
·         Scalability
·         Performance
·         Security
·         Administration
16.   Handling media library: we can manage a media library within Sitecore by two ways either in
Database or file system. Both have pros and cons so, at the time of designing the project we need to decide the best approach. Also, we need to consider some cloud based approaches like DAM with Sitecore etc.
17.   Caching implementation: Cache plays very important role in website performance. So, an understanding of all Sitecore caches is really important before implemented. If we understand all of them, then it would be easy to do performance tuning using cache settings.
18.   Web form implementation: architect also needs to identify the web form marketer scope and find out how it compatible with MVC.
19.   Logging mechanism: Sitecore uses log4net for its logging purposes, but in some situations we need to build a custom logging mechanism. One of the most common scenarios would be a multi-site solution in which the standard log will become huge and finding the exact trace information becomes painful. so we need to consider this factor at the time of designing the architecture of the application.
20.   Error handling in Sitecore: we need to consider various levels of exception/error handling like Custom Errors, Try... Catch... Finally Blocks, XSL Exception Management, Web Forms Exception Management, MVC Exception Management, Application (Global) Exception Management, Error Pages, Managing Exceptions. So after taking all error handling, need to decide the base architecture where it should be forcefully implemented.
21.   Sitecore customization: architect needs to identify the scope of customization in Sitecore like pipeline and some UI customization so accordingly template and project should be modified from the very beginning of the project.
22.    Consider Sitecore performance: Sitecore IA plays a very important role in performance point of view, below are some points that need to be considered for optimization purpose of the application:
·         Avoid Item which has more than 100 items.
·         Caching tuning
·         Enable CSS, JS Caching, Compression
·         IA architecture (avoid creating items with hundreds of children
·         Optimization in publishing wizard
·         Prevent use of Get Descendants
·         IIS level optimization
23.   Sitecore security:  Sitecore provides a comprehensive security infrastructure that you can use to secure any item in any Sitecore database. An architect should know all the aspect of Sitecore security and should implement at the time of designing the application. Sitecore also provides additional functionality that enables you to use Microsoft Dynamics Customer Relationship Management (CRM) and Active Directory (AD) for authentication.
Below are the some security topics that need to be considered at the time of designing the site.
·         Access rights
·         Users
·         User profile
·         Roles (groups)
·         Domains
·         Security inheritance
24.    Scope of data migration: scope of data migration requirement should be handled from beginning of the project here you can find the complete details on this topic.


I Hope this article will help you.

Happy Sitecore !!