How to ‘well’​ architect your next tech project!

Recently, I am delving into things as to how well we scale and engineer the web side of things (WoT). If there is no such word as WoT, there should be. I am super convinced as in today’s modern world (as we all call it), there are numerous resources to choose from. A plethora of plugins, stacks, code frameworks, etc. But, finding the right one and having the ability to scale is important. In this article, let’s walk as to what we need to build the right stack structure from the start. What should be your first technical point to the very last? So, let’s start.

First, we need to ask ourselves what are we trying to build. This is the very first question you should be asking yourselves. Having that clear objective will define the roadmap of your product. If you are creating a new type of scalable non-relational database architecture, then going with C/C++ be your language. But, if you are going with something web or enterprise then you have plenty to choose from. If you are in enterprise mode, then you have options like Java or C#. The two most popular languages. But, if you are going with the Web, then you have more choices. Like LAMP stack, Go, Ruby on Rails, and much much more.

WEB

In this age, everything can be coded into something. If you want to stick to the C/C++ programming structure, you have GO. But, if you want to have a friendly easy to learn language then you have Ruby and much more to choose from.

Here is a quick list I got from this source:

  • Front-end web development: JavaScript
  • Back-end web development: JavaScript, Java, Python, PHP, Ruby
  • Mobile development: Swift, Java, C#
  • Game development: C++, C#
  • Desktop applications: Java, C++, Python
  • Systems programming: C, Rust

Add alt textNo alt text provided for this image

Database

Gone were the days where we only had MS Access to start from (remember 2003, anyone?) and ‘Hello’ to today. How you want your data to be structured. That’s the first thing you should ask yourself. What’s your data purpose. Does it need to have a primary key relationship like a leaderboard or does it need to have a flat like structure. Maybe a JSON object to choose from? If then, you can go with any non-relational databases. A NoSQL database providers a mechanism for storage and retrieval of data that is modeled in means other than tabular relations used in relational databases.

Here is a great list of the top DBs by their popularity model (source):

Add alt textDB-Engines Ranking

Personally, I am a fan of ‘Relational’ DBs. However, if you are building a scalable web application system where you need clusters of nodes to be expanded in a short span of time, then this will give you a hard time. You then need to go with a more non-relational DB approach IMO. They both have their drawbacks. If you are going to create a more bank-type DB, then you need a relational structure where there are relationships involved. You cannot do that in a document model structure or a NoSQL structure.

So in summary, RDBMS’s suffer from no horizontal scaling for high transaction loads (millions of read-writes), while NoSQL databases solve high transaction loads but at the cost of data integrity and joins.

Application Performance Metrics

The next thing that comes to my mind is how you log everything and be able to scan without even touching your code. There are few insights tool out there which are pretty neat on finding out where your code is failing. I have used some of them like:

New Relic

App Dynamics

They both have their pros n cons. I won’t get into the detail as to which ones to pick from, but you can give it a go on this from your end.

DevOps

This is perhaps the most important one as this is where you are going to save your capital or lose it. The decision to make as to how better you can create your DevOps varies. You can utilize open-source tools like Team City or Bamboo or you can go with enterprise versions like AWS, Azure, Google Cloud, etc.

There are several other ones that I didn’t bother including here as the world is an oyster when it comes to web stack. Hope you get something out of this.

Until next time…

Sitecore XM or XP?

Sitecore has 4 main product offerings: Sitecore Experience Manager (Sitecore XM), Sitecore Experience Platform (Sitecore XP), Sitecore Experience Commerce (Sitecore XC) and Sitecore Content Hub.

In this article we’re going to be looking at the differences between Sitecore Experience Manager (XM) and Sitecore Experience Platform (XP).

Sitecore Experience Manager

Sitecore Experience Manager is Sitecore’s CMS only offering. It allows you to manage multiple websites, and multilingual content in the same CMS, as well as integrating with third-party applications, systems and data. It also allows you to deliver content across multiple devices and channels.

Sitecore XM also features a WYSIWYG editor (Experience Editor) that allows content authors to edit pages, components and items as they would appear on a page to a visitor.

Sitecore Experience Platform

