<?xml version="1.0" encoding="UTF-8" ?><!-- generator=Zoho Sites --><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><atom:link href="https://www.bolbeck.com/blogs/tag/digital-transformation/feed" rel="self" type="application/rss+xml"/><title>Bolbeck LLC - Blog #Digital Transformation</title><description>Bolbeck LLC - Blog #Digital Transformation</description><link>https://www.bolbeck.com/blogs/tag/digital-transformation</link><lastBuildDate>Thu, 11 Dec 2025 01:57:08 -0800</lastBuildDate><generator>http://zoho.com/sites/</generator><item><title><![CDATA[Centralized credentials management with Vault]]></title><link>https://www.bolbeck.com/blogs/post/pwdmanagementwithvault</link><description><![CDATA[<img align="left" hspace="5" src="https://www.bolbeck.com/images/stoppasswordinsanity_small.png"/>Deck from my presentation at Hashitalks 2021. Talk discusses on to use Vault to centralize and simplify credentials management of a microservices application running in Kubernetes]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_3T5fdfwnQ2i5MReML_u-fA" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_3aNmlq4DRAi3S2Y44rzWcg" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_rZCPmXPBSFeSJ7L8v2vwGQ" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_RXAhSzQmS7WXDheIaLFBbA" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-align-center " data-editor="true">Stop the (password) insanity!</h2></div>
<div data-element-id="elm_qYT5uSsARnCtH3qqoSNHsQ" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><p style="text-align:left;">Slides from my session at Hashitalks 2021</p><p style="text-align:left;">As we build distributed applications and microservices, it is important to have a plan that allows easy, consistent management of applications' credentials. The talk discusses how to use Vault to simplify credentials management of a&nbsp;<span style="color:inherit;text-align:center;">sample&nbsp;</span>microservices application running in Kubernetes. It shows how to achieve our objective without having to modify any of the existing application code.</p><p style="text-align:center;">Click on the image below to open the presentation&nbsp;</p></div>
</div><div data-element-id="elm_eNqF_Pn8o9Xl9yqi4UGX_A" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_eNqF_Pn8o9Xl9yqi4UGX_A"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="size-original" data-size-mobile="size-original" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-large zpimage-tablet-fallback-large zpimage-mobile-fallback-large "><figure role="none" class="zpimage-data-ref"><a class="zpimage-anchor" href="/files/Stop%20the%20-password-%20insanity.pdf" target="" rel=""><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/stoppasswordinsanity_small.png" size="large" alt="Link to slides for Stop the password insanity!" style="width:1024px;"/></picture></a></figure></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 15 Feb 2021 09:54:59 -0600</pubDate></item><item><title><![CDATA[Introduction to Kubernetes]]></title><link>https://www.bolbeck.com/blogs/post/IntroToK8s</link><description><![CDATA[<img align="left" hspace="5" src="https://www.bolbeck.com/images/IntroToK8s.png"/>Slide deck from my presentation at the 2020 Central Wisconsin IT conference. The session discussed how Kubernetes can be used to orchestrate applications]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_loLLGDiSTKWfNAr5r2TnPQ" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_z4F7sxqbQFSCRwcVyERiHA" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_slYA5HElSeKw0s9K4_8FZg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_-zxLxXYuRCGIKSb6SxO95w" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-align-center " data-editor="true">2020 Central Wisconsin IT conference session</h2></div>
<div data-element-id="elm_pOIKxnR_QpGW-WirshRwpw" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><p><span style="color:inherit;"><span style="font-size:16px;">Kubernetes is one of the hottest technologies currently in the market. It has the ability to orchestrate application by automatically handling common, yet critical, tasks like application deployment, scaling and service discovery.</span></span><br></p><p><span style="font-size:16px;">Click the image below to open the presentation</span></p></div>
</div><div data-element-id="elm_-4YXIRZGUwQsIwalAqWjLg" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_-4YXIRZGUwQsIwalAqWjLg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original "><figure role="none" class="zpimage-data-ref"><a class="zpimage-anchor" href="/files/Introduction%20to%20K8s.pdf" target="" rel=""><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/IntroToK8s.png" size="original" alt="Introduction to Kubernetes. Click to open the PDF of the presentation"/></picture></a></figure></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 05 Oct 2020 17:12:21 -0500</pubDate></item><item><title><![CDATA[Fast track cloud development with JenkinsX]]></title><link>https://www.bolbeck.com/blogs/post/FastTrackDevelWJX</link><description><![CDATA[<img align="left" hspace="5" src="https://www.bolbeck.com/images/FastTrackWJenkins_FrontPage.png"/>Deck from my second talk at DevOps World 2020. The session explained how JenkinsX can help accelerate project startup and development by simplifying many of the tasks required to build cloud applications]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_-nNpHdjbSkiz6e6fr-5dSQ" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_JLgkSmTgQhmf8Vcg0KVcrw" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_s8O4KCB9To6kJPbNkTkMNg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_tirDK5R5Tymf-ODstrxdzw" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-align-center " data-editor="true">DevOps World 2020 session</h2></div>
<div data-element-id="elm_EuEz3_b3Sz-PLppcxRlpoA" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><p style="text-align:left;">Slides from my second session at DevOps World 2020:</p><p style="text-align:left;"><span style="font-size:14px;color:inherit;">The cloud has allowed us to create fast, highly available distributed applications. However that has come at the price of application complexity. Developers must now not only create the application, but must also learn to use containers, pipelines and orchestrators. The session explores how JenkinsX can help accelerate project startup and development by simplifying many of the tasks that allow us to build cloud applications</span></p><p><span style="font-size:14px;color:inherit;">Click on the image below to open the presentation</span></p></div>
</div><div data-element-id="elm_ZLNbL3BTqj5mjLFwzujUDA" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_ZLNbL3BTqj5mjLFwzujUDA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original "><figure role="none" class="zpimage-data-ref"><a class="zpimage-anchor" href="/files/FastTrackWithJenkinsX.pdf" target="" rel=""><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/FastTrackWJenkins_FrontPage.png" size="original" alt="Fast Track cloud development with JenkinsX. Click to open PDF"/></picture></a></figure></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 05 Oct 2020 16:35:19 -0500</pubDate></item><item><title><![CDATA[Simplifying your life with Docker, Jenkins and Minikube]]></title><link>https://www.bolbeck.com/blogs/post/Simplifying_your_life_DJM</link><description><![CDATA[<img align="left" hspace="5" src="https://www.bolbeck.com/images/Simplify_FrontPage Small.png"/>Slides from my first session at the DevOps World 2020 conference. Session focused on automating mundane tasks to improve teams' work-life balance]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_L5x-HU38QzOUSDxINOfGeg" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_NqZpoJ7PS62qqKL7HFhdig" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_JPyBs2yRT5S4gDTmdVrU1w" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_jU0ZXLVLS3eRWuWRgwu3xg" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-align-center " data-editor="true">DevOps World 2020 session</h2></div>
<div data-element-id="elm_h7iq170MQqawKu-86Wxmsw" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><p>Slides from my DevOps World 2020 session on improving your work-life balance by automating mundane development and deployments tasks using Docker, Jenkins and Minikube. Click on the image below to open the presentation.</p></div>
</div><div data-element-id="elm_hcUVYYkYYJERPQcNaQlpEA" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_hcUVYYkYYJERPQcNaQlpEA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original "><figure role="none" class="zpimage-data-ref"><a class="zpimage-anchor" href="/files/Simplifying%20your%20life%20with%20Docker-%20Jenkins%20and%20Minikube.pdf" target="" rel=""><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/Simplify_FrontPage%20Small.png" size="original" alt="Front page of deck. Click to open presentation"/></picture></a></figure></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 05 Oct 2020 10:40:56 -0500</pubDate></item><item><title><![CDATA[Personal lessons from the pandemic that every IT organization should apply]]></title><link>https://www.bolbeck.com/blogs/post/pandemiclessons</link><description><![CDATA[<img align="left" hspace="5" src="https://www.bolbeck.com/images/LearningLaptop.jpg"/>The year 2020 will be forever known as the year the first ( hopefully only) world wide pandemic of the 21st century hit. This crisis has caused significant lifestyle changes. Let us explore some changes I have observed & explain how they can be applied at any IT organization.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_MHLYu6D-RR2neX1Qiz_NEw" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_w2KnibY9QqKb-PPgH3ZqQQ" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_8CW-qFLDQ8Oinu5fDezALA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_zlR24lykWGXcn2SvTq8_5g" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_zlR24lykWGXcn2SvTq8_5g"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/Kid-1.jpg" size="small" alt="Kid next to chalk board" data-lightbox="true" style="width:120px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p style="font-size:16px;">The year 2020 will be forever known as the year the first (and hopefully only) world wide pandemic of the 21st century hit. This crisis has forced the population to change the way even the most mundane of tasks, like going for a walk or eating at restaurant, are perceived and executed. From whole countries shutting down to incidents arising from people falling to wear masks, change can be seen everywhere.</p><p style="font-size:16px;"><br></p><p style="text-align:center;"></p><p><span style="color:inherit;"></span></p><p style="font-size:16px;">In the next few pages, we will discuss some changes I have observed over the last few months and explain how those learnings can be applied to enhance the operations of any IT organization.</p></div>
</div></div><div data-element-id="elm_HGVb_h_uhwjnbqYItfJKSg" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_HGVb_h_uhwjnbqYItfJKSg"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;"><span style="font-size:24px;">Your organization most crucial resource is not the one you think</span></span></h2></div>
<div data-element-id="elm_uP6NFUl5xkNpX5zD0taHcA" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_uP6NFUl5xkNpX5zD0taHcA"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/ToiletPaper-1.jpg" size="small" alt="Toilet Paper" data-lightbox="true" style="width:120px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p style="font-size:16px;">At the beginning of the pandemic, when it was clear that the population would have to stay at home to slow the spread of COVID-19, popular wisdom indicated that food and water could quickly become scarce. However, no one could have foreseen that toilet paper would become the hardest item to find in stores.</p><p style="font-size:16px;"><br></p><p></p><p><span style="color:inherit;"></span></p><p style="font-size:16px;">In the same way, IT failures usually come from unexpected sources. IT organizations have contingency plans to ensure smooth operations, but no amount of planning can prevent the unexpected. For example, I remember one time when a company's network went down because someone had added additional equipment to the enclosure that held the network switches (including the redundancies). The added heat caused the switches to start failing in mass.</p></div>
</div></div><div data-element-id="elm_9Gn9Fcz-rMPewerLwEeGtg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_9Gn9Fcz-rMPewerLwEeGtg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;font-size:16px;">&nbsp;But how do you prepare for the unexpected? 'Chaos Engineering' has risen in popularity in the last few years as a way to address that exact question. The main premise of this type of engineering entails using software to randomly simulate application, equipment and network failures. This allows teams to build muscle memory on how to handle unexpected failures. Companies like Netflix routinely run chaos engineering in production to train teams to quickly resolve outages. The folks at Gremlin wrote a&nbsp;<a href="https://www.gremlin.com/community/tutorials/chaos-engineering-the-history-principles-and-practice/">good introductory article</a>&nbsp;on this subject.&nbsp;</span><br></p></div>
</div><div data-element-id="elm_eRvSRBianZo3Ac-C9Eh4Og" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_eRvSRBianZo3Ac-C9Eh4Og"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/ChaosEngr.png" size="medium" alt="Chaos Engineering software like Gremlin &amp; ChaosToolkit" data-lightbox="true" style="width:548px;"/></picture></span><figcaption class="zpimage-caption zpimage-caption-align-center"><span class="zpimage-caption-content">Chaos Engineering Frameworks</span></figcaption></figure></div>
</div><div data-element-id="elm_-Y73bz6BrHj4zbIxIyhg8g" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_-Y73bz6BrHj4zbIxIyhg8g"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;"><span style="font-size:24px;">Your Organization toolset may need an overhaul to be more productive</span></span></h2></div>
<div data-element-id="elm_6N8cxGly6BTY19VKFddULw" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_6N8cxGly6BTY19VKFddULw"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/yogurt.jpg" size="small" alt="A glass of yogurt" data-lightbox="true" style="width:140px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p style="font-size:16px;"><span>As the pandemic hit, our family saw many of our favorite brands disappear from stores. This forced us to experiment with new, unfamiliar products. For example, I was forced to try new yogurt alternatives when our favorite brand vanished. While I found my share of duds, in the end, I found a couple yogurt brands that could not only work as suitable substitutes but that were superior to my original brand.</span></p><p style="font-size:16px;"><span><br></span></p><p><span style="color:inherit;"></span></p><p style="font-size:16px;"><span>As IT organizations grow, it is easy and comfortable to stick with a few well known tools. Unfortunately, this means that IT departments can potentially miss out on the significant advances in software applications. Recently, I witnessed a company passing on an AI based solution that could simplify a large number of their operations. The reason to pass on the software? The application did not export results to Lotus Notes. Trying to add features to a software over 25 years after most companies abandoned it, seems like a classic example of an IT department operating by inertia . Most times companies do not realize the hidden costs of legacy applications because many of these costs, while very real, are not always easy to quantify.</span></p></div>
</div></div><div data-element-id="elm_iEBjb0zDlgkNnKwg3Kx81g" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_iEBjb0zDlgkNnKwg3Kx81g"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/legacySoftwareCosts.png" size="medium" alt="Hidden costs like support, training and information availability" data-lightbox="true" style="width:342px;"/></picture></span></figure></div>
</div><div data-element-id="elm_TPTVOMnm3XzvYKyqLAWC5A" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_TPTVOMnm3XzvYKyqLAWC5A"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;"><span style="font-size:24px;">New software adoption can be hard but not as hard as you may think</span></span></h2></div>
<div data-element-id="elm_d9bXGdXrkncXNSD2bn5jFw" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_d9bXGdXrkncXNSD2bn5jFw"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/guyOnPhone-1.jpg" size="small" alt="Man playing on a phone" data-lightbox="true" style="width:100px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p style="font-size:16px;"><span>A few months ago, my 9 year old nephew, who lives abroad, realized that with the pandemic he could not spend half as much time with his friends as he normally would. So, he called me and convinced me to download his favorite game. He taught me how to play the game and now (5 game downloads later) we have weekly game sessions on our tablets. It took us five minutes to establish simultaneous visual, voice and game communication over thousands of miles. This was achieved by a well motivated 9 year old kid with access to the right technology.</span></p><p style="font-size:16px;"><span><br></span></p><p><span style="color:inherit;"></span></p><p style="font-size:16px;"><span>Throughout my career I have seen a number of exciting and ground breaking initiatives die on the notepad because people think they are too hard to implement or that people would never used them. However, the pandemic has shown us that things are not always as they seem. Technology is moving at such a high pace that what used to be far fetched just a couple of year ago is now a reality. Companies that fail to constantly adapt and implement new technologies are finding themselves chasing the competition.. </span></p></div>
</div></div><div data-element-id="elm_Io2YfzpyvPJsAHl8SjI3Og" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_Io2YfzpyvPJsAHl8SjI3Og"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p style="font-size:16px;"><span>We all witnessed the meteoric adoption of Zoom and other technologies that enable remote work. However, It was not long ago that most IT managers indicated that setting up the infrastructure to support employees working remotely was a fool's errand. It was too complicated and it would take months, if not years to implement. And then, the pandemic hit. Those same organizations implemented remote work in a matter of weeks</span></p><p style="font-size:16px;"><span><br></span></p><p><span style="color:inherit;"></span></p><p style="font-size:16px;"><span>Applying new ideas and technologies comes down to breaking down misconceptions, having strong motivators, not being afraid to test new technologies and having clear goals.</span></p></div>
</div><div data-element-id="elm_eNuVkhxF3wfyevovyOhbmw" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_eNuVkhxF3wfyevovyOhbmw"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/Virtual%20Meetings.png" size="medium" alt="Collaboration software: Zoom, Google Hangouts, Webex" data-lightbox="true" style="width:1050px;"/></picture></span><figcaption class="zpimage-caption zpimage-caption-align-center"><span class="zpimage-caption-content">Collaboration Software</span></figcaption></figure></div>
</div><div data-element-id="elm_tWEGJRLHbb0BkiX1ZdrAeg" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_tWEGJRLHbb0BkiX1ZdrAeg"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;"><span style="font-size:24px;">A long commute is not a requirement for a productive team</span></span></h2></div>
<div data-element-id="elm_Ug5LpvUHnrG1g6qWXB4ymA" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_Ug5LpvUHnrG1g6qWXB4ymA"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-large zpimage-tablet-fallback-large zpimage-mobile-fallback-large hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/traffic-2.jpg" size="large" data-lightbox="true" style="width:100px;padding:0px;margin:0px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p><span style="font-size:16px;">Whether it was a long drive to the office or multiple flights a week to get to a client, it was a common urban myth that team members needed to suffer through the daily commute to be productive at work. </span></p><p><span style="font-size:16px;"><br></span></p><p><span style="color:inherit;font-size:16px;"></span></p><p><span style="font-size:16px;">However, throughout the pandemic we have seen that remote employees tend to be at least as, if not more, productive than those confined to cubicles. Research has shown that remote work brings significant benefits to both the employers and employees. Some of those benefits are depicted in <a href="https://globalworkplaceanalytics.com/resources/costs-benefits">an article</a> by Global Workplace Analytics. The illustration below depicts some of the key findings from that article:</span></p><p><br></p></div>
</div></div><div data-element-id="elm_btDgldEcI32MjuOP9DoORA" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_btDgldEcI32MjuOP9DoORA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/RemoteBenefits.png" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_JUuVPzP3qMj4LFY3suXjfQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_JUuVPzP3qMj4LFY3suXjfQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">The transition to remote work has not always been smooth given how fast the pandemic forced us to implemented it. However, remote teams have produced great results as long as:</span></p><ul><li><p><span style="font-size:16px;">Managers hold people accountable for work output instead of the numbers of hours clocked.</span></p></li><li><p><span style="font-size:16px;">Teams make an effort to build a healthy and supportive online community that ensures both work and personal relations continue to flourish. </span></p></li><li><p><span style="font-size:16px;">Members set clear rules for both personal interactions and work deliverables </span></p></li></ul><p><span style="color:inherit;"></span></p><p style="font-size:16px;"><br></p><p><span style="font-size:16px;">This change has been so successful for a large number of IT workers, that the average rent in the Bay Area have already started to drop. Employees have started to move away from the tech hubs since they no longer have to pay a large percentage of their salaries for rent when they can buy a much larger home somewhere else for a fraction of the cost .</span></p></div>
</div><div data-element-id="elm_1mnrpQw_cuBLzeLhFLRWew" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_1mnrpQw_cuBLzeLhFLRWew"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;"><span style="font-size:24px;">Your costs are not set in stone</span></span></h2></div>
<div data-element-id="elm_r2QivRZBGZsN59M3SqaJOw" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_r2QivRZBGZsN59M3SqaJOw"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/calculator.jpg" size="small" data-lightbox="true" style="width:110px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p><span style="font-size:16px;"><span style="color:inherit;">Before the pandemic hit, I used to think we had a fairly good handle on monthly household expenses However, COVID-19 arrived and changed the world along with our expenses. For example, restaurant and take out expenses were reduced drastically while supermarket costs increased. This shift to home cooking lead to unexpected savings..</span><br></span></p><p><span style="color:inherit;font-size:16px;"><br></span></p><p><span style="color:inherit;font-size:16px;">An interesting fact coming out of the pandemic is that people are saving more than ever. The <a href="https://www.usatoday.com/story/money/2020/08/10/saving-and-spending-americans-spend-their-record-savings-crisis/3319970001/">Commerce department</a> estimates that pre-pandemic, the average American savings rate was in average 7.5%. By April of 2020, the rate had sky rocketed to 33.5% and by June it seemed to have settled around 19%. And while it is not known where that rate will settle once things come back to normal, it is clear that with the correct adjustments the average person can save more that he/she traditionally does in a typical month.&nbsp;</span><span style="color:inherit;"><span style="font-size:16px;"><br></span></span></p><p><span style="color:inherit;font-size:16px;"><br></span></p></div>
</div></div><div data-element-id="elm_0QF06gOWPW9hpZuqEkugww" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_0QF06gOWPW9hpZuqEkugww"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-box zpimage-space-none " src="/images/SavingsRate.png" size="small" alt="Percentage savings rate: pre-COVID 7.5%  june: 19%" data-lightbox="true" style="width:668px;"/></picture></span></figure></div>
</div><div data-element-id="elm_mkixSGK3F5x29VQACcTATQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_mkixSGK3F5x29VQACcTATQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p style="font-size:16px;"><span><br></span></p><p style="font-size:16px;"><span>Similarly, as organizations grow and the company's needs for technology increase, it is tempting to think that a large portion of the costs are fixed and absolutely unavoidable. </span></p><p><span style="color:inherit;"></span></p><p style="font-size:16px;"><span>But just like personal spending, organizational spending is not set in stone. As companies grow, expenses grow as well and the expenses are rarely inspected with a calm and unemotional lens (Telling users that their favorite tool will be sunset is always an interesting conversation). But this type of review is absolutely necessary and must take place on a regular basis. Otherwise, companies are eventually forced to take hurried, dramatic cost cutting measures on the next market down turn. </span></p></div>
</div><div data-element-id="elm_mZeNJX1JKNFYrxL-cu_gAg" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_mZeNJX1JKNFYrxL-cu_gAg"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;"><span style="font-size:24px;">Digital transformation must be accelerated</span></span></h2></div>
<div data-element-id="elm_JpOM1ALT31d2sEEj16b3Lw" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_JpOM1ALT31d2sEEj16b3Lw"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/Notebook-1.jpg" size="small" data-lightbox="true" style="width:180px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p><span style="font-size:16px;">On a regular month before the pandemic, our family's credit card bill contained a healthy mix of online and physical vendors. But in the last couple of months the list has been reduced almost exclusively to online retailers and our local supermarket. And we are not alone...</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="color:inherit;font-size:16px;"></span></p><p><span style="font-size:16px;">The move to online sales has been increasing for years, but the pandemic has accelerated it. According to the U.S. Census Bureau estimated quarterly E-commerce retail sales, online retails sales growth rate for Q2 2020 is three times higher than that of previous quarters. Take Amazon for example, the <a href="https://s2.q4cdn.com/299287126/files/doc_financials/2020/q2/Q2-2020-Amazon-Earnings-Release.pdf">online giant reported</a> net sales were up by 40% in Q2 compared to same period last year.&nbsp;</span></p></div>
</div></div><div data-element-id="elm_1hi0bzYB6BE-JzI1m0ly7Q" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_1hi0bzYB6BE-JzI1m0ly7Q"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-large zpimage-tablet-fallback-large zpimage-mobile-fallback-large "><figure role="none" class="zpimage-data-ref"><a class="zpimage-anchor" href="https://www.marketplacepulse.com/stats/us-ecommerce/us-e-commerce-sales-22" target="_blank" title="Marketplace Pulse" rel="nofollow"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/us-e-commerce-sales.png" size="large" alt="Online sales jumped post COVID arrival" style="width:1600px;"/></picture></a><figcaption class="zpimage-caption zpimage-caption-align-center"><span class="zpimage-caption-content">Chart Source: Marketplace Pulse</span></figcaption></figure></div>
</div><div data-element-id="elm_XLhFvWvwRZqVSbOczv18IQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_XLhFvWvwRZqVSbOczv18IQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;font-size:16px;">On the other hand, sales at physical stores has been declining faster this quarter than previously expected. For example, the number of store closures so far in 2020 has been reported by <a href="https://www.forbes.com/sites/walterloeb/2020/07/06/9274-stores-are-closing-in-2020--its-the-pandemic-and-high-debt--more-will-close/#329b68b1729f">Forbes</a> to be over 13,000 compared to 5,700 in 2018.&nbsp;</span><br></p><p><span style="color:inherit;font-size:16px;"><br></span></p></div>
</div><div data-element-id="elm_b9820yol20gcR43rCzRV-w" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_b9820yol20gcR43rCzRV-w"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-box zpimage-space-none " src="/images/Screen%20Shot%202020-08-23%20at%202.33.27%20PM.png" size="small" alt="Significant jump in store closures post COVID's arrival" data-lightbox="true" style="width:668px;"/></picture></span></figure></div>
</div><div data-element-id="elm_jzQ2Q-RNuRJSsPv1PH_iHw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_jzQ2Q-RNuRJSsPv1PH_iHw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;"><span style="font-size:16px;"><br></span></span></p><p><span style="color:inherit;"><span style="font-size:16px;">The bottom line is that companies without a solid digital transformation plan need to create one right away. And, companies that have based their 5 or 10 year plan on historical consumer trends need to set more aggressive timelines. The era of measuring digital transformation projects in years has come to an abrupt end. The competitive edge belongs to nimble companies capable of adapting quickly. While consumer behavior might shift once the pandemic is over, it will never mirror the original pre-pandemic habits.</span></span><br></p></div>
</div><div data-element-id="elm_kP4AelPBVRjU8aLoIGerRQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_kP4AelPBVRjU8aLoIGerRQ"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="color:inherit;"><span style="font-size:24px;">Conclusion</span></span></h2></div>
<div data-element-id="elm_fTJVTYPCvRRdqjO_7Fo_vA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_fTJVTYPCvRRdqjO_7Fo_vA"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p style="font-size:16px;"><span>The pandemic has changed the way we interact with the world. As a result, there have been significant shifts on the IT landscape. We explored the shifts in terms systems' reliability, employee retention, operation costs and digital transformation. But, that is just the tip of the iceberg. Companies must re-imagine their digital visions and strategies to cope with the new reality. There is an old English saying that seems specially relevant at this point:</span></p><p style="font-size:16px;"><span><br></span></p><blockquote style="font-size:16px;"><p style="text-align:center;"><span style="font-style:italic;">An hour may destroy what an age was building </span></p><p><span><br></span></p></blockquote><p style="font-size:16px;"><span>As we adapt to long term lockdowns, masks and other health restrictions, companies must find innovative solutions to push the status quo in order to survive. After all, nothing is permanent in tech beyond change itself.</span></p><p style="font-size:16px;"><span><br></span></p><p><span style="color:inherit;"></span></p><p style="font-size:16px;"><span>On a final personal note, I would like to thank all medical personnel that have been fighting the pandemic. They have been at the front lines of the COVID-19 battle, sometimes at great personal cost, to keep the rest of us safe. If you know someone that works at a hospital, doctor's office, lab, etc... take a couple of minutes from your busy life and thank them for their hard work.</span></p></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Sun, 06 Sep 2020 11:01:31 -0500</pubDate></item><item><title><![CDATA[Microservices Architecture transition readiness]]></title><link>https://www.bolbeck.com/blogs/post/microservicesreadiness</link><description><![CDATA[Microservices have the potential to transform and simplify the building and maintenance of software applications. However,, to achieve the potential benefits, teams must be ready to adopt new paradigms and new concepts. Is your team ready for this new architecture?]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_wfkckbUiQK64ajC1_Px-pg" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_PsvBb7SrTtOcr-EgMktH_w" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_24fA51HwSTiFXsnTc-qscQ" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_ZxLvbPu7SMmV4b8FZOj-gw" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_ZxLvbPu7SMmV4b8FZOj-gw"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-align-center " data-editor="true"><span style="color:inherit;">&nbsp;Is your team ready for Microservices?</span></h2></div>
<div data-element-id="elm_gDPGrXikC7EJ7UhNClgUcg" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_gDPGrXikC7EJ7UhNClgUcg"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/teamMeeting.jpg" size="small" alt="Team meeting taking place" data-lightbox="true" style="width:1197px;padding:0px;margin:0px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p><span style="color:inherit;">Over the last few years, microservices have gained popularity as a way to improve team productivity while increasing application maintainability. The rallying cry behind this architecture has been led by internet giants that successfully migrated from a traditional monolithic application to thousands of microservices. But would this architecture benefit your team and make your products more flexible and nimble?</span><br></p></div>
</div></div><div data-element-id="elm_Zlmfn-avSuqttQSgXFUe3w" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_Zlmfn-avSuqttQSgXFUe3w"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;font-size:20px;font-weight:700;">What are microservices?&nbsp;</span><br></p><p><span style="color:inherit;font-size:14px;">While there are several definitions of what exactly is a microservice architecture, the basic high level infrastructure is built around small pieces of code with just one responsibility and that perform a single task. Those individual pieces of code are combined to achieve more complex tasks.&nbsp;</span><span style="font-size:14px;color:inherit;">You can think of it as building blocks. While the individual building blocks cannot do much on their own, they can be used to build grand structures</span></p><p><span style="font-size:16px;color:inherit;"><br></span></p><p><span style="color:inherit;font-size:20px;font-weight:700;">How do microservices compare to traditional applications?</span><span style="font-size:16px;color:inherit;"><br></span></p><p><span style="color:inherit;">Traditional applications are built as a single code base. All the pieces are intertwined into a single package which, at a simplified high level, interacts with an end user on one side and the database on the other. Microservices applications are built using a multitude of small codebases that work together to deliver results to the end user. Each microservice could be connected to its own database to manage its own data, though they do not&nbsp;</span><span style="color:inherit;">need to be. For example, a simple number adding microservice would receive numbers as inputs and return a result without needing a database.</span></p></div>
</div><div data-element-id="elm_bbW3YRtFo4CdGCXkqnJJig" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_bbW3YRtFo4CdGCXkqnJJig"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/TraditionalVSMicroservices.png" size="medium" alt="Traditional vs Microservices Architectures" data-lightbox="true" style="width:706px;"/></picture></span><figcaption class="zpimage-caption zpimage-caption-align-center"><span class="zpimage-caption-content">Figure 1 - Comparing architectures</span></figcaption></figure></div>
</div><div data-element-id="elm_VIGCr1p9YzPPrkEfe6hlbQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_VIGCr1p9YzPPrkEfe6hlbQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span>The clear advantages and reasons why microservices are becoming so popular are:</span></p><p><span style="color:inherit;"></span></p><ul><li><p><span><strong><span>Maintainability</span></strong><span>: Maintaining small pieces of code with few, if any, dependencies is simpler than maintaining a large code base with lots of dependencies</span></span></p></li><li><p><span><strong><span>Reusability</span></strong><span>: Microservices are small pieces of code with a single purpose in life and can easily be reused in other projects</span></span></p></li><li><p><span><strong><span>Modularity</span></strong><span>: Since each service is independent of the rest of the application, it can de be upgraded and deployed independently </span></span></p></li><li><p><span><strong><span>Fault isolation</span></strong><span>: Properly designed microservices isolate issues from the rest of the application</span></span></p></li><li><p><span><strong><span>Scalability</span></strong><span>: Microservices are scaled independently without scaling the whole application</span></span></p></li><li><p><span><strong><span>Cost</span></strong><span>: As a corollary to the scalability of microservices, scaling small microservices&nbsp;requires less resources than scaling the whole application. This translates&nbsp;to lower costs, especially in the world of cloud computing, where costs are based on resource usage.</span></span></p></li></ul><div><br></div><div><div><span style="color:inherit;font-size:20px;font-weight:700;">Understanding microservices complexities</span></div></div><div><div><span style="color:inherit;font-size:14px;">Having explored microservices architecture and its potential benefits, how do you ensure that your team can quickly capitalize on these benefits? Unfortunately, a number of projects have attempted to move to this new paradigm only to waste months of work and thousands of dollars only to end up with a more complicated and&nbsp;</span><span style="color:inherit;">less manageable system. To avoid this, there are a number of concepts your team should understand to ensure they are properly prepared for the change.</span></div></div><div><span style="color:inherit;"><br></span></div><div><div><div><div><span style="color:inherit;font-size:16px;font-weight:700;">Modularity comes at a price</span><span style="color:inherit;"><br></span></div></div></div></div><div><span style="color:inherit;"><p>Managing usage of hundreds of microservices requires a very structured approach to services design, documentation and API versioning </p><ul><li><span style="font-size:14px;"><span style="font-weight:600;">Dependencies</span>: Service dependencies should be minimized. The architecture's advantages disappear as number of dependencies increase and each service can no longer be managed independently. Reusability, fault isolation and independent scalability benefits vanish as well</span></li><li><span style="font-size:14px;"><span style="font-weight:600;">Boundaries</span>: The ability to reuse services and combine them to build applications are great advantages of this architecture. But this can quickly devolve into an unmanageable mesh of interconnected services, where no one truly understands which services are being used where. This puts significant stress when trying to debug issues, upgrade services or even trace the lifecycle of data in an application. Instead, design your microservices to be naturally grouped by logical context boundaries (e.g. customer services, product services, etc...). Intercommunication within a boundary could occur normally while communication outside the boundary would be done using an intermediary, potentially a pub/sub queue for example</span></li></ul><div><br></div></span></div></div>
</div><div data-element-id="elm_z-R1wbFftXjAAQf6s03cDg" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_z-R1wbFftXjAAQf6s03cDg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/MicroserviceInterconnection.png" size="original" data-lightbox="true"/></picture></span><figcaption class="zpimage-caption zpimage-caption-align-center"><span class="zpimage-caption-content">Figure 2 - Bounded microservices context design</span></figcaption></figure></div>
</div><div data-element-id="elm_o7LpQ1Hlss8Oc1SBwRUH1Q" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_o7LpQ1Hlss8Oc1SBwRUH1Q"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="font-size:16px;color:inherit;font-weight:700;">Increased architecture complexity</span><br></p><p><span>While individual microservices are significantly less complex than a traditional application, the overall architecture of an application increases significantly in mainly two ways:</span></p><p><span style="color:inherit;"></span></p><ul><li><p><span><strong><span>Number of moving parts:</span></strong><span> Beyond the large number of microservices that need to be maintained, additional software modules are required to allow the microservices to work and perform reliably. In our simple high level overview in figure 1, we introduced a reverse proxy (to allow simple external communication with the external world) and queues (to allow messaging between services). But that is only the tip of the iceberg. We could also introduce logging/monitoring agents, API gateways, secret management and multiple databases among other things.</span></span></p></li><li><p><span><strong><span>Network traffic:</span></strong><span> In a traditional architecture, applications move data internally and unless the application itself fails, data is guaranteed to be processed. With microservices, that guarantee no longer exists. Communication between microservices is dependent on a network transport across potentially multiple network nodes. Since networks introduce both latency and failures, it is important for the microservices to be built with additional resiliency and the ability to withstand unreachable downstream services. Items like circuit breakers, retries and timeout management become critical for the application to function properly and manage errors gracefully</span></span></p></li></ul><div><br></div><div><div><span style="color:inherit;font-weight:700;"><span style="font-size:16px;">Debugging and monitoring</span></span><br></div></div><div><span style="color:inherit;"><p>In traditional applications, debugging/monitoring is straightforward and developers are intimately familiar with these processes. However, with microservices, debugging/monitoring workflows change significantly.</p><ul><li><p><strong>Debugging</strong>: When and error takes place in a distributed application, it is not as simple as attaching the debugger and stepping through the code: First you need to determine where the in the chain of microservice calls the fault occurred. Then, you need to bring up all the microservices involved in processing the relevant information. Finally you need to trace the data through each of those processes until you finally determine the root cause of the issue. </p></li><li><p><strong>Logging and Monitoring</strong>: In this new paradigm, it is no longer possible to have a single logging and monitoring point built into the application. Instead, each microservice writes its own logs and has different monitoring needs. Thus, the needs arises for external log aggregators and monitors.</p></li></ul><div><br></div><div><div><div><span style="color:inherit;font-size:20px;font-weight:700;">Preparing your team to move to Microservices</span><br></div></div></div><div><div><span style="color:inherit;"><p>As discussed above, there are significant differences between developing and maintaining a traditional monolith application and a microservices application. As you prepare to move your team into a microservices infrastructure it is important to ensure the team members are ready to make the switch.</p><ul><li><p><strong>Time:</strong> Do not underestimate the time requirements to get the team up to speed. Proper training and exposure to the new paradigm is very important to the project's success. There is a steep learning curve required before they can be as productive as they were in a traditional setting. Team members need to have enough time to switch their mindset to this new paradigm or they will eventually fall back to what they know and the project will end up with a large number of tightly coupled microservices which are hard to maintain and almost impossible to upgrade</p></li><li><p><strong>Need:</strong> Evaluate whether you really need a microservices architecture. The project needs to be big enough to warrant moving to this new methodology. Small to medium projects will probably not benefit as much because any gains from the new architecture will probably be wiped out by the increase in architecture complexity. Alternatively, check if the application components can be reused in other projects. In that scenario, microservices may indeed be the way to go</p></li><li><p><strong>Design:</strong> Schedule extra time to design the first set of microservices, ensure they are decoupled and self standing. Also, while the name microservices implies that services should be potentially as small as a function, this does not have to be the case. Study your environment, requirements and business needs. Would it be better to just make mini-services? Or services that are just bounded by a business function (eg: customers service, products service instead of customer kpi service or product inventory service). </p></li><li><p><strong>Automation:</strong> Embrace CI/CD and automation. Without automation to create/update your infrastructure and code base (everything as code), managing a large ecosystem quickly gets out hand. </p></li><li><p><strong>Tooling:</strong> Research and evaluate tools already available that could simplify your path. There is a large ecosystem of tools aimed squarely at the management of distributed applications. Below is a small sample of what is a rich and plentiful ecosystem. Which tools you use depends on your requirements&nbsp;</p></li></ul></span></div></div></span></div></div>
</div><div data-element-id="elm_gEh8jbam-igHUXETmhjTAw" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_gEh8jbam-igHUXETmhjTAw"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/MicrosystemToolset.png" size="original" alt="List of cloud services that help develop and manage microservices" data-lightbox="true"/></picture></span><figcaption class="zpimage-caption zpimage-caption-align-center"><span class="zpimage-caption-content">Figure 3 - Distributed systems ecosystem tools sample</span></figcaption></figure></div>
</div><div data-element-id="elm_0LmL26hjjMbVNC8w6Ngltw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_0LmL26hjjMbVNC8w6Ngltw"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;font-size:14px;">Microservices architecture opens a world of possibilities when it comes to large distributed systems. It provides a number of significant advantages over traditional monolith architecture. However, like most things in life, it does come with some significant baggage. While this is not a silver bullet, it is a compelling new tool in the software development arsenal.&nbsp;</span><br></p></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 24 Feb 2020 15:42:43 -0600</pubDate></item><item><title><![CDATA[Enhance project productivity and improve developer work-life balance]]></title><link>https://www.bolbeck.com/blogs/post/dockerjenkinsk8s</link><description><![CDATA[<img align="left" hspace="5" src="https://www.bolbeck.com/images/DockerJenkinsMinikube.png"/>Slides from my Docker, Jenkins and Kubernetes presentation at MKE Code Camp this weekend.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_0v5P5alzS9qC3YUstXVhbg" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_HqUc-2I-Qf2QnabyIbDnbQ" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_3RTDAruNS4GYZr3PCzD1ZQ" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_tWs110T1RHSEQOxgxuxFIA" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_tWs110T1RHSEQOxgxuxFIA"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-align-center " data-editor="true"><span style="color:inherit;">Simplifying your life with Docker, Jenkins and Minikube</span></h2></div>
<div data-element-id="elm_vxbnethBSY6dJnMxsAJFZQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_vxbnethBSY6dJnMxsAJFZQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><p>Deck from my presentation at the Milwaukee Code Camp. The topic of the talk was about enhancing project productivity and improving developer work-life balance by automating&nbsp;<span style="color:inherit;">non value-add&nbsp;</span>tasks using Docker, Jenkins and Minikube (Kubernetes). Indeed, it is estimated that 35 - 40 % of a developer's time in a project is used in tasks that do not add end user value (deploying, setting up environments, etc...). While these tasks are important and necessary, there is no reason &nbsp;we cannot automate them and give that time back to the developer.</p><p><span style="color:inherit;">Click on the image below to get the slides for the presentation.</span><br></p></div>
</div><div data-element-id="elm_ooCPyfIvHl-3MUbw8OIgWg" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_ooCPyfIvHl-3MUbw8OIgWg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit "><figure role="none" class="zpimage-data-ref"><a class="zpimage-anchor" href="/files/DockerJenkinsKubernetes.pdf" target="" rel=""><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/DockerJenkinsMinikube.png" size="fit" style="width:100%;padding:0px;margin:0px;"/></picture></a></figure></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Sun, 17 Nov 2019 16:08:51 -0600</pubDate></item><item><title><![CDATA[Containers improve return on investment]]></title><link>https://www.bolbeck.com/blogs/post/projectroiwithcontainers</link><description><![CDATA[Containers provide the flexibility, portability and ease of use which improve the ROI of IT projects]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_XfyDsFK9Tvi7N4IV4OQHOQ" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_Ross7852TgSdRgExPdShPg" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_GYhhvExOSPW9SZ0fAzd4hQ" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"> [data-element-id="elm_GYhhvExOSPW9SZ0fAzd4hQ"].zpelem-col{ border-radius:1px; } </style><div data-element-id="elm_HuQwlRlpRtiObACLB0PgOQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_HuQwlRlpRtiObACLB0PgOQ"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-align-center " data-editor="true"><span style="color:inherit;">Increase IT project ROI using containers</span><br></h2></div>
<div data-element-id="elm_L7babhNjbUGuUVj7MpcH5A" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_L7babhNjbUGuUVj7MpcH5A"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/Containers.jpg" size="small" data-lightbox="true" style="height:101px;width:151px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p><span style="color:inherit;"><span>In the last few years containers have changed the way we approach development, deployment and maintenance of applications. While they are not a new concept (containers have existed in Linux for a while), they did not really reach fame until the arrival of the&nbsp;<span><a href="https://www.docker.com/">Docker</a>&nbsp;</span><span>company. Docker made using containers simple and available to everyone. Beyond their flexibility and ease of use, they make economic sense since they :</span></span></span></p><p><span style="color:inherit;"><span><span><br></span></span></span></p><p><span style="color:inherit;"><span><span><br></span></span></span></p><ul><li><p><span>Reduce development environment setup time</span></p></li><li><p><span>Increased developer productivity </span></p></li><li><p><span>Simplify software deployment</span></p></li><li><p><span>Improve app maintainability</span></p></li><li><p><span>Enable new ways to develop applications</span></p></li></ul><p><span style="color:inherit;"></span></p><p><span>To understand how containers provide these benefits, let's first talk about <strong><span>images</span></strong><span> and <strong><span>containers</span></strong></span></span></p></div>
</div></div><div data-element-id="elm_enkUnPtAf-50JLtkrNaj1g" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_enkUnPtAf-50JLtkrNaj1g"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;"><span style="font-size:24px;">Understanding image and containers&nbsp;</span></span></p><p><span style="font-size:14px;">We will use the simple analogy of creating a book to put these two terms in context. The process of writing a book is very similar to the process of creating images and containers:</span></p></div>
</div><div data-element-id="elm_x4F4ByjUX7dkhnUQo_iDWQ" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_x4F4ByjUX7dkhnUQo_iDWQ"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/Books%20and%20Images%20Vertical.png" size="medium" data-lightbox="true" style="height:353.96px;width:329px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p><span style="color:inherit;"><span><br></span></span></p><p><span style="color:inherit;"><span>An&nbsp;<strong><span>image&nbsp;</span></strong><span>is a self contained, isolated compilation of everything needed to run an app, including the app itself. Creating an image is very much like creating the final version of a book. You gather all the code written by developers, gather all the dependencies (think of dependencies as font, formatting, artwork, etc...) and compile them into a self contained image.&nbsp;</span></span></span></p><p><span><strong><span><br></span></strong></span></p><p><span><strong><span>Containers</span></strong><span> are in essence copies from an image that are deployed and run the app. </span></span></p><p><span style="color:inherit;"></span></p><p><span><br></span></p><p><span>Finally, just like a user making notes in a book, containers can be modified as needed. This allows developers to further enhance the code in the container and eventually apply the changes to the image. This feedback loop leads to a completed application living inside a final image which is pushed to the production servers to allow the general public to access our application.</span></p></div>
</div></div><div data-element-id="elm_CU--b89Puhig98gvDEmAHg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_CU--b89Puhig98gvDEmAHg"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;"><span style="font-size:24px;"><span>The original problem that containers solved</span></span></span></p><p><span>In the olden days of application development (which in this fast changing digital world means only a few years ago), each developer would have to waste hours and even days installing all the project tools and libraries in their machines. As more machines needed to be setup, more time (and money) was wasted away in unproductive setup time.</span></p><p><span>Eventually <strong><span>virtual machines</span></strong><span> (VMs) came around, and allowed us to create perfect copies of a machine. The copies would include everything needed, from the operating system to the wall paper. This was a significant improvement as only one person would need to create the VM that would be distributed to the team. All was great in the world...for a bit. Soon enough, problems starting appearing. Since VMs are full copies of a machine, the following issues became evident:</span></span></p><p><span style="color:inherit;"></span></p><ul><li><p><span><strong><span>Hard drive space:</span></strong><span> VMs are so large that businesses had to start buying larger, faster and more expensive hard drives to accommodate them. Even then, machines could not fit more than a couple of VMs. Thus, supporting multiple environments or multiple projects became a real issue</span></span></p></li><li><p><span><strong><span>Start up time</span></strong><span>: Every time a VM needs to start, it is like starting a whole new machine and we all have gone to get coffee and chat with our colleagues while the OS starts up.</span></span></p></li><li><p><span><strong><span>Resource intensive:</span></strong><span> Each VM, even if idle, eats a minimum, rather large, set of resources. Most people that have had to juggle multiple VMs will tell you of the time they started a VM by mistake only to find out their machine frozen due to being out of resources</span></span></p></li></ul></div>
</div><div data-element-id="elm_sOY4OzZaf5xyOVUsQrX1sw" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_sOY4OzZaf5xyOVUsQrX1sw"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="right" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-right zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/images/Container%20vs%20VM%202.png" size="medium" data-lightbox="true" style="height:310px;width:423.28px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p><span style="color:inherit;"><br></span></p><p><span style="color:inherit;"><br></span></p><p><span style="color:inherit;">The solution to these issues came out in the form of container technology that the <a href="http://www.docker.com" title="Docker" target="_blank">Docker</a>&nbsp;</span></p><p><span style="color:inherit;font-size:14px;">&nbsp;company made widely popular. Docker made it easy to create images and containers, made them available in most operating systems. More importantly, Docker made images easy to share.&nbsp;</span></p><p><span style="color:inherit;font-size:14px;"><br></span></p><p><span>Unlike VMs, containers only incorporate the basic libraries necessary to run apps. They are significantly smaller, they use few resources and they start up in seconds. For example, in terms of space usage, a typical MySQL base image is about 400 MB while a VM running just Windows 10 requires a minimum of <a href="https://www.microsoft.com/en-us/windows/windows-10-specifications#primaryR2" title="32 GB" target="_blank">32GB</a></span></p></div>
</div></div><div data-element-id="elm_puIoldRWOmE4UQVoqrLZ8Q" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_puIoldRWOmE4UQVoqrLZ8Q"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;"><span style="font-size:24px;"><span>Container Benefits</span></span></span></p><h4><span style="font-weight:400;color:rgb(89, 129, 169);"><br></span></h4><h4><span style="font-weight:400;color:rgb(89, 129, 169);">Environment Setup</span></h4><ul><li><p><strong>Pre built images:</strong> Many software companies have made their solutions available as images from public repositories like <a href="https://hub.docker.com/search?q=&type=image" title="docker hub" target="_blank">docker hub</a>. These images are ready for use and can be used as springboards to create new images. From <a href="https://hub.docker.com/_/python" title="Python" target="_blank">Python</a> to <a href="https://hub.docker.com/r/tensorflow/tensorflow" title="Tensorflow" target="_blank">Tensorflow</a>, these images make it easy and straight forward to get started with a technology.&nbsp;</p></li><li><p><strong>Machine setup:</strong> One developer can create the image with all the required software and libraries. The image is then easily sharable through a private repository <a href="https://hub.docker.com/search?q=&type=image" title="docker hub" target="_blank">docker hub</a></p></li><li><p><span><strong><span>Environment consistency:</span></strong><span> Since images are self contained apps, using the wrong version of a library is no longer an issue. Additionally, the image is agnostic of any software installed in the host machine.</span></span></p></li><li><p><span><strong><span>On boarding new members:</span></strong><span> Since the project image is always up to date, providing new members the latest image ensures their environment is consistent with the rest of the team.</span></span></p><p><span><span><br></span></span></p></li></ul><h4><span style="font-weight:400;color:rgb(89, 129, 169);">Application development</span></h4><ul><li><p><span><strong><span>Multi-container environments:</span></strong></span></p><ul><li><p><span>It's easy to start up multiple containers at once. Typical example would be to bring up containers for web application, app server and database with just one command.</span></p></li><li><p><span>Containers can easily share a common network where they can address each other by name. No need to worry about IP addresses or network protocols.</span></p></li><li><p><span>Developer can have all pieces of an application running in their machine, reducing the need to mock up data or mimic calls to a server</span></p></li></ul></li><li><p><span><strong><span>Multiple application versions</span></strong><span>: It is usual that developers will need to manage multiple versions of an app and related libraries in their machines. This leads to applications not working properly due to the wrong dependencies or the wrong library. Containers solve this issue since they are self contained environments. </span></span></p></li><li><p><span><strong><span>Testing new software</span></strong><span>: We can experiment with new/trial software within a container and just delete the container once we are done. No need to install the software directly in machine or affect the machine performance by installing too much gunk in it. </span></span></p></li><li><p><span><strong><span>Micro services:</span></strong><span> While containers are not technically necessary for micro services, they make it easier to develop, deploy and maintain them. With the help of orchestration tools like Kubernetes, managing multiple containerized apps is just a few commands away.</span></span></p></li><li><p><span><strong><span>Serverless:</span></strong><span> Companies like Amazon and Google pioneered (and marketed) serverless functions to simplify app development. In the backend, these functions run in containers launched on demand</span></span></p><p><span><span><br></span></span></p></li></ul><h4><span style="font-weight:400;color:rgb(89, 129, 169);">Application deployment</span></h4><ul><li><p><span><strong><span>Software deployment:</span></strong><span> Containers are self-contained entities. Pushing the same container from test to production guarantees that the code tested is the same as the code in production. Additionally, pushing code to an environment is as easy as pushing a new container.</span></span></p></li><li><p><span><strong><span>Application rollback:</span></strong><span> If a deployment goes wrong, rolling back to the previous app version means simply restoring the previous container. No more messy clean ups or leaving behind the wrong library.</span></span></p></li><li><p><span><strong><span>Automation and orchestration</span></strong><span>: Containers are front and center when it comes to Infrastructure as software (IaS). They enable developers to codify the software and dependencies required by an app. When combined with infrastructure tools as Kubernetes, they allow us to codify both software and hardware needs. This code can then be versioned and stored just like any other software.</span></span></p></li></ul></div>
</div><div data-element-id="elm_r18yLJ1jNhq31dxHgHLI1g" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_r18yLJ1jNhq31dxHgHLI1g"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;"><span style="font-size:24px;">Container Challenges</span></span></p><ul><li><p><span><strong><span>Using an image:</span></strong><span> Each image is a bit different depending on how it is built. Thus, they may have some idiosyncrasies on how they are expected to run. Also, caution should be used when using an image from an unknown source</span></span></p></li><li><p><span><strong><span>Management</span></strong><span>: Containers need to be managed properly like any other code, specially if there are multiple versions of the image deployed or if you are running Microservices </span></span></p></li><li><p><span><strong><span>Change in development flow</span></strong><span>: Developer workflow needs to be adjusted to the new paradigm and to use new tools more adept to at debugging container based apps.</span></span></p></li><li><p><span><strong><span>Containers overhead:</span></strong><span> Containers run inside Docker so there is an associated overhead.</span></span></p></li><li><p><span><strong><span>Graphical applications:</span></strong><span> By design, containers do not include the libraries associated with displaying a GUI. While there are work arounds to this, they are clunky at best. Thus, container based applications expose the GUI through a web browser or a thin client that is installed in the host machine.</span></span></p></li></ul></div>
</div><div data-element-id="elm_0mejmFclbdlL79xyh2OInQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_0mejmFclbdlL79xyh2OInQ"].zpelem-text { border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;"><span style="font-size:24px;">Bottom line</span></span></p><p><span style="font-size:14px;">Containers change and improve the software development process the same way the cellphone changed how we approach communications, but they are not a silver bullet. Just as we currently live tethered to our cellphone charging cables, containers do come with some constraints. However, the benefits gained in terms agility and portability by far outweigh the costs. Furthermore, containers enable us to move the industry forward and implement/simplify new strategies like micro services and serverless functions. While it may be over kill to use containers for a quick proof of concept (unless you already have an environment setup), they are the best path forward when building enterprise and big data applications.</span></p></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Fri, 13 Sep 2019 12:10:25 -0500</pubDate></item><item><title><![CDATA[Going Serverless]]></title><link>https://www.bolbeck.com/blogs/post/Going-Serverless</link><description><![CDATA[Using Google's serverless technology to speed up application development]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_xUNC3DzxRYuhUhXjGFRBTA" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_xe5JhbPyRxCsCSAKnZQCDA" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"> [data-element-id="elm_xe5JhbPyRxCsCSAKnZQCDA"].zprow{ border-radius:1px; } </style><div data-element-id="elm_mF7plWtqSXCA5OSpdg2HBg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"> [data-element-id="elm_mF7plWtqSXCA5OSpdg2HBg"].zpelem-col{ border-radius:1px; } </style><div data-element-id="elm_riQhcnY1RmCD2ZqMV2WAlA" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_riQhcnY1RmCD2ZqMV2WAlA"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-align-center " data-editor="true"><span style="color:inherit;">Accelerating application development with Google Serverless</span><br></h2></div>
<div data-element-id="elm_2p9qRYeddITDgfNdIIcMYA" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_2p9qRYeddITDgfNdIIcMYA"].zpelem-imagetext .zpimage-text, [data-element-id="elm_2p9qRYeddITDgfNdIIcMYA"].zpelem-imagetext .zpimage-text :is(h1,h2,h3,h4,h5,h6){ font-family:Noto Sans,sans-serif; font-weight:400; } [data-element-id="elm_2p9qRYeddITDgfNdIIcMYA"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/files/Screen%20Shot%202019-07-21%20at%2011.26.24%20AM.png" size="original" data-lightbox="true"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p>This week, at the 2019 Google Cloud Summit in Chicago, Google invited the community to take a closer look at their latest offerings for cloud application delivery, hosting and development.&nbsp; While Google discussed a range of interesting topics ranging from Artificial Intelligence and Machine Learning&nbsp; to application development and infrastructure modernization, a central topic seemed evident: simplifying and automating common mundane tasks. The ultimate goal being allowing companies to concentrate on building applications that solve business issues and increase revenue.</p><p><br></p><p><span>By abstracting away tasks like infrastructure setup and configuration, Google is hoping to empower teams of all sizes to start developing the next great application in a matter of minutes instead of weeks or months. Companies in the Google ecosystem can setup environments in seconds that fully scale up and down out of the box. This removes the need for peak hour provisioning and having to wait for weeks while servers are purchased and configured. This, in turn, has a direct correlation to the provisioning and maintenance cost of hardware.&nbsp;</span></p><p><br></p><p></p><p>Moving companies’ tech infrastructure into the cloud also enables companies to innovate at a faster pace. The ability to setup and decommission systems in minutes and at a reasonable cost allows for more A/B testing and experimentation than is generally possible on premise. This encourages companies to look for new ways to convert and retain customers as well as searching for new revenue streams. &nbsp;</p></div>
</div></div><div data-element-id="elm_lfu4rWPzunVJ66gTv3Khpg" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_lfu4rWPzunVJ66gTv3Khpg"].zpelem-imagetext .zpimage-text, [data-element-id="elm_lfu4rWPzunVJ66gTv3Khpg"].zpelem-imagetext .zpimage-text :is(h1,h2,h3,h4,h5,h6){ font-family:Noto Sans,sans-serif; font-weight:400; } [data-element-id="elm_lfu4rWPzunVJ66gTv3Khpg"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="right" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-right zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/files/Screen%20Shot%202019-07-29%20at%2012.19.46%20PM.png" size="small" data-lightbox="true" style="width:400px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><p>&nbsp;This year Google has continued its efforts to help companies move and thrive in the cloud as effortless as possible by building on its existing offerings.</p><p><br></p><p><span>A perfect example of this can be found in their latest offerings that extend the definition of serverless computing to apply not only to small self-contained functions and micro-services but to also include any fully managed web, container and Kubernetes based applications (among other things).</span></p><p><br></p><p><span>Google indicates:</span></p><p><br></p><p><span>“Serverless computing is a paradigm shift in application development that enables developers to focus on writing code without worrying about infrastructure”</span></p><p><br></p><p></p><p>It has spent a significant amount of time and resources to try to achieve this lofty goal. The internet giant now provides four serverless options that allow developers using (and paying) for google services to minimize the time spent worrying about infrastructure independently of how they built their applications:</p></div>
</div></div><div data-element-id="elm_TP347q1V1k0FNClIl1-KhQ" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_TP347q1V1k0FNClIl1-KhQ"].zpelem-imagetext .zpimage-text, [data-element-id="elm_TP347q1V1k0FNClIl1-KhQ"].zpelem-imagetext .zpimage-text :is(h1,h2,h3,h4,h5,h6){ font-family:Noto Sans,sans-serif; font-weight:400; } [data-element-id="elm_TP347q1V1k0FNClIl1-KhQ"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/files/Screen%20Shot%202019-07-29%20at%2012.26.24%20PM.png" size="medium" data-lightbox="true" style="height:465.56px;width:412px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><ul><li>&nbsp;<span style="font-weight:bold;">Cloud functions</span>: These small event driven functions are Google’s approach to micro-services. The functions are simple in nature and are meant to have a single purpose. This makes them easy to maintain and fast to deploy/upgrade. This is by far the simplest way to run code on the Google Cloud: Just put your code in the cloud and Google takes care of automatically scaling them to match demand. Note that Google Functions only supports a few, but very popular languages for development including Node.js, Python and Go&nbsp;</li></ul><p><br></p><ul><li><span style="font-weight:bold;">App Engine</span>: This is a fully managed web application platform. App Engine provides a quick and simple way to deploy&nbsp; fully functional web applications without having to worry about any provisioning/managing of resources or configurations. Out of the box, App Engine supports languages like Java, PHP, Node.js, Python, C#, .Net, Ruby and Go.</li></ul><p><br></p><ul><li><span style="font-weight:bold;">Cloud Run</span>: This is the simplest way to deploy containerized applications on the web. With fully managed environments, deploying a container can practically be as easy as pointing Code Run to the appropriate container and pressing ‘go’ . Google will load the container, provision a default pre-configured Kubernetes environment with as many nodes as you specify. Google will also automatically scale up and down the number of nodes as needed. Given that Cloud Run works with containers, it can handle applications in any language or library.</li></ul><p><br></p><ul><li><span style="font-weight:bold;">Cloud Run on GKE</span>: While Cloud Run provides a set of pre-defined containers, for applications that truly need specialized setup and particular hardware Google offers Cloud Run on top of the customer’s Google Kubernetes Engine. This allows customers to fully specify the type of machines/services that should be automatically provisioned/autoscaled by Google Cloud</li></ul><p><br></p><p><span>The different services the Google Cloud provides in terms of managed servers truly caters to a large range of development needs, making this a very interesting proposition for teams that want to simplify their processes and increase their productivity.&nbsp;</span></p><p><br></p><p><span>But how do you choose between the different options? Google provides this simple yet thorough diagram to help make the appropriate decision:</span></p><p></p><div><span><br></span></div>
</div></div></div><div data-element-id="elm_NtJJtbY42muFpdqzIyyKIA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_NtJJtbY42muFpdqzIyyKIA"].zpelem-text { font-family:Noto Sans,sans-serif; font-weight:400; border-radius:1px; } [data-element-id="elm_NtJJtbY42muFpdqzIyyKIA"].zpelem-text :is(h1,h2,h3,h4,h5,h6){ font-family:Noto Sans,sans-serif; font-weight:400; } </style><div class="zptext zptext-align-left " data-editor="true"><p>The basic direction that companies take to deploy their applications on a serverless environment depends on their individual needs and the approach taken for app development. Need a simple set of event driven functions to handle well defined tasks, then go with Cloud functions. More comfortable developing and deploying traditional web applications, then look into App Engine. Want to take advantage of containers and their inherent flexibility to build small to medium applications, then Cloud Run is the way to go. Need further power and control of the way your Kubernetes engine is setup to deal with large traffic coming to your application, then Cloud Run on GKE is the best option. Having all these different options means that project teams have the flexibility to choose the best path to success for their particular situation and their budget restrictions.</p><p><br></p><p><span>Independent of which direction is taken to build/migrate the next successful&nbsp; application, it is clear that cloud providers are rushing to provide simpler and more powerful, solutions to empower the next generation of developers and applications.</span></p><p><br></p><p><span>Additional information about Google’s serverless options can be found at <a href="https://cloud.google.com/serverless-options/">https://cloud.google.com/serverless-options/</a>.</span></p><p></p><div><span><br></span></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 29 Jul 2019 16:57:48 -0500</pubDate></item></channel></rss>