{"id":141,"date":"2022-04-27T00:06:45","date_gmt":"2022-04-27T00:06:45","guid":{"rendered":"https:\/\/blog.lottabytes.com\/?p=141"},"modified":"2022-04-27T00:06:45","modified_gmt":"2022-04-27T00:06:45","slug":"portfolio-and-lifecycle-management-tooling-overview","status":"publish","type":"post","link":"https:\/\/blog.lottabytes.com\/index.php\/2022\/04\/27\/portfolio-and-lifecycle-management-tooling-overview\/","title":{"rendered":"Portfolio and Lifecycle Management &#8211; Tooling Overview"},"content":{"rendered":"\n<p>We&#8217;ve talked at length about how we got started on Salesforce, now let&#8217;s explore (in a development\/test instance) what it looks like practically as it&#8217;s implemented.  When a user logs in the are greeted with the entirety of our portfolio.  From this they can chose from a variety of areas such as On-Premises vs. Cloud (SaaS) vs. Internal product lines.  This also provides them with a way to get started and a Flow to create a new Product Line.  <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"478\" src=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-31-04-1024x478.png\" alt=\"\" class=\"wp-image-142\" srcset=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-31-04-1024x478.png 1024w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-31-04-300x140.png 300w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-31-04-768x359.png 768w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-31-04-1536x717.png 1536w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-31-04.png 1803w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>By using this flow (which is the only way to create new product records) they won&#8217;t have to know the Product Line Type (class), but only the answer to questions around basic capabilities and attributes such as the below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"595\" height=\"491\" src=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-50-47.png\" alt=\"\" class=\"wp-image-146\" srcset=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-50-47.png 595w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-50-47-300x248.png 300w\" sizes=\"auto, (max-width: 595px) 100vw, 595px\" \/><\/figure>\n\n\n\n<p>This approach allows us to have a robust number of Product Line Types, but removes the burden from the users to understand the nuance between how they are classified.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"587\" height=\"316\" src=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-53-01.png\" alt=\"\" class=\"wp-image-147\" srcset=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-53-01.png 587w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-53-01-300x161.png 300w\" sizes=\"auto, (max-width: 587px) 100vw, 587px\" \/><\/figure>\n\n\n\n<p>Product Line records are simply a collection of data and metadata that covers the normally expected gambit of details, statuses, ownership, critical resources and ecosystem details.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"453\" src=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-36-01-1024x453.png\" alt=\"\" class=\"wp-image-143\" srcset=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-36-01-1024x453.png 1024w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-36-01-300x133.png 300w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-36-01-768x340.png 768w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-36-01-1536x680.png 1536w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-36-01.png 1812w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The associated metadata that we have the capabilities to collect contains items like:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Commerce Ecosystem<\/li><li>Releases<\/li><li>Compliance Attestations<\/li><li>Source Code Repositories<\/li><li>Hosting Environments<\/li><li>Business Standards Compliance<\/li><li>etc..<\/li><\/ul>\n\n\n\n<p>Releases are obviously a key part of lifecycle management and this object contains ~150 fields.  Additionally, we have a Flow-driven user interface that is responsible for binary activities, package compilation and upload to CDNs.  This is made possible by an on-premises service that interacts with Salesforce via the API and message bus to perform all on-premises activities inside of the corporate firewall.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"472\" src=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-41-16-1024x472.png\" alt=\"\" class=\"wp-image-144\" srcset=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-41-16-1024x472.png 1024w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-41-16-300x138.png 300w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-41-16-768x354.png 768w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-41-16-1536x708.png 1536w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-41-16.png 1806w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>We also use a variety of Triggers, Workflow Rules, and Validation Rules to ensure that various business processes are followed.  A simplistic example below is the use of a Validation Rule to ensure that the SDLC Phase cannot be set to Execution until there is a GA Date Specified.  <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"439\" height=\"381\" src=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-40-50.png\" alt=\"\" class=\"wp-image-145\" srcset=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-40-50.png 439w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-16-40-50-300x260.png 300w\" sizes=\"auto, (max-width: 439px) 100vw, 439px\" \/><\/figure>\n\n\n\n<p>Once this GA Date is set, a Workflow Rule is launched to record this date so that we can track the delta between the original date, and the final shipped date.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"861\" height=\"257\" src=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-17-03-10.png\" alt=\"\" class=\"wp-image-148\" srcset=\"https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-17-03-10.png 861w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-17-03-10-300x90.png 300w, https:\/\/blog.lottabytes.com\/wp-content\/uploads\/2022\/04\/Screenshot-from-2022-04-26-17-03-10-768x229.png 768w\" sizes=\"auto, (max-width: 861px) 100vw, 861px\" \/><\/figure>\n\n\n\n<p>That&#8217;s the 100,000 foot view of what we&#8217;re doing around portfolio management using Salesforce to replace our previously home-grown solution.  Next I&#8217;ll explore the development process and how we&#8217;re utilizing low-code functionality of SalesforceDX.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We&#8217;ve talked at length about how we got started on Salesforce, now let&#8217;s explore (in a development\/test instance) what it looks like practically as it&#8217;s implemented. When a user logs in the are greeted with the entirety of our portfolio. From this they can chose from a variety of areas such as On-Premises vs. Cloud &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.lottabytes.com\/index.php\/2022\/04\/27\/portfolio-and-lifecycle-management-tooling-overview\/\" class=\"more-link\">Read more<span class=\"screen-reader-text\"> &#8220;Portfolio and Lifecycle Management &#8211; Tooling Overview&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-141","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.lottabytes.com\/index.php\/wp-json\/wp\/v2\/posts\/141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.lottabytes.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.lottabytes.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.lottabytes.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.lottabytes.com\/index.php\/wp-json\/wp\/v2\/comments?post=141"}],"version-history":[{"count":1,"href":"https:\/\/blog.lottabytes.com\/index.php\/wp-json\/wp\/v2\/posts\/141\/revisions"}],"predecessor-version":[{"id":149,"href":"https:\/\/blog.lottabytes.com\/index.php\/wp-json\/wp\/v2\/posts\/141\/revisions\/149"}],"wp:attachment":[{"href":"https:\/\/blog.lottabytes.com\/index.php\/wp-json\/wp\/v2\/media?parent=141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.lottabytes.com\/index.php\/wp-json\/wp\/v2\/categories?post=141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.lottabytes.com\/index.php\/wp-json\/wp\/v2\/tags?post=141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}