Sitecore Experience Platform includes the CMS that you receive with Sitecore Experience Manager, as well as the exciting personalization and marketing automation features that marketers salivate over.

It allows marketers to deliver personalized content on any device or channel, while giving them a 360 degree view of each customer’s journey.

The marketing automation features remove the need for a separate marketing automation platform, and allow marketers to nurture prospects using data from multiple sources and touch-points.

Let’s take a closer look at some of the features of both XM and XP.

Sitecore Experience Manager Features:

  • Experience Editor
  • Forms
  • Sitecore Publishing Service
  • Sitecore Experience Accelerator (SXA)
  • Sitecore Mobile SDK for Xamarin
  • Data Exchange Framework
  • Search
  • Active Directory
  • Sitecore JavaScript Services
  • Media Library
  • Sitecore Identity
  • Device Detection (in-session)
  • Sitecore.Services.Client
  • Sharepoint Connect

Experience Editor

Sitecore’s Experience Editor is a WYSIWYG editor that allows you to edit the items and components on a page as you would see them, like the images, text, buttons, links, and so on.

screen grab of experience editor wysiwyg sitecore
Image source: Sitecore

Forms

Sitecore forms is an application that allows users to easily create new forms that collect visitor data. With the Sitecore forms application you can also create templates, apply form validation rules, run reports on form performance, export form data and customize your forms with styling.

Sitecore Publishing Service

Sitecore Publishing Service is a publishing module that replaces the original Sitecore publishing. It allows large volumes of content to be published faster, increases the publishing throughput and provides a better user experience.

Sitecore Experience Accelerator (SXA)

SXA is an interface for non-technical content authors and designers that allows them to work on the site at the same time as developers are working on the components and data templates, so you can deploy your sites faster.

Sitecore Mobile SDK for Xamarin

Sitecore Mobile SDK for Xamarin is a framework for developers that allows them to serve content managed in Sitecore on a mobile app.

Data Exchange Framework

The Data Exchange Framework is a tool that allows you to integrate third-party data into Sitecore. It allows Sitecore developers to import the data into a Sitecore instance as Sitecore items.

Search

Sitecore’s search options include Solr, Lucene or Azure depending on your business’s needs and the architecture you want to implement.

Active Directory

Sitecore allows integration of Active Directory domain users and groups as Sitecore users and roles.

Sitecore JavaScript Services

A headless CMS option, Sitecore JavaScript Services allows delivery of headless JS applications using Sitecore through React, Angular and Vue frameworks. This is great for marketers as they’re able to reach their audiences everywhere, even on IoT connected devices and mobile apps.

Media Library

Sitecore Media Library allows you to manage and store all of your media assets in one place. This includes images, videos, documents or audio files that you want embedded on your webpages or available for download.

Sitecore Identity

Sitecore Identity is a logging-in mechanism for Sitecore that allows single sign-on across Sitecore applications.

Device Detection (in-session)

Sitecore Device Detection identifies a visitor’s device and their properties, including their IP address. Sitecore XM only does this for live sessions.

Sitecore.Services.Client

Sitecore.Services.Client allows client-server communication in applications by providing a service layer on the server and client side of Sitecore applications.

SharePoint Connect

SharePoint Connect allows you to integrate SharePoint assets with Sitecore’s content delivery engine. You can use the framework to integrate out of the box, or you can customize your solution based on your needs.

Sitecore Experience Platform Features

Sitecore Experience Platform includes all the features that Sitecore Experience Manager offers, with the following additional features:

  • Sitecore AI
  • Sitecore Cortex™
  • Enhanced editing experience
  • Sitecore Experience Database™
  • Marketing automation
  • Sitecore Experience Profile™
  • Sitecore JavaScript Services™ (JSS)
  • Experience Optimization
  • Path Analyzer
  • Campaign Creator
  • Experience Analytics
  • Sitecore xConnect™
  • Sitecore Universal Tracker
  • List Manager
  • Device Detection
  • Salesforce Connectors
  • Microsoft Dynamics CRM integration

Sitecore AI

