<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Blog posts by Ritu Madan</title><link href="http://world.optimizely.com" /><updated>2026-07-14T19:01:56.0000000Z</updated><id>https://world.optimizely.com/blogs/ritu-madan/</id> <generator uri="http://world.optimizely.com" version="2.0">Optimizely World</generator> <entry><title>Finding Thomas Part 4 - The Intelligence Layer</title><link href="https://world.optimizely.com/blogs/ritu-madan/dates/2026/7/finding-thomas-part-4---the-intelligence-layer/" /><id>&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;I&#39;ve been finding Thomas for a couple weeks now. Bear with me &amp;mdash; we&#39;re almost at the full picture.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;Quick catch-up : Thomas is the returning visitor who reads everything, opens every email, converts on nothing &amp;mdash; and one day quietly stops coming back. No warning. No signal. Just gone.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;In Parts 1 through 3 we built the foundation &amp;mdash; the &lt;a href=&quot;https://www.linkedin.com/pulse/finding-thomas-part-1-observation-post-ritu-madan-8kkwe/&quot;&gt;&lt;strong&gt;CMS&lt;/strong&gt;&lt;/a&gt; watching him, &lt;a href=&quot;https://www.linkedin.com/pulse/finding-thomas-part-2-recognition-engine-ritu-madan-wq2ef/&quot;&gt;&lt;strong&gt;ODP&lt;/strong&gt;&lt;/a&gt; profiling him, &lt;a href=&quot;https://www.linkedin.com/pulse/finding-thomas-part-3-moment-recognition-ritu-madan-5hvwe/&quot;&gt;&lt;strong&gt;Personalization&lt;/strong&gt;&lt;/a&gt; making him feel seen for the first time.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;Part 4 is where it gets interesting.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;Because everything we&#39;ve built so far has a ceiling. Someone still has to hypothesize the Thomas profile, build the segment manually, monitor the scores, and make judgment calls. At the scale of a real content ecosystem, that human dependency is the bottleneck.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;Opal removes the ceiling.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;It doesn&#39;t guess what Thomas looks like. It learns what Thomas looks like &amp;mdash; from the behavior of every visitor who eventually stopped coming back. Then it scales that recognition to thousands of Thomas-profile users without manual intervention.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal&quot;&gt;There&#39;s also a productive paradox at the heart of this one: the answer to AI displacing your site traffic is AI deployed inside your own ecosystem. Part 4 makes that case. Read it &lt;span style=&quot;color: rgb(35, 111, 161);&quot;&gt;&lt;strong&gt;&lt;a style=&quot;color: rgb(35, 111, 161);&quot; href=&quot;https://www.linkedin.com/pulse/finding-thomas-part-4-intelligence-layer-ritu-madan-tgvgc&quot;&gt;here&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;.&lt;/p&gt;</id><updated>2026-07-14T19:01:56.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Finding Thomas Part 3 - The Moment of Recognition</title><link href="https://world.optimizely.com/blogs/ritu-madan/dates/2026/6/finding-thomas-part-3---the-moment-of-recognition/" /><id>&lt;h3 class=&quot;ember-view reader-text-block__heading-3&quot;&gt;Remember Thomas?&lt;/h3&gt;
&lt;p class=&quot;ember-view reader-text-block__paragraph&quot;&gt;&lt;em&gt;In digital landscape, Thomas is the returning visitor who reads everything, opens every email, converts on nothing. In standard reporting, &lt;strong&gt;he is invisible&lt;/strong&gt; &amp;mdash; absorbed into aggregate metrics that look healthy, precisely because he keeps showing up.&lt;/em&gt;&lt;/p&gt;
&lt;p class=&quot;ember-view reader-text-block__paragraph&quot;&gt;In &lt;span style=&quot;color: rgb(35, 111, 161);&quot;&gt;&lt;em&gt;&lt;strong&gt;&lt;a class=&quot;uPrscYCJahCprYhlPAURdHcDRCZBqqmbEI &quot; style=&quot;color: rgb(35, 111, 161);&quot; href=&quot;https://www.linkedin.com/pulse/finding-thomas-part-1-observation-post-ritu-madan-8kkwe&quot;&gt;Part 1&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;, we talked about the &lt;strong&gt;CMS&lt;/strong&gt; - how it watches Thomas&#39;s behavior, page by page, scroll by scroll, without anyone assembling that data into a story.&lt;/p&gt;
&lt;p class=&quot;ember-view reader-text-block__paragraph&quot;&gt;In &lt;span style=&quot;color: rgb(35, 111, 161);&quot;&gt;&lt;em&gt;&lt;strong&gt;&lt;a class=&quot;uPrscYCJahCprYhlPAURdHcDRCZBqqmbEI &quot; style=&quot;color: rgb(35, 111, 161);&quot; href=&quot;https://www.linkedin.com/pulse/finding-thomas-part-2-recognition-engine-ritu-madan-wq2ef/&quot;&gt;Part 2&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;, we talked about &lt;strong&gt;ODP&lt;/strong&gt; - how it takes that behavioral data and turns it into a real, scorable profile, complete with an Engagement Trajectory that tells you Thomas is Drifting before he&#39;s gone.&lt;/p&gt;
&lt;p class=&quot;ember-view reader-text-block__paragraph&quot;&gt;Here&#39;s where we left off - the data has recognized Thomas but the experience hasn&#39;t!&lt;/p&gt;
&lt;h3 class=&quot;ember-view reader-text-block__heading-3&quot;&gt;In Part 3,&amp;nbsp; we recognize Thomas and curate his experience of your site.&lt;/h3&gt;
&lt;p class=&quot;ember-view reader-text-block__paragraph&quot;&gt;This is where &lt;strong&gt;Optimizely Personalization&lt;/strong&gt; comes into play. It translates Thomas&#39;s behavioural data profile from ODP into an experience that finally makes him feel seen without naing him or using surveillance language.&lt;/p&gt;
&lt;p class=&quot;ember-view reader-text-block__paragraph&quot;&gt;Read the full story&amp;nbsp;&lt;em&gt;&lt;strong&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/finding-thomas-part-3-moment-recognition-ritu-madan-5hvwe/&quot;&gt;&lt;span style=&quot;color: rgb(35, 111, 161);&quot;&gt;here&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt; on how we remove the friction points and recalibrate the experience to appreciate Thomas&#39;s loyalty.&lt;/p&gt;</id><updated>2026-06-26T17:08:48.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Finding Thomas Part 2 - The Recognition Engine</title><link href="https://world.optimizely.com/blogs/ritu-madan/dates/2026/6/finding-thomas-part-2---the-recognition-engine/" /><id>&lt;h3 class=&quot;ember-view reader-text-block__heading-3&quot;&gt;Remember Thomas?&lt;/h3&gt;
&lt;p class=&quot;ember-view reader-text-block__paragraph&quot;&gt;&lt;em&gt;In digital landscape, Thomas is the returning visitor who reads everything, opens every email, converts on nothing. In standard reporting, &lt;strong&gt;he is invisible&lt;/strong&gt; &amp;mdash; absorbed into aggregate metrics that look healthy, precisely because he keeps showing up.&lt;/em&gt;&lt;/p&gt;
&lt;p class=&quot;ember-view reader-text-block__paragraph&quot;&gt;In &lt;em&gt;&lt;strong&gt;&lt;a class=&quot;txPgeVsVxoqXupMimruaYRfcYiAbVbmTSCT &quot; href=&quot;https://www.linkedin.com/pulse/finding-thomas-part-1-observation-post-ritu-madan-8kkwe&quot;&gt;&lt;span style=&quot;color: rgb(35, 111, 161);&quot;&gt;Part 1&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;, we talked about the &lt;strong&gt;CMS&lt;/strong&gt; - how Optimizely CMS is not just a publishing platform but an observation post. Every visit Thomas makes generates behavioral data - which content he reads, how deeply he scrolls, which paths he returns through, how his visit frequency is trending over time. The data is there. The problem is that most implementations are not built to read it as a story. The narrative exists. Nobody is assembling it.&lt;/p&gt;
&lt;h3 class=&quot;ember-view reader-text-block__heading-3&quot;&gt;In Part 2, Thomas Becomes Visible&lt;/h3&gt;
&lt;p class=&quot;ember-view reader-text-block__paragraph&quot;&gt;This is where &lt;strong&gt;ODP&lt;/strong&gt; takes the raw behavioral events from the CMS, stitches them together across sessions and channels, and builds a persistent, unified profile that can be segmented, scored, and acted upon. This is not a data warehouse exercise. &lt;strong&gt;It is a recognition exercise.&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;ember-view reader-text-block__paragraph&quot;&gt;Read the full story &lt;em&gt;&lt;strong&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/finding-thomas-part-2-recognition-engine-ritu-madan-wq2ef&quot;&gt;&lt;span style=&quot;color: rgb(35, 111, 161);&quot;&gt;here&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt; on how we put together an engagement trajectory for Thomas in ODP, that then helps your digital estate recognize him.&lt;/p&gt;</id><updated>2026-06-01T16:59:04.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Finding Thomas Part 1 - The Observation Post</title><link href="https://world.optimizely.com/blogs/ritu-madan/dates/2026/5/finding-thomas-part-1---the-observation-post/" /><id>&lt;div style=&quot;mso-element: para-border-div; border: none; border-bottom: solid #1A56DB 1.0pt; mso-border-bottom-alt: solid #1A56DB .5pt; padding: 0in 0in 6.0pt 0in;&quot;&gt;
&lt;h2 style=&quot;border: none; mso-border-bottom-alt: solid #1A56DB .5pt; padding: 0in; mso-padding-alt: 0in 0in 6.0pt 0in;&quot;&gt;Meet Thomas&lt;/h2&gt;
&lt;/div&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 9.0pt;&quot;&gt;Thomas is the returning visitor who has been to your site forty times but has never filled out a form. He opens every newsletter but rarely clicks through. He reads your long-form content to the end while your analytics records him as just another session. He has a deep, genuine interest in the topics you cover &amp;mdash; and an equally deep invisibility in the metrics your team reviews every week.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;span style=&quot;font-size: 11.0pt; font-family: &#39;Arial&#39;,sans-serif; mso-fareast-font-family: Arial; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;&quot;&gt;He does not bounce. He does not unsubscribe with a parting comment. He does not leave a one-star review. He just quietly, incrementally, recalibrates whether your experience is worth his time. And when he decides it is not &amp;mdash; when the accumulated weight of feeling unseen finally tips the balance &amp;mdash; he stops coming. Without a word. Without a signal. &lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;We call this a recognition failure. And it&#39;s the most expensive problem in digital experiences that almost nobody is actively measuring.&lt;/p&gt;
&lt;div style=&quot;mso-element: para-border-div; border: none; border-bottom: solid #1A56DB 1.0pt; mso-border-bottom-alt: solid #1A56DB .5pt; padding: 0in 0in 6.0pt 0in;&quot;&gt;
&lt;h2 style=&quot;border: none; mso-border-bottom-alt: solid #1A56DB .5pt; padding: 0in; mso-padding-alt: 0in 0in 6.0pt 0in;&quot;&gt;About This Series&lt;/h2&gt;
&lt;/div&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 9.0pt;&quot;&gt;Finding Thomas is a five-part series about understanding and solving this problem using the Optimizely platform. Across these posts, we follow Thomas through the full digital experience layer &amp;mdash; what your CMS can reveal about him, what ODP can connect across his behavioral history, how Personalization can respond in ways that make him feel known, and how Opal helps teams move from insight to action at scale.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 9.0pt;&quot;&gt;Each post covers one layer of the stack. Together they trace a complete, closed-loop recognition system &amp;mdash; one that finds Thomas before he finishes leaving, and makes him feel, for the first time, like someone noticed he was there.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;In Part 1 of our Finding Thomas series, we trace where this starts &amp;mdash; and why the CMS most teams treat purely as a publishing tool is actually the first place Thomas&#39;s story can be caught before it ends.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Read the full story &lt;span style=&quot;color: rgb(35, 111, 161);&quot;&gt;&lt;em&gt;&lt;strong&gt;&lt;a style=&quot;color: rgb(35, 111, 161);&quot; href=&quot;https://www.linkedin.com/pulse/finding-thomas-part-1-observation-post-ritu-madan-8kkwe&quot;&gt;here&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&amp;nbsp;&lt;/p&gt;</id><updated>2026-05-28T14:40:53.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Optimizely Configured Commerce and Spire CMS - Figuring out Handlers</title><link href="https://world.optimizely.com/blogs/ritu-madan/dates/2025/3/optimizely-configured-commerce-and-spire-cms---figuring-out-handlers/" /><id>&lt;p&gt;I recently entered the world of Optimizely Configured Commerce and Spire CMS. Intriguing, interesting and challenging at the same time, especially when my past experience had been with traditional Optimizely CMS and Customized Commerce. The idea is the same, but the implementation is quite different. So yes it becomes a bit daunting, to forget old ways and get used to these new ones.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;But I believe in learning on the job, so figuring things out sort of comes as part of the deal. This time, my challenge lies around figuring out how frontend handlers work in Spire CMS, where code lives, where should I intercept and tweak. Read below for the full story on how I went about this learning.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blogs.perficient.com/2025/03/10/optimizely-b2b-commerce-and-spire-cms-figuring-out-handlers/&quot;&gt;https://blogs.perficient.com/2025/03/10/optimizely-b2b-commerce-and-spire-cms-figuring-out-handlers/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hoping to share more such learning as I gain them. :)&lt;/p&gt;</id><updated>2025-03-12T19:33:49.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Decoding DI in Optimizely CMS 12</title><link href="https://world.optimizely.com/blogs/ritu-madan/dates/2024/1/decoding-di-in-optimizely-cms-12/" /><id>&lt;p&gt;DI or Dependency Injection is a complex topic, not just in Optimizely CMS, but in general in .net core implementations. Some aspects we get, like the different ways dependencies can be injected and which is better over others, while some leave us scratching our heads. Often times we end up doing a lot of troubleshooting, digging into internal code and finding the right alternatives to DI, to get things to work.&lt;/p&gt;
&lt;p&gt;The biggest blocker here is understanding the order in which steps get executed, modules get initialized and services get registered. Once this is clear, we know where to add our custom code and avoid any surprise runtime errors around missing service registrations. One such error led me to this discovery so sharing my findings and learnings.&lt;/p&gt;
&lt;p&gt;Read the complete post &lt;a href=&quot;https://blogs.perficient.com/2024/01/23/decoding-di-in-optimizely-cms-12/&quot;&gt;here &lt;/a&gt;for details.&lt;/p&gt;</id><updated>2024-01-23T21:31:43.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Custom form element with dependencies</title><link href="https://world.optimizely.com/blogs/ritu-madan/dates/2024/1/custom-form-element-with-dependencies/" /><id>&lt;p&gt;Episerver Forms are cool as is. They provide solid ground to build basic forms out of the box. But often times, we have custom needs that require us to customize or add to the out of the box functionality.&lt;/p&gt;
&lt;p&gt;In my case, I needed a custom form element that can support some unique requirements and at the same time I needed this to support the built in dependency logic.&lt;/p&gt;
&lt;p&gt;For those of you unfamiliar with the forms dependency logic, see the Optimizely document &lt;a href=&quot;https://support.optimizely.com/hc/en-us/articles/4413192345101-Form-element-types#DependenciesTab&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Read the complete blog &lt;a href=&quot;https://blogs.perficient.com/2024/01/17/optimizely-cms-custom-form-element-with-dependencies/&quot;&gt;here &lt;/a&gt;for all the fun details on how this was achieved with minor code tweaks.&lt;/p&gt;</id><updated>2024-01-17T18:26:42.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Special symbols in TinyMCE</title><link href="https://world.optimizely.com/blogs/ritu-madan/dates/2024/1/special-symbols-in-tinymce/" /><id>&lt;p&gt;TinyMCE has evolved over the years, allowing more and more flexibility with the features it offers and capabilities it allows to customize. And this is pretty handy as every client has their unique needs and requirements for what they want their Rich Text Editors to do.&lt;/p&gt;
&lt;p&gt;My use case - pretty straightforward - among the many customizations already on, we needed to accommodate very special symbols in the RTE. Now I&#39;m not the first person to present this need ofcourse, which is why TinyMCE already had a plugin called Charmap that contains a whole ensemble of special symbols to use from. And talk about flexibility, it also gives you, the developer, the capability to customize this plugin and add more symbols to it, in case yours are not in the preset list.&lt;/p&gt;
&lt;p&gt;And, what do you know.. not all of mine made the preset list cut, ofcourse! :)&lt;/p&gt;
&lt;p&gt;So, I added them in there. Read the complete post &lt;a href=&quot;https://blogs.perficient.com/2024/01/10/working-with-special-symbols-in-tinymce/&quot;&gt;here&lt;/a&gt; to find out exactly how! There are some good to know details in there for sure.&lt;/p&gt;
</id><updated>2024-01-10T23:27:54.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Optimizely CMS 12 Upgrade takeaways</title><link href="https://world.optimizely.com/blogs/ritu-madan/dates/2023/8/optimizely-cms-12-upgrade-takeaways/" /><id>&lt;p&gt;I&#39;ve now gone through multiple CMS 12 upgrade projects. Each project had its own unique customizations and hence its own unique set of challenges when upgrading. I learnt something new, overcame a new hurdle, found/solved a new problem with every project. Some took quite a bit of time and synergy with Opti community, some back and forth on Opti support tickets, and solutions from other MVPs. So I thought it would be nice to put them all together in one place, for others on their upgrade journey, looking for same or similar solutions.&lt;/p&gt;
&lt;p&gt;So here goes :&lt;/p&gt;
&lt;p&gt;This &lt;a href=&quot;https://blogs.perficient.com/2023/02/17/optimizely-cms-12-unique-upgrade-challenges/&quot;&gt;first blog post&lt;/a&gt; talks about things like Marketing connector and Visitor group related issues.&lt;/p&gt;
&lt;p&gt;This &lt;a href=&quot;https://blogs.perficient.com/2023/07/27/optimizely-cms-12-takeaways&quot;&gt;second one&lt;/a&gt; talks about small nitty gritty, more generic things, but if you don&#39;t know about them, they can end up giving you massive headaches.&lt;/p&gt;
&lt;p&gt;Hope you find this one stop post helpful!&lt;/p&gt;
&lt;p&gt;I am looking forward to hear other&#39;s upgrade stories and challenges faced/resolved, so please do share in comments if you encountered something unique.&lt;/p&gt;</id><updated>2023-08-01T20:01:40.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Icon Library in Optimizely CMS</title><link href="https://world.optimizely.com/blogs/ritu-madan/dates/2023/5/icon-library-in-optimizely-cms/" /><id>&lt;p&gt;Icons are graphical representations of different elements on a website. They make the webpages visually appealing and like any other image, have a stronger connection and retention to the end user&amp;rsquo;s memory than plain text. When used in moderation and the right way, they can be self-explanatory and reduce the need for text content in a lot of use cases.&lt;/p&gt;
&lt;p&gt;Icon Library is basically a curated list/dictionary of icons that ties an icon to a meaningful name. This library can then be used to pick icons for the different elements of the website. A good use case would be websites that use icons heavily and need to give CMS Editors control to pick icons with content within CMS, in a way that&#39;s well in line with the site&#39;s theme and design as well as maintains consistency in terms of meaning and usage. It also allows to have dedicated user roles that control the creation and modification of the actual Icon Library, so they can ensure the icons added are per design and theme and that other user roles can&#39;t mess the list up. And by providing a select list of the icon library on content types, instead of a ContentReference property where any media can be added, it can be ensured that no icons outside of this curated list are added to content.&lt;/p&gt;
&lt;p&gt;Please see my detailed post &lt;a href=&quot;https://blogs.perficient.com/2023/05/15/icon-library-in-optimizely-cms/&quot;&gt;here &lt;/a&gt;on how to setup the Icon Library and then use it in CMS.&lt;/p&gt;</id><updated>2023-05-15T21:20:56.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Bitbucket CI/CD pipelines for Optimizely CMS 12</title><link href="https://world.optimizely.com/blogs/ritu-madan/dates/2023/5/bitbucket-cicd-pipelines-for-optimizely-cms-12/" /><id>&lt;p&gt;Recently, we had a client with code repository hosted on Bitbucket and they showed interest in setting up CI/CD pipelines for automating Optimizely CMS deployments from within Bitbucket. When I started researching, I found several blog posts and documentation around building Azure Devops pipelines for Optimizely CMS deployments. But none that would guide us through building Optimizely CI/CD pipelines in Bitbucket. So after spending quite some time understanding Bitbucket pipeline basics, a lot of trial and error and help from other fellow colleagues, I was able to setup a Bitbucket CI/CD build pipeline for my project.&lt;/p&gt;
&lt;p&gt;This exercise was quite the learning as it wasn&#39;t just Bitbucket pipeline specific. I learnt Bash and Powershell scripting. I learnt how Azure Devops and Bitbucket pipelines are so drastically and syntactically different from each other.&lt;/p&gt;
&lt;p&gt;I also learnt that this effort needed sharing, because this topic is relevant and very much in need of more readily available, one stop shop content. Hopefully, after this, others on the same path won&#39;t have to spend as much time figuring smaller pieces and syntax for Bitbucket pipelines like I did.&lt;/p&gt;
&lt;p&gt;Please follow along to the detailed blog &lt;a href=&quot;https://blogs.perficient.com/2023/05/05/bitbucket-ci-cd-pipelines-for-optimizely-cms-12/&quot;&gt;here&lt;/a&gt;, providing step by step breakdown of the Bitbucket pipeline code.&lt;/p&gt;
&lt;p&gt;I will look forward to feedback and recommendation from others here, to make this better.&lt;/p&gt;</id><updated>2023-05-05T20:10:20.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Optimizely CMS 12 – Unique upgrade challenges</title><link href="https://blogs.perficient.com/?p=327190" /><id>By now, a lot of us have already participated in one or more CMS 12 upgrade projects. The others are still evaluating whether they should do it now or wait some more. Regardless of when you do it, there will definitely be some unique upgrade challenges you will come across, as I and many others [&amp;#8230;]</id><updated>2023-02-17T20:56:45.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Optimizely CMS – the importance of GUIDs and Assembly Names</title><link href="https://blogs.perficient.com/?p=316390" /><id>In Optimizely CMS world, we see GUIDs everywhere. They are the unique identifiers for content types and more. As part of developing with Optimizely CMS, developers are advised to always specify GUIDs in there Content Type declarations. If one isn&amp;#8217;t specified, the DB assigns one dynamically when saving the Content type. A big reason for [&amp;#8230;]</id><updated>2022-08-16T16:34:16.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Optimizely CMS 12 – Dependency Injection(DI) – StructureMap vs ASP.Net Core</title><link href="https://blogs.perficient.com/?p=311946" /><id>If you are upgrading to Optimizely CMS 12, one of the breaking changes to consider is the change to the Dependency Injection(DI) framework. Earlier versions of Optimizely CMS had their own DI hosting framework that supported other concrete DI implementations, like StructureMap. With CMS 12 and ASP.Net Core, DI framework is built into the system. [&amp;#8230;]</id><updated>2022-06-30T19:43:59.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Optimizely Page Publish Options – Do’s and Dont’s</title><link href="https://blogs.perficient.com/?p=309602" /><id>Page Publish is the most basic feature of a CMS. This is what makes our content visible to the world. Episerver CMS (now known as Optimizely Content Cloud) too has the feature and some more flexibility built around it to aid our content authors. There&amp;#8217;s the usual page publish, where you hit a button and [&amp;#8230;]</id><updated>2022-05-13T13:58:55.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Optimizely Search : How to search for all expired assets</title><link href="https://blogs.perficient.com/?p=308937" /><id>First of all, I want to mention that EPiServer Find (now known as Optimizely Search and Navigation) is a great tool to search for content on an Optimizely site, whether its CMS or Commerce. It comes with a range of options to customize and with filtering and boosting ability to get the best results. Often [&amp;#8230;]</id><updated>2022-05-03T14:41:05.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Kathryn Bogen Recognized on 2022 CRN Women of the Channel List</title><link href="https://blogs.perficient.com/?p=309872" /><id>CRN’s annual Women of the Channel program honors some of the most influential women leaders within the channel. We’re proud to have five Perficient colleagues recognized in the 2022 CRN Women of the Channel list, and we’re highlighting their individual accomplishments in a special blog series. We previously celebrated Liza Sisler, Liz Stuart, and Lynn [&amp;#8230;]</id><updated>2012-05-19T18:06:00.0000000Z</updated><summary type="html">Blog post</summary></entry></feed>