An add-on that allows for automated 1:1 personalization at scale. Sitecore AI automatically identifies visitor patterns, segments your visitors and personalizes elements on your pages for the visitors depending on where they’re at in their customer journey.

Sitecore Cortex™

Sitecore Cortex is Sitecore’s machine learning architecture that allows you to get a deeper insight into visitor behaviour on your site. Sitecore Cortex also offers recommendations on the data it collects, and suggests personalization tactics for you to apply.

Enhanced editing experience

Analytics are provided in Sitecore’s user friendly editing environment for real-time contextual insights.

Sitecore Experience Database™

A data repository that stores all visitor activities and interactions on your site and other channels to give you a 360 degree view of every customer, throughout their lifetime.

Marketing automation

Allows you to create automated marketing campaigns and actions based on defined rules to nurture your prospects.

Sitecore Experience Profile™

Experience Profile is a database that lets you keep track of contacts and website visitors and how they interact with your website and business, even if they haven’t provided you with their name.

Optimization

Experience Optimization lets you test multiple variations of content to find out which components, pages or elements are most effective.

Path Analyzer

Path Analyzer allows you to tracks user journey paths on the site so you can see what path they take when they navigate your website, digital assets and campaigns.

Campaign Creator

The Campaign creator is a tool that allows you to easily create, manage and monitor multi-channel campaigns in one application.

Experience Analytics

Experience Analytics provides you with an array of reports and a dashboard so that you can monitor and analyze patterns and trends from your website and data sources beyond.

Sitecore xConnect™

Sitecore xConnect is the layer of data between the database and a client that allows you to store data from any third party system to give you a full 360 degree view of a prospect or customer.

Sitecore Universal Tracker

Sitecore’s Universal Tracker allows you to collect data from multiple sources both on and offline on any device.

List Manager

List Manager allows you to create static and dynamic segmented and contact lists that you can use in marketing automation or email blast campaigns.

Device Detection

Sitecore Device Detection identifies a visitor’s device and their properties, including their IP address and adds this information to the Sitecore xDB so you can use it for reporting.

Salesforce Connectors

Sitecore’s Salesforce connectors allow you to integrate Sitecore with your Salesforce CRM so that you can pass data between the two systems and use it to improve customer experience.

Microsoft Dynamics CRM integration

Sitecore’s Microsoft Dynamics connector allows you to exchange data between Sitecore and your Dynamics CRM.

Until next time…

The future of websites: Headless CMSs

There has been a lot of buzz words lately in the CMS space about Headless CMS. Since the dawn of the era when the tech bubble exploded in the early 90s, maintaining a web presence has come a long road. Whether you want to show an ad or to track visitors even more campaign based personalization, we are seeing it all now. This is the new beginning…

So, why an article about Headless? What are you going to get out if it?

With 10+ years in CX space, I believe maintaining a website had a big overhaul. Previously, we were called “webmaster” which you may have found out in the footer section of your favorite site. But, now the term “webmaster” or seeing a counter of user visits seems ancient. This was all just a couple of decades ago.

Why Headless now?

With the rise in popularity of decoupled architecture like JAMstack, CMS’s have been increasingly shunning traditional DB driven systems in favor of more API based ones, a.k.a “Headless”.

The traditional CMS is a monolithic structure which provides out of the box solutions for templating and styling that are customizable via a WYSIWYG. As a result, designers and website builders can create professional-looking sites without needing to write a single line of code.

Since you’re encouraged to use the templates and style sheets that accompany a particular CMS, your ability to easily update or migrate content is limited.

As opposed to a traditional CMS, headless CMSes intentionally “chop off the head” thereby decoupling the front end from the back end. It, therefore, has no default frontend system and completely relinquishes the decision of presenting content to the developer.

As a result, it provides developers with greater flexibility in deciding their own architecture while letting them harness the strength of a CMS as a database. Moreover, because of the framework agnostic architecture of a headless CMS, you don’t have to worry about platform compatibility or database connectivity errors, as is common with WordPress.

Okay! It seems interesting, what’s in it for me?

In order to really grasp the elegance of headless CMS – and its possibilities – you have to cut through the clutter and understand how they work fundamentally. To start, let’s define a few terms:

Application programming interface (API) – a communication system that sends information to the server and back via user requests. How the API calls are answered depends on the specifications of the front-end protocol. When a content management platform is called API-driven or API-first, that means it’s a headless or decoupled CMS.

Headless CMS – a content management system that contains only the back-end developer environment, with no default templating system or frameworks. These are a subset of decoupled CMSs.

Hybrid CMS – this is another name for a decoupled CMS. Such systems offer many of the benefits of fully headless content management systems but come with optional tools and frameworks in the box to make the developer’s work more efficient.

Front-end agnostic – when a CMS doesn’t contain a default front-end design platform, it’s said to be front-end agnostic. This means it can work with a variety of front-end frameworks.

Which one is better?

There is no one short answer. As a business, you have to gauge as which type of the headless cms will be in line with your systems or development culture.

Generally speaking, if you want to publish on multiple channels, and you’re comfortable with a bare-bones, API-driven system that has limited tooling choose a headless CMS.

But if you’re looking for a happy medium because you prefer the extra help, choose a hybrid or decoupled platform.

Pros and Cons

Pros-

Future-proofing: As long as the API endpoint is available, you can continue to communicate with it without too much of a maintenance burden.

Tech Agnostic: You’re not confined to design, style, or generic templates.

Better performance: Since there’s no front-end, your server will use fewer resources managing layouts and templates for dynamic websites.

Licensing fees: Headless content management systems often don’t require a copy of the CMS engine before deployment. That means the possibility of saving on licensing fees, from using the CMS or any other software.

Content-as-a-Service (CaaS)

Another name for a CMS, this is a subcategory of Software-as-a-Service. These are usually offered by a managed cloud “CaaS” providers like eZ Hosting, Surfcode, and Contentful, and sold as a monthly “SaaS” subscriptions, which enables content delivery on demand.

Security: CMS-es often come bundled with third-party plugins that can introduce security vulnerabilities to your application.

Cons-

While there are many benefits to using a headless CMS, they are not without disadvantages.

No default WYSIWYG editor: Headless CMSes don’t come with a default editor and often require content in the form of markdown. This can make the content creation process frustrating to those who may be used to WYSIWYG editors like WordPress.

Fragmented Tech Stack: Headless CMS-es require devising your own stack. While this gives developers the full flexibility of building a stack, picking a stack introduces a huge cognitive load at the start of a project.

How to pick?

How to pick headless cms based on your Org? Well…you can assess from below statements:

Security and access– How will these be managed, and by whom? Common CMS platforms like Drupal and WordPress are notorious for having security vulnerabilities, which necessitates regular updates of the CMS software. Conversely, a headless CMS has no database to be attacked; your primary concern as an admin should be protecting sensitive content and providing access to the appropriate parties.

Content previews – How will previews be handled? Because headless CMS systems are newer, many don’t include the ability to preview content before going live. If previews are essential to your content strategy, make sure to use a headless CMS that offers them as a feature.

How will you sync UI/UX across multiple platforms and devices? When choosing a headless CMS, it pays to do a bit of testing first. Check to see how your content displays on any and every device. You’ll want to maintain the same UI/UX (re: look and style) across all screens.

Cache management – Unlike coupled CMS platforms, considerations like when to return to the data repository, when and how to clear the cache, and when a cached version of a CMS needs to be served are considerations that the front-end developer needs to establish.

Data migration – Are there options for migrating data from one CMS to another or tailoring it to different devices and operating systems? Many businesses today use “managed” WordPress hosting, for example. Though convenient (and open source), moving content out of WordPress can be clunky. Headless frameworks like Hugo have tools to help with the migration process.

Popular Headless CMSs

Netlify: Based on your their site, it seems they are betting on JAMstack. The web is rapidly changing away from monolithic to decoupled apps.

dotCMS: Written in JAVA, they are calling themselves a hybrid CMS shop.

Kentico: Written in ASP.NET MVC, they have 1 stop shop for an enterprise solution (Web CMS, Online Marketing, E-Commerce, Online Communities, etc)

Contentful: This one is a favorite of mine because it provided more power to the devs. Plus, the price point isn’t bad 😉

ButterCMS: If you just need a CMS which is plain and simple, this one is for you. API driven and clean.

CraftCMS: More open, giving power to your hands. You can manage multiple sites or use Craft as a content API. A good amount of plugins available.

WordPress REST API: And we all know the behemoth of the websites, the good ol WordPress. It also has API layer integration in case you want to customize your site.

There you have it. Headless CMSs in a nutshell. Whatever you chose to implement, you have to take some things into consideration. No one can fit all 🙂

Until next time…

Setting up Sitecore 9.1 XM on Azure without ARM Templates

I have been delving around creating a POC base site in Azure so that I can quickly spin up an instance of Sitecore with SXA and then hookup with my Azure DevOps pipeline. With all the research of creating your own personal ARM template and modifying it, you can also also create a normal XM site with simple clicks. Here is what I did:

Step 1: Go to marketplace:

Type market on top to quickly find it.

Step 2: Type Sitecore on “Search Everything” section

Step 3: Click ‘Create’ to start creating your own XM instance:

Step 4: Find your Subscription and either use existing resource group (it HAS to be EMPTY) or create a new Resource group:

Step 5: Now click Sitecore Settings section:

A new window will open asking you to select the version of your Sitecore. I have selected 9.1 initial release. Topology is Sitecore XM. Configuration is Developer since I am using just one instance for my POC. You can also use scaled too. There are some additional modules in place also which you can select like:

Sitecore Connect for Salesforce Marketing Cloud 1.0

Sitecore Experience Accelerator 1.8 (SXA)

I have selected SXA.

Click on ‘Credentials’ now.

Step 6: Setup your credentials

Start typing your password for Admin and SQL Server. Remember, you do not need an existing SQL server to continue. You can create on the fly the server login.

Find your license and upload it.

Then, either you can auto-generate the self signed certificate OR you can use your own. I have used my own. You can provide the common name of your certificate with your password.

Then select your Search Provider. I have used Azure Search here.

Select Replica Count. Now, since this is more of a dev box, I have selected 1 replica. For production, you can use 2 or more depending on your needs.

Select Application Insights if you want to have that option. I recommended using one.

Click Region Tab:

Step 7: Select Location of your Deployment and App Insights Region. I have used Central US and West US 2:

Step 8: Once you confirm you can click next button or the summary tab on top. Once you done with that its going to ask you if you are okay.

Step 9: You will see in your Azure tab that its going to say ‘Configured’. Then review Legal Terms next:

Step 10: Click OK to create your Sitecore XM instance on Azure Cloud. Deployment will take some time. So relax 🙂 Grab a coffee or a bite.

If you want to see the progress, you can jump on your create resource group and see the changes. You gonna find all the App Service, App Insights, SQL DBs getting created.

Hope you got some insights on this if you are new to Azure OR Sitecore.

Keep blogging and Keep Learning!

Until next time…

How CX can gain from Artificial Intelligence and Machine Learning?

Just another day I thought that how are we engaging with our customers in day to day life. Customer Experience to me is a journey where you try to engage with the customer without physically present there. If you REALLY think, how sales people try to engage you once you are in the dealer lot? What made you buy that car? Customer Experience (CX) is trying to do the same for the web without physically being there.

But nowadays we are seeing a lot of buzzwords for AI and ML based learning in CX. How adaptive your next site/app would be? How engaging are you with a customer who is viewing your site? Almost all the companies now tries to figure this out. With AI/ML we are seeing these happening. Now we have Alexa, Google Home, Apple HomePod, etc. The possibilities are endless in this game. But, I think below are the key areas we can dive on:

1. Finding areas with data:

A great example comes to my mind is Spotify where they have gathered around 100 million accounts user data to solidify the ad-campaigns for their users. I am sure if you are a Spotify user, you know what I am talking about. Whether it’s a Valentines Day or the track which gets you going. It’s all in there. More personalized with your data.

2. Chat bot to the next customer service level

This is a very interesting one as now a days you are seeing these chatbots emerging from every site. Grand View Research predicted that the chatbot market with reach $1.25 billion by 2025.

3. AI + Data

Another great example of merging AI + Data is Amazon. If you think about billions of data points and making a recommendation based on your buying experience, that says it. It accounts for 35% of its revenue. With recommendation in place, we are seeing they are going into more into your home with Alexa devices. They have also their NLP service called Comprehend that uses machine learning to find insights and relationships in text. No ML experience required. Neat, isn’t?

As you can see that how our day to day world is getting changed by small but BIG meaningful impacts of AI and ML data. This process is not done overnight. It’s a long journey where you have to manage velocity and volume of data. We are ready to embrace the future of AI. Believe it or not, its already happening…

Until next time…

Clean Architecture. Why it matters?

While reading Robert C.Martin, Clean Architecture book, I came across a lot of real-world scenarios where productivity of code vs revenue gets stagnant over few releases of the product. From the business point of view, you want to make sure that you are getting the most value for your buck for the stakeholders.

In the book, Robert mentioned a case study for a real estate company which over the years their productivity remains constant (after 8 releases or so) and the cost to maintain the code multiplied by 10 times. So, that means if you started with $1 Million budget, then now you are shelving $10 Million with less or minimal throughput.

So, what went wrong here?

Let’s look closely with some graphs (credit: Robert C.Martin’s book)

Graph 1:

As you can see that in this graph, we are seeing the sheer scale of engineering staff dramatically increases over the course of time. By 8th release, your staff is almost tenfold as compared to release 2. Not good!

Graph 2:

In graph 2, by the time you are at 8th release the growth of the code reaches a stagnant value. Clearly, something is not right.

Graph 3:

What really scary here is the cost and with every release its growing exponentially. Boy! Upper management is not going to love it. As Robert put it, this looks like a signature of mess.

Graph 4:

This is what developer sees. They started out with 100% productivity, but with every release, it went down.

Graph 5:

This is what executives see. You can calculate what is going on their minds…Phew!

WHAT SHOULD WE GET OUT OF THIS?

Have you heard a saying “slow and steady wins the race”? Similar to this saying what happened here. Developers usually get into the game of developing without giving a good thought as to how to architect a better solution.

IMHO every architect of any project should take time to think and articulate as which of the designs will be better for the project. It is more to just coding! I firmly believe in clean architecture.

until next time…

Blockchain – Understanding the concept.

In this world, the businesses are moving forward with the seamless transaction structure. Whether you want to call out the airline or housing….or wherever transaction happens, you need some kind of seamless processing. That’s where blockchain technology comes in. The blockchain is not something new. Back in 1999, the file-sharing network Napster made it easy to share audio files on a hybrid P2P network. That file-sharing network did more than just share music files: It allowed all users to retain copies of those shared files such that a single digital asset resulted in a limitless number of perfect copies across a global network.

This structure has been coined years ago and the reason why we are hearing about it now so much is of course Bitcoin. ENTER THE BITCOIN WORLD!

In 2009, a new kind of infrastructure mined 50 digital coins and recorded them on a public ledger that’s replicated on a decentralized P2P network of interconnected computers. The remarkable thing about this blockchain is that it lacks any sort of trust authority or governance to validate each transaction. Everything is in public. Understanding how to engineer a public blockchain requires knowledge of cryptographic hashes, public key cryptography (PKC), binary hash chains (Merkle trees, in particular), and consensus algorithms. I’ll briefly review these concepts, and then I’ll show that a blockchain is a hash chain that contains a hash chain of transactions. Once you grasp this nested-hash-chain concept, you’ll understand blockchain technology’s fundamental design.

I will write more regarding different Cryptographic, Public & Binary algorithms in my later post.

What are the business benefits of blockchain?

In legacy business networks, all participants maintain their own ledgers with duplication and discrepancies that result in disputes, increased settlement times, and the need for intermediaries with their associated overhead costs. However, by using blockchain-based shared ledgers, where transactions cannot be altered once validated by consensus and written to the ledger, businesses can save time and costs while reducing risks.

Blockchain consensus mechanisms provide the benefits of a consolidated, consistent dataset with reduced errors, near-real-time reference data, and the flexibility for participants to change the descriptions of the assets they own.

Because no one participating member owns the source of origin for information contained in the shared ledger, blockchain technologies lead to increased trust and integrity in the flow of transaction information among the participating members.

Immutability mechanisms of blockchain technologies lead to lowered cost of audit and regulatory compliance with improved transparency. And because contracts being executed on business networks using blockchain technologies are automated and final, businesses benefit from increased speed of execution, reduced costs, and less risk, all of which enables businesses to build new revenue streams to interact with clients.

I do believe that when we had WWW back in the day, this technology advancement revolutionized the way how we work now. Blockchain will be the next -> WWW.

300+ Personalization Rules – What to do with Sitecore Caching?

As we all know Sitecore provides us caching out of the box. Call it, Prefetch, Data, HTML, Item and so forth…You know what I am talking about. Sitecorians.. 🙂

This article mainly talks about how we can better improve our caching strategy in our projects/solutions especially when you have about 300+ Sitecore personalization rules. Have you had a chance to tackle a problem like this before?

Recently, I came across a problem where the page load (the response time from the server was too slow). I don’t actually recall what is the exact number, but let’s say it wasn’t up to the par. And with about 300 or more personalization rules (OOB, of course) the page was showing us bad results.

So, we started digging stuff. From, debug from XP to figuring out in chrome dev tools. We could not find what was the issue.

There was one catch though! The 300+ rules that we have. With 1-10, the page was rendering fine, but 300? C’mon! There has to be a better way, right?

In our components, we were using external calls with setting up the JSON data coming back in Application Cache. So, all the external calls where getting set in Application Cache. It was set to 500MB and expiration of 240 minutes. We also avoided any call to the DBs or any APIs directly. Everything is stored in Application Cache.

One of the advantages of using Application Cache is if you host Sitecore in Azure, it will use Redis for the same purpose. So, you don’t have to utilize Redis externally. It will be picked up Redis.

This was our base class in Foundation Layer:

public Boolean SetCache(String xCacheKey, T xCacheObj, int xcacheDurationInMinutes = 0)
 {
 Boolean bIsSuccess = false;
 if (xcacheDurationInMinutes.Equals(0))
 xcacheDurationInMinutes = _cacheExpirationTimeInMinutes;
 if (!_cache.InnerCache.ContainsKey(xCacheKey))
 {
 _cache.InnerCache.Add(xCacheKey, xCacheObj, TimeSpan.FromMinutes(xcacheDurationInMinutes));
 }

return bIsSuccess;
 }

And this is how we are calling from one of the classes from Foundation layer:

public TestForCache()
{
// Check if the API results are available in Cache.
string cacheKey = Settings.GetSetting(Constants.MyCache);
if (!string.IsNullOrWhiteSpace(cacheKey))
{
cacheKey += "_" + Sitecore.Context.Language;
// If the result is available in cache, return the result
var cacheResult = CacheManager.CacheManagerInstance.GetCache(cacheKey);
if (cacheResult != null)
{
return cacheResult;
}
}
// Continue since no cache exists.
var lang = (string.Compare(Sitecore.Context.Language.Name, Constants.ES_US, true) == 0) ? Settings.GetSetting(Constants.LanguageEspanol) : Settings.GetSetting(Constants.LanguageEnglish);
var result = ServiceHelper.GetJsonResult(Settings.GetSetting(Constants.CacheKeyAPI) + lang);
// Set API results in Cache
if (!string.IsNullOrWhiteSpace(cacheKey))
CacheManager.CacheManagerInstance.SetCache(cacheKey, result);
return result;
}

 

As you can see how we are calling the storing all the cache operations from Base to the calling functions. This decreased our TTFB (time to first byte) and the first-page load response is much much faster.

Hope you will get something out of this post 🙂

Why you need Helix in your solution?

While back, I created a poll on whether if you prefer Helix vs. Non-Helix approach to the solution and most of you had an inclination towards creating a scalable, yet modular structure with Helix principles. The term Helix was coined long time ago which means decoupling of the projects (simple!). In the dictionary, it goes something like this:

“an object having a three-dimensional shape like that of a wire wound uniformly in a single layer around a cylinder or cone, as in a corkscrew or spiral staircase.”

Think you got the gist? No? Alright, moving on…

 

For the solutions that I have implemented on Helix, these are my findings. Hope you share and provide your thoughts as well:

1. Clean: Now, when I say clean, it doesn’t mean that cleaning your house or anything, but to able to scope out the code in a breath of time. Clean n Clear (not the face wash) solutions were always part of solution designing from the dawn of software development. Every person who is involved in software will tell you to make their projects clean and easy to understand. That is why I highly recommend the book Clean Code: A Handbook of Agile Software Craftsmanship: Robert C. Martin: 9780132350884: Amazon.com: Books This book really shines the way how you design classes, functions, variables, etc.

Helix focuses on this. To make solution clean and easily identifiable.

2. Scalable: For any project that you want to do in software life cycle, you always want to make it scalable. Which means, it can extend or grow. In Sitecore terms, it means are you thinking of extending the solution to accept any multisite capabilities, outside caching strategy, external logging mechanism, language providers, 3rd party integrations, etc. Helix principles provide a way to extend your classes, functions, projects in a single solution.

3. Faster time to market: Anytime in any software application, you have to change something, build something, roll-off, bug fixes as quickly as possible and make it live. With Helix, it is easy to take care of requests like these. Everything is modular and flexible. Need to find and fix the bug = check! Need to extend some classes from Sitecore Kernel library = Check! It’s not as easy as it sounds (but you get the point).

4. Technical Roadblocks: How many times you have seen in the old software age that whether a class is too extended and is written in a millions line of code? Can you read it? Can you interpret what’s being written? Its hard, I get it. Technical roadblocks, or sometimes I say “Bad Code Written”, occurred a lot of times in our lives where we are stuck and cannot go anywhere. Either we have to start from scratch or…? I don’t have any other solution to this. With Helix, there are no technical roadblocks. Everything is scalable and easy to read. Making architecting fun!

5. Modular: Did I mention Modular in previous points? I don’t think so. Here it is: Having a modular structure always help to define which projects can be called as separate. One important thing to notice here is that not all the components you see on the page are features/modules. But, one key thing to note is that they are always acting as a separate entity. That is the power of calling them modular. If you have a Navigation, make it a separate project. If you have a Hero Carousel, make it a separate project.

In a nutshell, I think for every project, there are customizable solutions. But, at the core, it can all remain the same.

Well..these are the main points that I thought which make Helix easy to deal with and my life too  In the next, I will provide a tech whitepaper on a recent project we did using Sitecore 9 and SXA.

More to come…

Helix Principles Architecture: Part 2

How to setup your project for front-end developers.

In my last post, I have mentioned some thoughts on how to create a simple solution structure using Helix Principles. In this post, I would like to drill down a bit further. We will talk about where to store your CSS/JS for every feature and how to store them in your solution.

We are living in a totally different space where you have all the dedicated team around yourself to provide you the HTML/CSS/JS files. If you look at the Habitat site and solution structure, you will see that all of the assets are stored under Theming. Basically, Habitat provides us a single instance of the project to store all the required CSS/JS.

However, if you are working with a team of frontend developers, they will be checking out the whole solution along with Habitat.Theming project. They will be working daily on that project or at least setting up a gulp builds to create a main.css or any .css files.

HOW WE CAN BETTER DESIGN A SOLUTION FOR OUR FRONTDEVS?

There has to be a better way, right? After all, we are geeks. Our job is to make it better.

In my experience, I have created all the features under the website project under project folder. Something like this:

Helix-Frontend-Solution-Structure

As you can see that for the frontend developers, all they have to check-in the files in this project itself. They can focus on the features listed here and push all the HTML/CSS/JS in. In this way, they are focused on one project only. So, does for the fonts for common and for each website:

Helix-Font-Solution-Structure

Some of you might argue that why don’t we create a separate project for it? You can do it, but it will create another dependency on the project itself. For the website project, all the assets live at one place (even the default HTML file).

Let me know what will you change and how I make it better?

#sitecore #helix