<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Matt Coulter</title>
    <description>The latest articles on DEV Community by Matt Coulter (@nideveloper).</description>
    <link>https://dev.to/nideveloper</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F344151%2F981e1051-b576-4a48-955f-3b6bcf891f58.png</url>
      <title>DEV Community: Matt Coulter</title>
      <link>https://dev.to/nideveloper</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nideveloper"/>
    <language>en</language>
    <item>
      <title>Why I Would Love You To Speak At CDK Day</title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Tue, 12 Apr 2022 13:59:52 +0000</pubDate>
      <link>https://dev.to/nideveloper/why-i-would-love-you-to-speak-at-cdk-day-2jfb</link>
      <guid>https://dev.to/nideveloper/why-i-would-love-you-to-speak-at-cdk-day-2jfb</guid>
      <description>&lt;p&gt;CDK Day is back again on 26th May 2022! &lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Background
&lt;/h2&gt;

&lt;p&gt;For those who have never came across our fun event, we take one day to celebrate everything that is part of the Cloud Development Kit (CDK) family of products. That would be AWS CDK, CDK for Terraform (CDKTF), CDK for Kubernetes (cdk8s), Projen and any other fun projects that have popped up in the wild.&lt;/p&gt;

&lt;p&gt;AWS CDK - &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/home.html"&gt;https://docs.aws.amazon.com/cdk/v2/guide/home.html&lt;/a&gt;&lt;br&gt;
CDKTF - &lt;a href="https://www.terraform.io/cdktf"&gt;https://www.terraform.io/cdktf&lt;/a&gt;&lt;br&gt;
cdk8s - &lt;a href="https://cdk8s.io/"&gt;https://cdk8s.io/&lt;/a&gt;&lt;br&gt;
Projen - &lt;a href="https://github.com/projen/projen"&gt;https://github.com/projen/projen&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This event is not an official AWS event (they do support us and help out but the speakers can talk about other clouds so we decided to stay independent). It is in fact organised for a budget of $0 by a team of volunteers from across the globe. You can see the latest group &lt;a href="https://www.cdkday.com/#committee"&gt;here&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Past Events
&lt;/h2&gt;

&lt;p&gt;We have ran the event twice before, in Sept 2020 and April 2021. You can look back on those events through our dedicated rewind pages:&lt;/p&gt;

&lt;p&gt;2020 - &lt;a href="https://www.cdkday.com/2020/"&gt;https://www.cdkday.com/2020/&lt;/a&gt;&lt;br&gt;
2021 - &lt;a href="https://www.cdkday.com/2021/"&gt;https://www.cdkday.com/2021/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also did a writeup for how both of those events went&lt;/p&gt;

&lt;p&gt;2020 - &lt;a href="https://dev.to/aws-builders/everything-i-learned-creating-cdk-day-my-first-global-virtual-conference-3g7k"&gt;https://dev.to/aws-builders/everything-i-learned-creating-cdk-day-my-first-global-virtual-conference-3g7k&lt;/a&gt;&lt;br&gt;
2021 - &lt;a href="https://dev.to/aws-heroes/cdk-day-in-review-21eo"&gt;https://dev.to/aws-heroes/cdk-day-in-review-21eo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Over 4000 people signed up to attend last year and this is the map of where they came from:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zOMTO3xL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wil2ixq23ncq8ekg3a5x.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zOMTO3xL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wil2ixq23ncq8ekg3a5x.jpeg" alt="CDK Day Map" width="880" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Would Love You To Speak
&lt;/h2&gt;

&lt;p&gt;This is an event ran for fun, for free by a group of volunteers that pulls in a large audience who understands that previous statement. I don't care if this is your first speaking engagement, if you have something to say I would love to provide you the platform to say it.&lt;/p&gt;

&lt;p&gt;But, what happens if something goes wrong on the day with your presentation? That's ok we will have some fun, work our way through it and the community will support you. The day is about bringing people together and learning, not perfect slides to appease sponsors.&lt;/p&gt;

&lt;p&gt;But, what if someone says something abusive while you are on screen? That is why we have a code of conduct that we will enforce across all channels where our speakers are engaged &lt;a href="https://www.cdkday.com/coc/"&gt;https://www.cdkday.com/coc/&lt;/a&gt;. We will have a team of volunteers on the day to make sure it is enforced&lt;/p&gt;

&lt;p&gt;If you aren't confident to create the presentation yourself, that is also amazing because one of the committee members can help you both craft your pitch and your talk.&lt;/p&gt;

&lt;p&gt;If you have stage fright from the thought of speaking live, that is ok because we also accept recorded submissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Submit
&lt;/h2&gt;

&lt;p&gt;If you read all this and thought CDK Day is the kind of event for you then you have until 20th April to submit your talk proposal here &lt;a href="https://sessionize.com/cdk-day-2022"&gt;https://sessionize.com/cdk-day-2022&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>aws</category>
      <category>watercooler</category>
      <category>speaking</category>
    </item>
    <item>
      <title>Architecture, DevOps and Delivery Teams Need To Think Differently To Enable Serverless</title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Wed, 06 Apr 2022 14:34:49 +0000</pubDate>
      <link>https://dev.to/aws-heroes/architecture-devops-and-delivery-teams-need-to-think-differently-to-enable-serverless-12b1</link>
      <guid>https://dev.to/aws-heroes/architecture-devops-and-delivery-teams-need-to-think-differently-to-enable-serverless-12b1</guid>
      <description>&lt;p&gt;This is a post that I have had brewing for maybe a year but I never took the time to write my thoughts down. By the end of this you should hopefully understand how I see the modern architect's role in a serverless world of empowered engineers rapidly delivering software. I will also include a tiny piece of how a DevOps/Platform team can be integral without being a blocker.&lt;/p&gt;

&lt;p&gt;You might have seen my re:Invent talk below before which was super short at 8 minutes so I had to leave out key details, this article will add some more flavour.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/mwp51yqxmtU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The Situation Today
&lt;/h2&gt;

&lt;p&gt;Today, technology does not stick around for long. There was a period of time where you could be the expert of something like IBM Websphere v7 and that knowledge would serve you for 3 or 4 years before you needed to reskill. That is not the case today, it does not matter where your favourite tool is on the technology spectrum it will be different 12 months from now than it is today. You can choose to stay behind the latest version for stability but you forever run the risk of falling out of support and exposing all of your customers to malicious parties.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbizkdm4kvds211edi67.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbizkdm4kvds211edi67.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;sup&gt;Photo by &lt;a href="https://unsplash.com/@hhh13?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;傅甬 华&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/annoyed?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;You may cite some of the long serving frameworks like SpringBoot, React or Angular as showing longevity but look back at the initial version of all of those frameworks and tell me it looks like it does today. Also look at the recent incidents like Log4j and &lt;a href="https://thestack.technology/spring-framework-vulnerabilities/" rel="noopener noreferrer"&gt;spring4shell&lt;/a&gt; to show how much you need to keep those services up to date. Ruby on Rails does seem like the exception to this looking in from the outside but I don't have enough experience in it to comment.&lt;/p&gt;

&lt;p&gt;I was personally bitten by SpringBoot, I used to be the Architect over a fleet of microservices and it felt like all we did was refactor to the latest versions of Spring and apply security patches which meant we couldn't deliver as many new business facing features as we wanted. I spent way too much time talking about Spring innards which I really didn't want to care about. This is not a criticism of SpringBoot specifically, any framework is the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Serverless To The Rescue
&lt;/h2&gt;

&lt;p&gt;Serverless was originally pitched as the antidote to this - just write your business logic, we will keep your runtime patched / upgraded oh and just pay for what you use. The idea in its purest form is that when something like log4j happens, if you don't package your own dependency then AWS will handle it for you while you focus on your customers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1452697620382-f6543ead73b5%3Fixlib%3Drb-1.2.1%26ixid%3DMnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8%26auto%3Dformat%26fit%3Dcrop%26w%3D2370%26q%3D80" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1452697620382-f6543ead73b5%3Fixlib%3Drb-1.2.1%26ixid%3DMnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8%26auto%3Dformat%26fit%3Dcrop%26w%3D2370%26q%3D80" alt="freedom"&gt;&lt;/a&gt;&lt;sup&gt;Photo by &lt;a href="https://unsplash.com/@lephunghia?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Nghia Le&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/joy?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Reality
&lt;/h2&gt;

&lt;p&gt;Pretty much everyone's first adventure into the world of serverless is to use AWS Lambda, usually through a monolith (nothing wrong with an appropriate monolith) which usually means they package something along the lines of SpringBoot inside the function along with all of their usual dependencies, treating Lambda like a regular container only pay per invocation. Usually but not always they have a bad experience with serverless here whether it be cold starts, costs or timeouts. They also need to keep updating the function as often as they would have a standalone service.&lt;/p&gt;

&lt;p&gt;Enter their aligned Architect to help. Let's have some fun with different Architect personas to see how this turns out&lt;/p&gt;

&lt;h3&gt;
  
  
  Traditional
&lt;/h3&gt;

&lt;p&gt;The traditional time to engage Architecture was several months before you wrote a single line of code, you should bring detailed technical alternatives with all of the pros/cons clearly documented with a recommendation. The Architecture group can then tell you if what you are planning aligns with strategy. &lt;/p&gt;

&lt;p&gt;If you phone up this group and say "hey, I built a thing with Lambda but I am not seeing it perform how I would expect", the answer you will get will be somewhere along the lines of "we have a container strategy where you should place that workload here for the performance you expect", "what are you using for logging? We have a logging strategy... oh and while you are here, we have an eventing strategy since Lambda is event based". So ends your experience with serverless and you spread the misinformation that it doesn't work for your architectures&lt;/p&gt;

&lt;h3&gt;
  
  
  Modern
&lt;/h3&gt;

&lt;p&gt;I love to say that modern Architects aspire for evolutionary architecture, making the best decisions we can in the moment with the acknowledgement that we may have to refactor should some new information come to light or should AWS enhance a different service which changes underlying assumptions. This requires very different thinking as you need to be very fast at decision making and very good at keeping your documentation in check.&lt;/p&gt;

&lt;p&gt;The first thing I would expect a modern Architect to ask is "why Lambda?", "did you try to implement this system functionless?". They will ask this because they are following the serverless spectrum.&lt;/p&gt;

&lt;p&gt;The spectrum is explained in this &lt;a href="https://www.youtube.com/watch?v=XUkhubMFVZI" rel="noopener noreferrer"&gt;re:Invent talk&lt;/a&gt; by Linda Lian, the only addition I make is that writing no code using direct integrations is more serverless than Lambda so this spectrum from 2018 is incomplete&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh1c35044udhpe8mhuw80.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh1c35044udhpe8mhuw80.png" alt="the serverless spectrum"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Serverless-first means that you should start with the most serverless implementation and keep falling back as you find it to be inappropriate until you find the goldilocks solution. This is fantastic for a couple of reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You now know that your workload is running in the best place&lt;/li&gt;
&lt;li&gt;You know exactly what it would take it move it up the spectrum&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We now have a new problem - If your Architect says "hey, you don't need that Lambda Function, you can have a Step Function directly integrated into an API Gateway which will be much more performant". There is no gentle on ramp, you now need to learn Amazon API Gateway fully and AWS Step Functions. None of your previous skillsets now apply to your serverless workload. This can leave you feeling very frustrated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1628490678667-6b61174ff2a5%3Fixlib%3Drb-1.2.1%26ixid%3DMnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8%26auto%3Dformat%26fit%3Dcrop%26w%3D2832%26q%3D80" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1628490678667-6b61174ff2a5%3Fixlib%3Drb-1.2.1%26ixid%3DMnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8%26auto%3Dformat%26fit%3Dcrop%26w%3D2832%26q%3D80"&gt;&lt;/a&gt;&lt;sup&gt;Photo by &lt;a href="https://unsplash.com/@flyvk?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Daniil Onischenko&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/scream?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;br&gt;
  &lt;/sup&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Enabling Architecture Is Needed
&lt;/h2&gt;

&lt;p&gt;It is completely unreasonable to expect every engineer in your company to be experts at all of AWS (unless your company is 5 people). It is also completely unreasonable in a serverless context to expect all serverless infrastructure to be provisioned by a central team since with direct integrations, your infrastructure is your business logic.&lt;/p&gt;

&lt;p&gt;You can however use the strengths of both groups together to be stronger than ever&lt;/p&gt;

&lt;p&gt;The north star is that you want your development teams delivering solutions to production as fast as humanly possible without being constrained to a single solution. This means development teams need a safety net that if they try anything dangerous will protect their reputation and the company. &lt;/p&gt;

&lt;p&gt;There are various industry shared ideas for solving this problem like Spotify sharing their &lt;a href="https://engineering.atspotify.com/2020/08/how-we-use-golden-paths-to-solve-fragmentation-in-our-software-ecosystem/" rel="noopener noreferrer"&gt;Golden Path&lt;/a&gt; methodology. They have one "fully paved" golden path for creating software and you are allowed to deviate from the path but under the expectation that you will have no support and you have to report back on if the golden path should change after you learn the pros/cons.&lt;/p&gt;
&lt;h3&gt;
  
  
  Creating A Safety Net
&lt;/h3&gt;

&lt;p&gt;I think we have improved on the golden path concept. Liberty Mutual shared back in 2019 a tool we created internally for our developer safety net that we called Radar. The TLDR is that if anyone tries to deploy anything deemed dangerous, it is instantly deleted.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/H92mea0PjvU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Central teams own the creation of the rules for the safety net and each rule comes with documentation of why it needs to exist. Now instead of a slim golden path that leaving brings you no support we have a safe space to experiment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Driving reuse through inner source
&lt;/h3&gt;

&lt;p&gt;The next thing we did was create a place where engineers could share working solutions with others called the Software Accelerator. Rajesh and team talked about it in detail at CDK Day which you can watch below&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/T6bKix7x3jc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The TLDR is that we created a place where in a couple of clicks anyone could have a working codebase, build and deploy pipeline. We also allowed anyone to contribute to it, this created a flywheel of innovation within the development community&lt;/p&gt;

&lt;h3&gt;
  
  
  Using AWS Well Architected For Advice
&lt;/h3&gt;

&lt;p&gt;The final piece is - how does anyone know that the patterns are high quality? Sure, they aren't dangerous because they aren't immediately deleted by our safety net but there is a large margin between not dangerous and well architected.&lt;/p&gt;

&lt;p&gt;This is where we introduced regular Well Architected Reviews, we do this at a pattern level in the accelerator but also on all deployed solutions. This way architects can regularly pass knowledge down to the teams who can gain confidence that what they have built is appropriate.&lt;/p&gt;

&lt;p&gt;I shared more about how we combine Serverless-First, Well Architected and AWS CDK recently at the Pretoria AWS UG meetup that you can watch below&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/k3bUvZf89k8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Revisiting Our Team From Earlier
&lt;/h2&gt;

&lt;p&gt;If you create an environment like above then the conversation with the architect isn't as scary. Instead of saying "hey, I need you to learn everything about API Gateway and Step Functions" what I am saying is "here is a well architected pattern you can deploy right now to solve this problem". The conversation starts with working, well-architected software.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2F6UFgdU9hirj1pAOJyN%2Fgiphy.gif%3Fcid%3Decf05e470lcwag0gv4l0mz9qgbmmzqag0l828jhan8ev9g70%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2F6UFgdU9hirj1pAOJyN%2Fgiphy.gif%3Fcid%3Decf05e470lcwag0gv4l0mz9qgbmmzqag0l828jhan8ev9g70%26rid%3Dgiphy.gif%26ct%3Dg" alt="this is the way"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It also allows Architects to see common problems across teams during well architected reviews and work with DevOps to create the solution through the accelerator before they have even been asked. They can then work out any kinks which would block wider adoption before it is make or break on a real project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In a serverless-first world, Architecture, DevOps and Delivery teams need to work together to solve different pieces of the same problem. Rather than thinking about one single golden path, think about a spectrum of capabilities that when surfaced in a well-architected way can supercharge your delivery teams and help your business thrive.&lt;/p&gt;

&lt;p&gt;Inside this enabling environment teams can create their own Golden Paths if needed, nothing is off the table which is the beauty of the setup.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>architecture</category>
      <category>cloud</category>
      <category>serverless</category>
    </item>
    <item>
      <title>CDK Day In Review</title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Mon, 03 May 2021 13:11:18 +0000</pubDate>
      <link>https://dev.to/aws-heroes/cdk-day-in-review-21eo</link>
      <guid>https://dev.to/aws-heroes/cdk-day-in-review-21eo</guid>
      <description>&lt;p&gt;CDK Day happened again on 30th April 2021. We had 22 speakers from across the globe give 18 talks covering AWS CDK, cdk8s, CDK for Terraform and Projen.&lt;/p&gt;

&lt;p&gt;This article will show some of the talks and go into the stats for how successful the day went. Since this is an event for the community by the community I have tried to be as transparent as possible&lt;/p&gt;

&lt;h2&gt;
  
  
  The Organising Committee
&lt;/h2&gt;

&lt;p&gt;Before going any further I wanted to take a second and acknowledge the full team of people who gave up their free time to bring CDK Day together. You can find out more details &lt;a href="https://www.cdkday.com/#committee" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Outside of those in the image Jesse Williams and Aaron Schwam from AWS Dev Tools Marketing were a massive help who through AWS funded our sign language interpreters (remember we have no budget or official sponsors so anything you see above a value of $0 someone has provided)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5c1hff5hx3cw5p6dv3z9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5c1hff5hx3cw5p6dv3z9.jpeg" alt="organising committee"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hosts
&lt;/h2&gt;

&lt;p&gt;The two most important aspects of a virtual event are the content as you would expect and the hosts who string it all together. This year we had some amazing hosts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/mattbonig" rel="noopener noreferrer"&gt;Matthew Bonig&lt;/a&gt; and &lt;a href="https://twitter.com/edjgeek" rel="noopener noreferrer"&gt;Eric Johnson&lt;/a&gt; came back as anchor hosts owning responsibility for a track each.&lt;/p&gt;

&lt;p&gt;On track one &lt;a href="https://twitter.com/Vel12171" rel="noopener noreferrer"&gt;Veliswa Boya&lt;/a&gt; and &lt;a href="https://twitter.com/hoegertn" rel="noopener noreferrer"&gt;Thorsten Hoeger&lt;/a&gt; starred as co hosts&lt;/p&gt;

&lt;p&gt;On track two our stars were &lt;a href="https://twitter.com/mirabeladd" rel="noopener noreferrer"&gt;Mirabela Dan&lt;/a&gt; and &lt;a href="https://twitter.com/SathyaBhat" rel="noopener noreferrer"&gt;Sathyajith Bhat&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Sign Language Interpreters
&lt;/h2&gt;

&lt;p&gt;We had a dedicated team of interpreters who would swap out approximately every 20 minutes because it is exhausting work. They were all absolute heroes and multiple people commented throughout the day how awesome they were. This would have been an incredibly difficult job at such a technical event and we are all so grateful they were part of CDK Day.&lt;/p&gt;

&lt;p&gt;Our interpreters were Kim Diez, Nicole Pancino, Arthur Cosentino, Norma V, Jonathan and Hillary&lt;/p&gt;

&lt;h2&gt;
  
  
  The Engagement Platforms
&lt;/h2&gt;

&lt;p&gt;This event on top of the cdk.dev slack, we tried to experiment with having a wonder.me room, the idea was that if people wanted to have a conversation over voice/video after a talk about that talk they could jump over into that room and enter a circle of up to 15 people.&lt;/p&gt;

&lt;p&gt;We had some people join the room before the event kicked off and that conversation was really fun. To me it was like waiting for a real conference to start but the problem was that unlike in real life where you need to physically move between talks, you either just keep watching the stream or jump to the other track so whilst I saw people in the room over the day I didn't see too many circles forming. The platform gives me no analytics to know for sure but I think this would work better purely as a pre event warm up and post event conversation location.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Talks
&lt;/h2&gt;

&lt;p&gt;We had two concurrent streams of talks with an opening keynote in stream 1 and a closing keynote in stream 2. I don't think I can embed all the talks individually in one post here (this platform has an embed limit) so I will post the playlist containing them all and highlight a few below&lt;/p&gt;

&lt;p&gt;Full Playlist - &lt;a href="https://www.youtube.com/playlist?list=PLyBH5aYToYl6L635pOUSoPqeYm45x7tcF" rel="noopener noreferrer"&gt;April 2021&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The day started with Eric Johnson showing us all in a world first demo the new SAM-CLI functionality that allows you to locally run and execute CDK applications! You can read more about that game changing functionality at &lt;a href="https://aws.amazon.com/blogs/compute/better-together-aws-sam-and-aws-cdk/" rel="noopener noreferrer"&gt;the aws blog&lt;/a&gt; or watch the CDK Day recording&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/IK8-wYHym7A"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Next up we had Ben Bridts deliver 40 minutes of pure cloud expertise in his "Mistakes I made when writing infrastructure as code" talk!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/1gxArqL_Eg4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Galaletsang Morake showed us all how to deploy serverless applications using AWS CDK in a great introductory talk&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/G7bvLBh5weg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Nočnica Fee gave a brilliant talk about "Without observability CI/CD doesn't work"&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ChBGOf098o8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;How many people are skipping testing their CDK applications? Darko Mesaroš delivered a masterclass on testing so there are no more excuses&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/t4G1db63BGc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Have you never used CDK before and just want to know how to get started? Oksana Horlock has you covered&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Y59H_RfYvdM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Curious about the CDK for Terraform? Well Ansgar Mertens deep dives and answers a live Q&amp;amp;A&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/cfU-WOGdNqA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Do you use Kubernetes but struggle with the YML files? Do you wish you could use a higher level language? Max Brenner shows us cdk8s and why it is important&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/K5Xuf0DI6ak"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Who Signed Up?
&lt;/h1&gt;

&lt;p&gt;Looking at people who signed up we can see the numbers grew significantly for this event from the last. In September 2020, 3033 people signed up whilst for April 2021 we hit 4315!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcmxcofgq89dxhcuiwdv.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcmxcofgq89dxhcuiwdv.PNG" alt="ticket sales"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In terms of geography, the sign ups were pretty global which meant we were covering the full spectrum of time zones. This meant the content had to work both live and for async viewing after the event&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4m1ifxos4srda83tr6xi.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4m1ifxos4srda83tr6xi.PNG" alt="sign up map"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you compare this to the map from September you can see where the community has grown:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24nrhirdgd4eklanw3ua.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24nrhirdgd4eklanw3ua.png" alt="September's Map"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can break this down further by pulling in some of the stats from YouTube since we didn't broadcast across multiple platforms this time. I do not know how YouTube gets these stats so I can only assume they are guestimates as opposed to accurate&lt;/p&gt;

&lt;p&gt;The age distribution curve seems pretty natural for this kind of event, although it would be nice if 13-17 was above 0:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpfqepnkf34nw4axp6e0.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpfqepnkf34nw4axp6e0.jpeg" alt="age breakdown"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is incredibly biased, inaccurate, oppressive and problematic to take action on an automated binary gender percentage. I am only showing this because it is one sided enough that we should try and get an accurate breakdown at a future event based on voluntary filling out an anonymous survey where people self identify&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fym56dwuc50kifn5oihgx.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fym56dwuc50kifn5oihgx.jpeg" alt="YouTube gender"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Live Viewing Numbers
&lt;/h1&gt;

&lt;p&gt;Track 1 you can see is where everyone joined for the opening keynote and then numbers slowly dropped as you would expect&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4jkazlag3g0dr1rri7g.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4jkazlag3g0dr1rri7g.PNG" alt="Track 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Track 2 rises throughout the event taking a large spike up when Track 1 finished&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlnx09n1w15e8xxp92v5.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlnx09n1w15e8xxp92v5.PNG" alt="Track 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we compare this to September's event we can see that even after 7 months of extra time the new event has more overall views than the original&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7lxk8blix45h1ku10sw.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7lxk8blix45h1ku10sw.PNG" alt="live streams compared"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the viewer retention of that single track last year which you can see the numbers are overall lower&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftw2q6df6nul8sm1h41qx.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftw2q6df6nul8sm1h41qx.PNG" alt="sept retention"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Was it a success?
&lt;/h1&gt;

&lt;p&gt;I could not be happier with how it went, yes we had some technical issues but the purpose of this event is not to be flashy and perfect or make money. This event has always been about bringing the whole community together for one day to have fun and learn something new. Multiple new features across different products were launched at our event! This is at the same event where we have presenters on stage in Otter and Squirrel costumes. For me, mission accomplished&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awscdk</category>
      <category>projen</category>
      <category>cdk8s</category>
    </item>
    <item>
      <title>Looking Back on 2020 - The Year I Became an AWS Hero, Started a Conference and Won The Liberty Mutual Chairman's Award</title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Thu, 15 Apr 2021 16:05:11 +0000</pubDate>
      <link>https://dev.to/aws-heroes/looking-back-on-2020-the-year-i-became-an-aws-hero-started-a-conference-and-won-the-liberty-mutual-chairman-s-award-4fph</link>
      <guid>https://dev.to/aws-heroes/looking-back-on-2020-the-year-i-became-an-aws-hero-started-a-conference-and-won-the-liberty-mutual-chairman-s-award-4fph</guid>
      <description>&lt;p&gt;On 7th April 2021 I was stunned to find out I had won the 2020 Liberty Mutual Chairman's award. To put this into context, "The Chairman’s Award is our most prestigious award handed out once a year and recognises employees whose significant contributions, effort and performance go above and beyond". If you are ever in Boston, my name should soon be permanently displayed somewhere in the Foyer of the Liberty Mutual HQ. This is only the second time someone from Liberty IT has won the award so I am truly humbled by it.&lt;/p&gt;

&lt;p&gt;The award description:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7xogbg9m8z1mblwu7xap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7xogbg9m8z1mblwu7xap.png" alt="award description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This seemed like a perfect opportunity to reflect on the past 12 to 18 months, share what I have learned, what mistakes I made and how I ended up here.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why AWS CDK?
&lt;/h2&gt;

&lt;p&gt;I have used a lot of technologies in my career, why have I pushed so hard to make this one easy for our engineers to embrace? Why not just pull out the old "it depends" when asked about Infrastructure as Code tools?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgm5rmu2ycclb5j5jte9h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgm5rmu2ycclb5j5jte9h.jpg" alt="It depends"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2 years ago, I was promoted into a different role within Liberty. I went from driving the technical direction of a product area, working with a specific set of teams to being an enabling function across ~240 developers in Belfast/Dublin or thousands globally within the wider organisation. I was given the freedom and autonomy to do this my own way but how could I have any kind of impact on a group this large?&lt;/p&gt;

&lt;p&gt;Honestly, on day one I wasn't sure this was possible but I had some down time and my colleague &lt;a href="https://twitter.com/MarkMcCann" rel="noopener noreferrer"&gt;Mark McCann&lt;/a&gt; had said to me "Have you seen AWS CDK? It's pretty cool". The LIT technical strategy set by &lt;a href="https://twitter.com/davidand393" rel="noopener noreferrer"&gt;Dave Anderson&lt;/a&gt; was that we wanted to be serverless first. My new area in Liberty Mutual also had a serverless first north star. I sat and thought about the biggest blockers to serverless developer productivity from my previous team. Two things came to mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CloudFormation&lt;/li&gt;
&lt;li&gt;API Gateway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The configuration we needed to use for API Gateway was so specific that a typical CloudFormation Template (CFT) with just a gateway in it was approx 1500 lines long. Developers facing that reality coming from SpringBoot where you just annotate a method was grim. You also had no local validation of the CFT, developers needed to deploy and hope it worked (it frequently didn't so we used to sit around at tea telling our horror stories). Dedicated Infra engineers will tell me that pure YML for CFT is the best method but for everyday engineers to move at the speed we wanted it was causing considerable drag and stress.&lt;/p&gt;

&lt;p&gt;Since Mark had put AWS CDK in my head, I thought "can it help here?". The way I evaluated it was to build an AWS CDK construct for our API Gateway configuration, this construct came with a full set of unit tests and reduced the 1500 lines of YML mentioned above to about 15 lines of TypeScript&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/Cdkk6wFFqisTe/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/Cdkk6wFFqisTe/giphy.gif" alt="cat shocked"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had never seen a product with so much potential to get us where we needed to go through developer empowerment before, it even allowed us to bring our engineering excellence standards from previous platforms. The problem was AWS CDK had basically only gone Generally Available(GA), it was changing rapidly to meet the needs of early adopters and as such examples of people using it were scarce. I also had to factor in that the serverless team at AWS were mostly focused on their new product at the time AWS SAM. We needed to use the product right there and then, not wait 2 years - To me, this seemed like the right level for an enabling architect to operate.&lt;/p&gt;
&lt;h2&gt;
  
  
  Introducing The Software Accelerator
&lt;/h2&gt;

&lt;p&gt;At this exact moment in time, a Senior Architect in Liberty Mutual (&lt;a href="https://twitter.com/rajeshporaiyan" rel="noopener noreferrer"&gt;Rajesh Kannan&lt;/a&gt;) was creating the Software Accelerator. This was going to be our developer enablement platform where everyone could share working patterns and practices for rapid deployment. To see this platform in action you can sign up for CDK Day on 30th April 2021 (&lt;a href="https://twitter.com/cdkday/status/1381889407381295104?s=20" rel="noopener noreferrer"&gt;Accelerator CDK Day&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;I excitedly phoned Rajesh and said "hey, this is a game changer" he agreed and had already luckily decided the accelerator would be based on AWS CDK. This left me in a fortunate position, I had a technology I could see the potential in and a currently unreleased platform, still in dev that could make this technology easy to distribute. What was missing? The working patterns, I wanted to make sure that by the time the Accelerator launched our engineers had working patterns to deploy with it. Developers have deadlines to meet and one bad experience with a technology causes inertia to try it again so this was mission critical to our serverless first journey in my head. &lt;/p&gt;
&lt;h2&gt;
  
  
  Finding The Patterns
&lt;/h2&gt;

&lt;p&gt;There was a decision point where as an Architect I could have gone to my happy place and created super complex, opinionated patterns backed by my ideas alone. That plan would not have worked, what we needed was for groups of engineers to reuse / contribute back to the same patterns without all the bloat I would inevitably add due to personal preferences. The easiest way to create these patterns was to find someone in the industry who is already recognised and respected so that when a developer disagrees with the implementation you can say "well, this well known industry expert says otherwise, want to get them on a call and discuss it? Before we set that up, here is all the evidence for why it works and here are all the companies doing it in production. Still disagree?"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/jeremy_daly" rel="noopener noreferrer"&gt;Jeremy Daly&lt;/a&gt; was that industry expert, an AWS Serverless Hero who had a famous &lt;a href="https://www.jeremydaly.com/serverless-microservice-patterns-for-aws/" rel="noopener noreferrer"&gt;blog post&lt;/a&gt; dedicated to serverless patterns. The intention here was never to take away credit from Jeremy but to open up a new audience of developers by coding his patterns in AWS CDK and linking it all back to him.&lt;/p&gt;
&lt;h2&gt;
  
  
  Open Source or Inner Source?
&lt;/h2&gt;

&lt;p&gt;The next big decision was if I should do this just for Liberty or since the industry as a whole was lacking reliable code examples for AWS CDK if I should create my first ever proper open source project. In December 2019 I attended AWS re:Invent where I spoke to other developers plus watched some of the talks where I confirmed this was an industry issue. &lt;/p&gt;

&lt;p&gt;On Jan 11th 2020 after some holiday time off, I made my decision:&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1216099633253974016-306" src="https://platform.twitter.com/embed/Tweet.html?id=1216099633253974016"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1216099633253974016-306');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1216099633253974016&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Marketing
&lt;/h2&gt;

&lt;p&gt;I now had a new problem, my social media presence was non existent so how would I get the word out? I had no budget to spend on advertisements or on a marketing team. I decided to start small and created the &lt;a href="https://twitter.com/CdkPatterns" rel="noopener noreferrer"&gt;@CdkPatterns&lt;/a&gt; twitter handle then every time I created a new pattern I would tweet about it and tag the pattern's original creator, this way if what I was doing was valuable they might retweet it and growth would be organic. I also created a dev.to account and started blogging about each of the patterns as they were released. Finally I created a &lt;a href="https://www.youtube.com/channel/UCuR3jnWEnxx1G2axUMVaogg" rel="noopener noreferrer"&gt;YouTube channel&lt;/a&gt; where I talked through the theory of some of the patterns. I will show later how the marketing worked out but we have some steps in the story to discuss first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a Product
&lt;/h2&gt;

&lt;p&gt;The plan was to make a developer productivity play through some kind of product called CDK Patterns with open source at the core. &lt;/p&gt;

&lt;p&gt;How would I judge the success of my product? It wasn't profits or usage in production since I was focused on education over reusable libraries. I did not want to own the code liability for the whole CDK community, I wanted to empower them to use the standard AWS constructs without custom building. Ideally, people wouldn't even know my name after using the product.&lt;/p&gt;

&lt;p&gt;The North Star of CDK Patterns was to increase serverless adoption of AWS CDK in the industry but at that point in time the community was very small and we didn't meet. I decided that for the first while I would judge success on unique visitors to the repo, clones, GitHub stars and I would also take an informal check of serverless AWS CDK noise in the industry (blog posts, YouTube videos, conference presentations etc). &lt;/p&gt;

&lt;p&gt;It is important to note that we are talking about the behaviour of a global developer community here which is a rich tapestry of interactions, motivations and reactions so I knew I could contribute to the outcome I wanted but I am not in any way claiming that I owned this whole north star.&lt;/p&gt;

&lt;p&gt;I had a second North Star that was voluntary serverless AWS CDK adoption in Liberty Mutual. This was something I could easily measure through Accelerator usage metrics. This one was arguably more important but I knew it would come as a side effect of the industry adoption.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Language Problem
&lt;/h3&gt;

&lt;p&gt;It quickly became apparent that since AWS CDK supported multiple programming languages (TypeScript, Python, Java, .Net at the time), I needed a way to not isolate the majority of the community. I did a quick poll on Twitter to ask what languages people were using and at the time Python/TS covered 87% of users with TypeScript the majority&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1226216429415997442-57" src="https://platform.twitter.com/embed/Tweet.html?id=1226216429415997442"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1226216429415997442-57');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1226216429415997442&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I came up with a flow where all new patterns get added in TS/Python with the other languages something the community could contribute later as needed. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Monorepo Problem
&lt;/h3&gt;

&lt;p&gt;In another poll I asked the community if they would rather have a repo per pattern or keep them all together in all available languages. The resounding answer was to keep them all together. Whilst on paper this seems simpler and easier for users, it presents an information discovery problem. There is only so much you can do with a GitHub readme file (believe me I pushed the limits).&lt;/p&gt;

&lt;p&gt;I created two solutions to try and solve this problem, the first was a cli tool that allowed developers to clone any single pattern in their desired language with one command&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1236593862249984001-124" src="https://platform.twitter.com/embed/Tweet.html?id=1236593862249984001"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1236593862249984001-124');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1236593862249984001&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;The second was to create the website &lt;a href="https://www.cdkpatterns.com" rel="noopener noreferrer"&gt;cdkpatterns.com&lt;/a&gt; as an information radiator for the patterns available in the repo. I allowed you to browse all the patterns or filter the patterns by the AWS component contained within (e.g. Lambda, SNS, SQS)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuzv59qi5xhxnww5stlau.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuzv59qi5xhxnww5stlau.PNG" alt="CDK Patterns"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Content Problem
&lt;/h3&gt;

&lt;p&gt;Once I had CDK Patterns established a new problem emerged - how do I help people choose the right pattern for their situation? If I just kept adding patterns with no guidelines then it would be overwhelming with choice. The solution I came up with was to pair the patterns with the &lt;a href="https://aws.amazon.com/architecture/well-architected/?wa-lens-whitepapers.sort-by=item.additionalFields.sortDate&amp;amp;wa-lens-whitepapers.sort-order=desc" rel="noopener noreferrer"&gt;AWS Well Architected Framework&lt;/a&gt;, the idea was that developers could do a well architected review of their application and then based on the outcome of that report they could find CDK Patterns to help fill the gaps. &lt;a href="https://twitter.com/heitor_lessa" rel="noopener noreferrer"&gt;Heitor Lessa&lt;/a&gt; helped me significantly with refining this idea. If you read the recent &lt;a href="https://aws.amazon.com/solutions/case-studies/liberty-mutual-case-study/" rel="noopener noreferrer"&gt;AWS case study on Liberty Mutual&lt;/a&gt; you will see this mirrored our internal strategy as well&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1262744416428539906-744" src="https://platform.twitter.com/embed/Tweet.html?id=1262744416428539906"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1262744416428539906-744');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1262744416428539906&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Bringing The Community Together
&lt;/h2&gt;

&lt;p&gt;Remember my North star was to increase serverless adoption of AWS CDK in the industry but I had no way of judging this since we didn't meet properly. I had this idea to create a new conference called CDK Day where the whole community could come together for one day and showcase the brightest and best of CDK (by this point we had 3 CDKs - AWS CDK, CDK for Terraform and cdk8s for Kubernetes)&lt;/p&gt;

&lt;p&gt;I wrote a full article on this idea which goes into who the amazing group were that brought this together and the timelines we faced:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/aws-builders" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F2794%2F88da75b6-aadd-4ea1-8083-ae2dfca8be94.png" alt="AWS Community Builders "&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F344151%2F981e1051-b576-4a48-955f-3b6bcf891f58.png" alt=""&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/aws-builders/launching-a-virtual-global-conference-in-two-weeks-through-aws-community-builders-32f1" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Launching A Virtual Global Conference In Two Weeks Through AWS Community Builders&lt;/h2&gt;
      &lt;h3&gt;Matt Coulter for AWS Community Builders  ・ Aug 14 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#aws&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#awscdk&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#cloud&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#cdkday&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;as well as my learnings:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/aws-builders" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F2794%2F88da75b6-aadd-4ea1-8083-ae2dfca8be94.png" alt="AWS Community Builders "&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F344151%2F981e1051-b576-4a48-955f-3b6bcf891f58.png" alt=""&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/aws-builders/everything-i-learned-creating-cdk-day-my-first-global-virtual-conference-3g7k" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Everything I Learned Creating CDK Day - My First Global, Virtual Conference&lt;/h2&gt;
      &lt;h3&gt;Matt Coulter for AWS Community Builders  ・ Oct 12 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#awscdk&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#cdkday&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#conference&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;The short version is that over 3000 people signed up to attend with over 1300 tuning in live for the keynote.&lt;/p&gt;

&lt;p&gt;People signed up from nearly everywhere, this still astonishes me:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohw4zorygd0jwqn9cmw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohw4zorygd0jwqn9cmw5.png" alt="User Map"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most of the talks were about serverless implementations so I was ecstatic to see the community developing. Part of the discussions for CDK Day were about how do we keep people talking and &lt;a href="https://twitter.com/skorfmann" rel="noopener noreferrer"&gt;Sebastian Korfmann&lt;/a&gt; had purchased the &lt;a href="//cdk.dev"&gt;cdk.dev&lt;/a&gt; domain so we agreed to create a cdk.dev Slack space which would be used for attendees to chat during the day and hopefully they would stay there afterwards. As of April 2021 there are over 2000 members in that slack community with constant daily interactions.&lt;/p&gt;
&lt;h2&gt;
  
  
  AWS Summit Americas
&lt;/h2&gt;

&lt;p&gt;In one of the most surreal experiences of my career, the day before CDK Day &lt;a href="https://twitter.com/Werner" rel="noopener noreferrer"&gt;Werner Vogels&lt;/a&gt; as CTO of Amazon quoted me in his keynote where he tells the origin story of AWS CDK. He also took the time to talk about CDK Patterns and deep dive into how they apply the Well Architected Framework&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1310958370485080065-243" src="https://platform.twitter.com/embed/Tweet.html?id=1310958370485080065"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1310958370485080065-243');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1310958370485080065&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;You can watch the full video here:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/AYYTrDaEwLs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;A couple of days later he also said these very kind words&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1311709176385671169-625" src="https://platform.twitter.com/embed/Tweet.html?id=1311709176385671169"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1311709176385671169-625');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1311709176385671169&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Published Articles With AWS
&lt;/h2&gt;

&lt;p&gt;AWS were graceful enough to ask me to co author a couple of blog posts with them as well&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/opensource/the-cdk-patterns-open-source-journey/" rel="noopener noreferrer"&gt;The CDK Patterns Open Source Journey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/architecture/liberty-it-adopts-serverless-best-practices-using-aws-cdk/" rel="noopener noreferrer"&gt;Liberty IT Adopts Serverless Best Practices with CDK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Speaking At Events (and others speaking about CDK Patterns)
&lt;/h2&gt;

&lt;p&gt;Another great avenue to spread the word about CDK Patterns was to appear at other people's events. There is a massive amount of work in preparing to speak at an event, crafting the slides/narrative but it definitely brings traction!&lt;/p&gt;

&lt;p&gt;Serverless Bash&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/zGNMzpqU0ig"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;NI Dev Conf&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/BDTuPK10Jkk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;AWS Community Days Dublin&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1316007179934150657-315" src="https://platform.twitter.com/embed/Tweet.html?id=1316007179934150657"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1316007179934150657-315');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1316007179934150657&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Serverless Chats Podcast&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1330182419178287108-622" src="https://platform.twitter.com/embed/Tweet.html?id=1330182419178287108"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1330182419178287108-622');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1330182419178287108&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Marcia Villalba What to Watch at re:Invent&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Wz-Yc3uFUVQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Dave Anderson at re:Invent&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1336386323381440515-405" src="https://platform.twitter.com/embed/Tweet.html?id=1336386323381440515"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1336386323381440515-405');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1336386323381440515&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Jason Fulghum at re:Invent&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1340207549409349632-98" src="https://platform.twitter.com/embed/Tweet.html?id=1340207549409349632"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1340207549409349632-98');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1340207549409349632&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;In December 2020 I gave this presentation showing the social media growth and repo stars trend&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4r3pvefeijejwta3efge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4r3pvefeijejwta3efge.png" alt="social media"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3bn38emuw1oywv3p981.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3bn38emuw1oywv3p981.png" alt="GitHub stars"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As of April 2021, the CDK Patterns Twitter account has 2600 followers, the repo has over 1100 GitHub Stars, hundreds of visitors/clones per week. The interesting thing about monitoring the repo usage is that visitors are always higher than clones but that is because developers open the repo, find the few lines they need, copy it into their IDE and leave. Given my original mission was an education play this is the perfect balance that I always wanted. The YouTube channel has ~600 subscribers (I haven't put enough time into it to have serious growth)&lt;/p&gt;

&lt;p&gt;All of this led to me being announced as one of the first AWS DevTools Heroes (I can't embed any more tweets so the image will have to do with the link to the blog underneath)&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzuo6sh9viut4zgcq20ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzuo6sh9viut4zgcq20ed.png" alt="Hero announcement"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/blogs/aws/meet-the-newest-aws-heroes-including-the-first-devtools-heroes/" rel="noopener noreferrer"&gt;Hero announcement blog&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Have I Learned? (In no particular order)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The AWS Community are awesome! So many welcoming people willing to just pitch in and help&lt;/li&gt;
&lt;li&gt;Don't underestimate the amount of time you will spend doing marketing vs coding if you build a product&lt;/li&gt;
&lt;li&gt;Developers genuinely love AWS CDK&lt;/li&gt;
&lt;li&gt;Organising a conference is a serious amount of work, even virtually. It only works when you can pull together an awesome team of volunteers&lt;/li&gt;
&lt;li&gt;Managing Pull Requests and maintaining an open source repo is basically a full time job&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Can You Get More Involved?
&lt;/h2&gt;

&lt;p&gt;If you are excited about everything you have read and serverless architectures deployed through AWS CDK then you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow &lt;a href="https://www.twitter.com/cdkpatterns" rel="noopener noreferrer"&gt;@CdkPatterns&lt;/a&gt; on Twitter&lt;/li&gt;
&lt;li&gt;Sign up for and share &lt;a href="https://www.cdkday.com" rel="noopener noreferrer"&gt;CDK Day&lt;/a&gt; with everyone you know&lt;/li&gt;
&lt;li&gt;Join the &lt;a href="https://join.slack.com/t/cdk-dev/shared_invite/zt-mso6p56d-qJp7SOTBvMaQuDrx7R2wHg" rel="noopener noreferrer"&gt;cdk.dev&lt;/a&gt; slack&lt;/li&gt;
&lt;li&gt;Open a Pull Request with a new CDK Pattern on &lt;a href="https://www.cdkpatterns.com" rel="noopener noreferrer"&gt;cdkpatterns.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>community</category>
      <category>career</category>
      <category>cloud</category>
    </item>
    <item>
      <title>CDK Day CFP Is Open!!!! </title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Wed, 03 Feb 2021 14:16:10 +0000</pubDate>
      <link>https://dev.to/nideveloper/cdk-day-cfp-is-open-4jcm</link>
      <guid>https://dev.to/nideveloper/cdk-day-cfp-is-open-4jcm</guid>
      <description>&lt;p&gt;CDK Day is coming back on 30th April 2021, if you don't know what to expect you can checkout the article I wrote last year:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/aws-builders" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5zuWf912--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--Z-NQNKRG--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/organization/profile_image/2794/88da75b6-aadd-4ea1-8083-ae2dfca8be94.png" alt="AWS Community Builders " width="150" height="150"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mIs0j92M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--DxTcaqtz--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/344151/981e1051-b576-4a48-955f-3b6bcf891f58.png" alt="" width="150" height="150"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/aws-builders/everything-i-learned-creating-cdk-day-my-first-global-virtual-conference-3g7k" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Everything I Learned Creating CDK Day - My First Global, Virtual Conference&lt;/h2&gt;
      &lt;h3&gt;Matt Coulter for AWS Community Builders  ・ Oct 12 '20 ・ 16 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#awscdk&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#cdkday&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#conference&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h1&gt;
  
  
  CFP Details
&lt;/h1&gt;

&lt;p&gt;The CFP is open from now until 19th March 2021, you can find it here : &lt;a href="https://sessionize.com/cdkday"&gt;https://sessionize.com/cdkday&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CFP Questions
&lt;/h2&gt;

&lt;p&gt;To help you have the best chance of being accepted to speak at the conference I wanted to list out all of the questions asked with how to answer them&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Session Title&lt;br&gt;
A catchy short title used primarily for people to decide if they want to listen to your talk&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Description&lt;br&gt;
This field is limited to 300 characters as this is the content that will be displayed on the website to advertise your talk. It needs to be brief and catchy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Describe your talk in as much detail as you desire&lt;br&gt;
Use as many words as you want to really paint a picture for us of what message you want to get across. The more words you write here the more chance we have of understanding your talk&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Session Format&lt;br&gt;
There are two formats - Lighting Talk or Full Session&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Lighting Talk is 10 minutes with no Q&amp;amp;A, these could be on absolutely anything given the short format. A 10 minute rant about something may even be a good topic&lt;/li&gt;
&lt;li&gt;Full Sessions are where you have a bigger message you want to convey that takes more time which is why the format is a 30min presentation slot with 10 mins Q&amp;amp;A. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Level&lt;br&gt;
We want a mix of talks targeted at different audience experience levels, please be honest with this one and don't think that one level is more desirable than the others. Here is my guidance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introductory means something along the lines of "Let me tell you about Projen"&lt;/li&gt;
&lt;li&gt;Intermediate could be "Let me show you how I used projen to automate cdk version updates"&lt;/li&gt;
&lt;li&gt;Advanced could be "Here is how to build a CDK construct that targets TS/Py/Go/Java/C#"&lt;/li&gt;
&lt;li&gt;Expert could be "Building AWS CDK locally on an M1 Mac, how I made it work"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which CDK is the focus of your presentation&lt;br&gt;
We want to make sure we balance all of the CDKs throughout the day so this will just help us filter. If you built a product on top of one of the CDKs please pick other&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What Formats are you comfortable with?&lt;br&gt;
This is about your personal comfort levels with presenting and your level of experience. Some people now hate presenting live and would rather pre-record their talk then still join live to answer questions. Be honest here what you are open to.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If Live, what is your preferred UTC time window&lt;br&gt;
This is a global conference as opposed to say a UK regional one which means it spans every time zone for the audience and presenters. We cannot guarantee that we can accommodate the time window given here but it will definitely help with scheduling. Given the conference will be 15:00 to 20:00 UTC it would help if your window was within those constraints.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Would you like help preparing your presentation?&lt;br&gt;
We want to be available for speakers who want support, that comes in many formats. Maybe you know what you want to present and it's a great idea but when it comes to the execution you need someone to look over your slides to offer feedback. Maybe you want to pre-record but you have never done it before so you need someone to show you how. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The consent checkbox&lt;br&gt;
Nothing sinister here, we just wanted everyone to confirm they are happy to be part of the live stream and recorded.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>conferences</category>
      <category>cfp</category>
    </item>
    <item>
      <title>Deploying a ML model using the new AWS Lambda Container Image Functionality</title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Thu, 03 Dec 2020 20:59:17 +0000</pubDate>
      <link>https://dev.to/aws-heroes/deploying-a-ml-model-using-the-new-aws-lambda-container-image-functionality-4e7o</link>
      <guid>https://dev.to/aws-heroes/deploying-a-ml-model-using-the-new-aws-lambda-container-image-functionality-4e7o</guid>
      <description>&lt;p&gt;This week at re:Invent we saw AWS announce the ability to bring your own container to Lambda functions. This may seem very anti-serverless at first but remember that serverless is a spectrum and everyone is in a different place. &lt;/p&gt;

&lt;p&gt;The scenario that gets me super excited is the deployment of ML models inside Lambda. Before, it was just too awkward for most use cases to do ML in Lambda but I will demonstrate below that it is very easy now. To do so I will use a new CDK Pattern&lt;/p&gt;

&lt;h1&gt;
  
  
  The Predictive Lambda Pattern
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Foyox7wvdhl05u1p8i0mz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Foyox7wvdhl05u1p8i0mz.png" alt="Architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a pattern that uses a container inside Lambda to deploy a custom Python ML model to predict the nearest Chipotle restaurant based on your lat/long.&lt;/p&gt;

&lt;p&gt;Some Useful References:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Blog&lt;/td&gt;
&lt;td&gt;&lt;a href="https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/" rel="noopener noreferrer"&gt;New for AWS Lambda – Container Image Support&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS Docs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2020/12/aws-lambda-now-supports-container-images-as-a-packaging-format/" rel="noopener noreferrer"&gt;Lambda now supports container images&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Julian Wood&lt;/td&gt;
&lt;td&gt;&lt;a href="https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/" rel="noopener noreferrer"&gt;Working with lambda layers and extensions in container images&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Michael Hart&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hichaelmart.medium.com/using-container-images-with-aws-lambda-7ffbd23697f1" rel="noopener noreferrer"&gt;Using container images with aws lambda&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yan Cui&lt;/td&gt;
&lt;td&gt;&lt;a href="https://lumigo.io/blog/package-your-lambda-function-as-a-container-image/" rel="noopener noreferrer"&gt;Package your Lambda function as a container image&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scikit Learn Docs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://scikit-learn.org/stable/user_guide.html" rel="noopener noreferrer"&gt;User Guide&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS ECR Gallery&lt;/td&gt;
&lt;td&gt;&lt;a href="https://gallery.ecr.aws/lambda/python" rel="noopener noreferrer"&gt;Python Lambda Image&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker Docs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.docker.com/reference/" rel="noopener noreferrer"&gt;CLI Reference&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Available Versions
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/cdk-patterns/serverless/tree/master/the-predictive-lambda/typescript" rel="noopener noreferrer"&gt;TypeScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cdk-patterns/serverless/tree/master/the-predictive-lambda/python" rel="noopener noreferrer"&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Included In This Pattern?
&lt;/h2&gt;

&lt;p&gt;This pattern uses sklearn to create a custom k nearest neighbour model to predict the nearest Chipotle to a given Latitude and Longitude. The model is deployed inside a container attached to AWS Lambda.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Data
&lt;/h3&gt;

&lt;p&gt;If you want to look at the data used for this model you can look at the &lt;a href="https://github.com/cdk-patterns/serverless/tree/master/the-predictive-lambda/typescript/model/training/Chipotle.ipynb" rel="noopener noreferrer"&gt;jupyter notebook&lt;/a&gt;, the raw data came from &lt;a href="https://www.kaggle.com/jeffreybraun/chipotle-locations" rel="noopener noreferrer"&gt;kaggle&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The ML Model
&lt;/h3&gt;

&lt;p&gt;This is a very simple model to demonstrate the concept (I didn't even check the accuracy because it doesn't change the pattern). It uses &lt;a href="https://scikit-learn.org/stable/modules/neighbors.html" rel="noopener noreferrer"&gt;sklearn nearest neighbors&lt;/a&gt; to predict the closest Chipotle location to a given lat/long&lt;/p&gt;

&lt;h3&gt;
  
  
  Two Docker Containers
&lt;/h3&gt;

&lt;p&gt;I use the Lambda image to train the ML model in one container and then I use a separate container for the deployed Lambda Function. The reason I do this is because it means that you know you have pickled your model in the same environment it will be deployed but you can use things that wont be packaged into your deployed function keeping it as lightweight as possible. You will also have a built container image containing the raw data, the training logic and the trained model. These images could be archived to have a history of your model.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Lambda Function
&lt;/h3&gt;

&lt;p&gt;I have this setup with a 15 second timeout and 4GB ram to comfortably run our model&lt;/p&gt;

&lt;h3&gt;
  
  
  An API Gateway HTTP API
&lt;/h3&gt;

&lt;p&gt;Setup as a proxy integration, all requests hit the Lambda Function&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Test This Pattern?
&lt;/h2&gt;

&lt;p&gt;do "npm run deploy" from the base directory and you will have the url for an API Gateway output into the logs or in the CloudFormation console. Open that url in a browser but add "?lat=39.153198&amp;amp;long=-77.066176" to the end and you should get back a prediction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deep Dive WalkThrough
&lt;/h2&gt;

&lt;p&gt;There are 3 separate processes included in this pattern&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A scripted process to train and export a ML model from inside the Lambda Python image for runtime compatibility&lt;/li&gt;
&lt;li&gt;A Dockerfile to take that exported model and use it inside a containerised lambda function&lt;/li&gt;
&lt;li&gt;A CDK implementation to deploy an API Gateway and the above Lambda&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Model Training - Completely Optional
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;I have included a pre-trained model in this pattern so you only need to do this if you want to understand how I did it or you want to try it with your own model.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you look inside the model folder there is a shell script called trainmodel.sh, running this script (making sure you have docker started) will completely retrain the model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;model
./trainmodel.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code in this shell script looks worse than it is&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#Using the named TrainingDockerfile, build this image and tag it as chipotle&lt;/span&gt;
docker build &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; TrainingDockerfile &lt;span class="nt"&gt;-t&lt;/span&gt; chipotle
&lt;span class="c"&gt;#We need the image id, so query docker for an image tagged with chipotle&lt;/span&gt;
&lt;span class="nv"&gt;IMAGE_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;docker images &lt;span class="nt"&gt;-q&lt;/span&gt; chipotle&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;#Start the image as a background process named training&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s1"&gt;'training'&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;IMAGE_ID&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="s1"&gt;'app.handler'&lt;/span&gt;
&lt;span class="c"&gt;#Copy the trained model out of the container&lt;/span&gt;
docker &lt;span class="nb"&gt;cp &lt;/span&gt;training:/var/task/chipotle.pkl chipotle.pkl
&lt;span class="c"&gt;#stop the running instance and delete it&lt;/span&gt;
docker &lt;span class="nb"&gt;kill &lt;/span&gt;training &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker &lt;span class="nb"&gt;rm &lt;/span&gt;training
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The next place to look is TrainingDockerfile&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Use the python lambda image from AWS ECR&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; public.ecr.aws/lambda/python:3.6&lt;/span&gt;
&lt;span class="c"&gt;# Put these 3 files inside the container&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; training/training.py requirements.txt training/chipotle_stores.csv ./&lt;/span&gt;
&lt;span class="c"&gt;# Install python dependencies&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip3 &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;span class="c"&gt;# Run the training logic&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;python3 training.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to look at the data inside chipotle_stores.csv you can look at the &lt;a href="//typescript/model/training/Chipotle.ipynb"&gt;jupyter notebook&lt;/a&gt;, the raw data came from &lt;a href="https://www.kaggle.com/jeffreybraun/chipotle-locations" rel="noopener noreferrer"&gt;kaggle&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The training logic inside training/training.py loads chipotle_stores.csv into Python, cleans it up and then trains/exports a model. The training/export logic is&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#train model
&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;KNeighborsClassifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_neighbors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weights&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;distance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;algorithm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;train_set_no_labels&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;train_set_labels&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#export model
&lt;/span&gt;&lt;span class="n"&gt;joblib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chipotle.pkl&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Containerised Lambda Function
&lt;/h3&gt;

&lt;p&gt;Most of the logic to make this happen is in model/Dockerfile&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; public.ecr.aws/lambda/python:3.6&lt;/span&gt;
&lt;span class="c"&gt;# copy our function logic, requirements and model into the container&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; deployment/app.py requirements.txt chipotle.pkl ./&lt;/span&gt;
&lt;span class="c"&gt;# install the dependencies&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip3 &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;span class="c"&gt;# the lambda handler is located inside app.py as a method called lambdaHandler&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["app.lambdaHandler"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The actual lambda handler code inside deployment/app.py is the same as any other lambda function&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;joblib&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambdaHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;joblib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chipotle.pkl&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;latitude&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;queryStringParameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;lat&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;KeyError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;latitude&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;longitude&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;queryStringParameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;long&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;KeyError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;longitude&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="n"&gt;prediction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="n"&gt;latitude&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;longitude&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
    &lt;span class="n"&gt;prediction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prediction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tolist&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prediction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CDK Infra Logic
&lt;/h3&gt;

&lt;p&gt;The relevant piece of CDK is that instead of the normal way of creating our function, we use lambda.DockerImageFunction and ask CDK to build our container from the model folder&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// defines an AWS Lambda resource&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;predictiveLambda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DockerImageFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PredictiveLambda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DockerImageCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromImageAsset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../model&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="na"&gt;memorySize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>aws</category>
      <category>awscdk</category>
      <category>machinelearning</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Add Voice To Your Serverless Apps with Alexa Through AWS CDK</title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Thu, 22 Oct 2020 13:23:55 +0000</pubDate>
      <link>https://dev.to/cdkpatterns/add-voice-to-your-serverless-apps-with-alexa-through-aws-cdk-45n0</link>
      <guid>https://dev.to/cdkpatterns/add-voice-to-your-serverless-apps-with-alexa-through-aws-cdk-45n0</guid>
      <description>&lt;h2&gt;
  
  
  Introducing "The Alexa Skill" pattern at &lt;a href="https://cdkpatterns.com"&gt;CDK Patterns&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vu664zKz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h1tua03yx35jiwqs9w93.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vu664zKz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h1tua03yx35jiwqs9w93.png" alt="Alexa Skill Arch" width="494" height="92"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a community contribution by Chris Plankey which allows you to deploy an Alexa skill that is backed by a Lambda Function and a DynamoDB table. Out of the box the pattern will hold a short conversation where it will tell you a random selection of pattern names from cdk patterns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Available Versions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/cdk-patterns/serverless/tree/master/the-alexa-skill/typescript"&gt;TypeScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/cdk-patterns/serverless/tree/master/the-alexa-skill/python"&gt;Python&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;//TypeScript
npx cdkp init the-alexa-skill

//Python
npx cdkp init the-alexa-skill &lt;span class="nt"&gt;--lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Unfortunately these steps cannot be skipped or shortened as you need to configure an Amazon developer account and acquire an OAuth 2.0 Refresh token that allows you to deploy your skill using CloudFormation.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Create an &lt;a href="https://developer.amazon.com/"&gt;Amazon Developer account&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Alexa is an Amazon product even though it can be deployed through AWS you still need to have a separate &lt;a href="https://developer.amazon.com/"&gt;Amazon Developer account&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Create a &lt;a href="https://developer.amazon.com/loginwithamazon/console/site/lwa/create-security-profile.html"&gt;Developer Account Security Profile&lt;/a&gt;.
&lt;/h3&gt;

&lt;p&gt;Open the &lt;a href="https://developer.amazon.com/loginwithamazon/console/site/lwa/create-security-profile.html"&gt;Developer Account Security Profile&lt;/a&gt; page and feel free to use whatever values you want for the Security Profile Name and Description. The Privacy Notice URL must be a valid URL format but does not need to be a valid URL. Once you create your security profile, navigate to the &lt;code&gt;Web Settings&lt;/code&gt; tab and add the following as &lt;code&gt;Allowed Return URLs&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://127.0.0.1:9090/cb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://s3.amazonaws.com/ask-cli/response_parser.html&lt;/code&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lETgcJBD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ivpz4wxjnji8ubbcvh94.png" alt="Security Profile" width="880" height="535"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Copy Your &lt;code&gt;Client Id&lt;/code&gt; and &lt;code&gt;Client Secret&lt;/code&gt; from the security profile
&lt;/h3&gt;

&lt;p&gt;Keep these values safe as we will use them in a second.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Make Sure You Have An AWS Account with CLI Access
&lt;/h3&gt;

&lt;p&gt;You will need this to deploy the CDK stack anyway but for the next step we need to associate Alexa with our AWS Account so this is crucial&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Setup ASK CLI on your local machine
&lt;/h3&gt;

&lt;p&gt;Alexa needs to associate your Amazon Developer Account with your AWS Account. The easiest way to do this is to run &lt;code&gt;ask configure&lt;/code&gt; after you have installed the &lt;a href="https://developer.amazon.com/en-US/docs/alexa/smapi/quick-start-alexa-skills-kit-command-line-interface.html"&gt;Alexa Skills Kit CLI&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Generate a Refresh Token
&lt;/h3&gt;

&lt;p&gt;We are going to use Postman to fetch a new &lt;code&gt;OAuth 2.0&lt;/code&gt; token&lt;/p&gt;

&lt;p&gt;Set the following key/values in the request:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Grant Type&lt;/td&gt;
&lt;td&gt;Authorization Code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Callback URL&lt;/td&gt;
&lt;td&gt;&lt;a href="http://127.0.0.1:9090/cb"&gt;http://127.0.0.1:9090/cb&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth URL&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.amazon.com/ap/oa"&gt;https://www.amazon.com/ap/oa&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access Token URL&lt;/td&gt;
&lt;td&gt;&lt;a href="https://api.amazon.com/auth/o2/token"&gt;https://api.amazon.com/auth/o2/token&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client ID&lt;/td&gt;
&lt;td&gt;{YOUR_CLIENT_ID}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client Secret&lt;/td&gt;
&lt;td&gt;{YOUR_CLIENT_SECRET}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;alexa::ask:skills:readwrite alexa::ask:models:readwrite alexa::ask:skills:test alexa::ask:catalogs:read alexa::ask:catalogs:readwrite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iarqmHXg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r8vhycv90f5dd9aizku8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iarqmHXg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r8vhycv90f5dd9aizku8.png" alt="Postman Auth" width="638" height="651"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Pop-Up should show up prompting you to log into your Developer account. Log in and you will be redirected to Postman where you should have a &lt;code&gt;refresh_token&lt;/code&gt; to use in the next steps&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Copy Your Vendor ID
&lt;/h3&gt;

&lt;p&gt;Visit the &lt;a href="https://developer.amazon.com/settings/console/mycid"&gt;Customer Details Page&lt;/a&gt; for your Amazon Developer Account and make a note of your "vendor ID"&lt;/p&gt;

&lt;h2&gt;
  
  
  Before You Deploy
&lt;/h2&gt;

&lt;p&gt;You need to add your ClientID, ClientSecret, Refresh Token and VendorID to the skill resource which can be found in &lt;code&gt;the-alexa-skill/typescript/lib/the-alexa-skill-stack.ts&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      vendorId: 'foo',
      authenticationConfiguration: {
        clientId: 'foo',
        clientSecret: 'bar',
        refreshToken: 'foobar'
      },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;

&lt;p&gt;Since this is a CDK project you can deploy it with the CDK Deploy command&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Test This After Deployment?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the Alexa Developer Console, or follow this link - &lt;a href="https://developer.amazon.com/alexa/console/ask"&gt;https://developer.amazon.com/alexa/console/ask&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;If you see a skill named "CDK Patterns Sample" in your Alexa Skills list then it has successfully been uploaded! Now we just need to test the skill itself.&lt;/li&gt;
&lt;li&gt;Select the CDK Patterns Sample skill by clicking on the name.&lt;/li&gt;
&lt;li&gt;On the next page, select "Test" at the top of the screen. &lt;/li&gt;
&lt;li&gt;Amazon will ask if you'd to use your microphone or not. This is entirely optional as you may test Alexa using either voice commands or  the text box provided.&lt;/li&gt;
&lt;li&gt;Change the "skill testing is enabled in:" option from "Off" to "Development" if needed.&lt;/li&gt;
&lt;li&gt;Either type or say "CDK Patterns" (Case sensitive if typing) and wait for a response.&lt;/li&gt;
&lt;li&gt;The response should be "Hey, it\'s Pancakes the CDK Otter here, what would you like to know?"&lt;/li&gt;
&lt;li&gt;For further testing, either type or say "What patterns do you have?"&lt;/li&gt;
&lt;li&gt;The response should be "I have many patterns for you to see! For example, there is" followed by three pattern names randomly picked from CDK Patterns.&lt;/li&gt;
&lt;li&gt;Now we just need to confirm that it is interacting with DynamoDB correctly.&lt;/li&gt;
&lt;li&gt;Go to the AWS Console and navigate to DynamoDB. Open your tables and find the one corresponding to TheAlexaSkillStack.&lt;/li&gt;
&lt;li&gt;Confirm that one item is in the table (It should have 2 attributes and a UserID). If it does then congratulations! Everything works! &lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>awscdk</category>
      <category>aws</category>
      <category>tutorial</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Add Resiliency To Your Lambda Function with a Circuit Breaker</title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Thu, 15 Oct 2020 09:00:15 +0000</pubDate>
      <link>https://dev.to/cdkpatterns/add-resiliency-to-your-lambda-with-a-circuit-breaker-1na6</link>
      <guid>https://dev.to/cdkpatterns/add-resiliency-to-your-lambda-with-a-circuit-breaker-1na6</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F37blu3o2cf75mhzbit2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F37blu3o2cf75mhzbit2b.png" alt="The Lambda Circuit Breaker"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This pattern takes advantage of the awesome &lt;a href="https://github.com/gunnargrosch/circuitbreaker-lambda" rel="noopener noreferrer"&gt;circuitbreaker-lambda library&lt;/a&gt; from &lt;a href="https://twitter.com/GunnarGrosch" rel="noopener noreferrer"&gt;Gunnar Grosch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;View Codebase:&lt;br&gt;
&lt;a href="https://github.com/cdk-patterns/serverless/tree/master/the-lambda-circuit-breaker" rel="noopener noreferrer"&gt;https://github.com/cdk-patterns/serverless/tree/master/the-lambda-circuit-breaker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To Clone:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;//TypeScript
npx cdkp init the-lambda-circuit-breaker
//Python
npx cdkp init the-lambda-circuit-breaker &lt;span class="nt"&gt;--lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8vb3bdr9sk82bepq2vsc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8vb3bdr9sk82bepq2vsc.png" alt="AWS Well Architected"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://aws.amazon.com/architecture/well-architected/" rel="noopener noreferrer"&gt;AWS Well-Architected&lt;/a&gt; Framework helps you understand the pros and cons of&lt;br&gt;
decisions you make while building systems on AWS. By using the Framework, you will learn architectural best practices for designing and operating reliable, secure, efficient, and cost-effective systems in the cloud. It provides a way for you to consistently measure your architectures against best practices and identify areas for improvement.&lt;/p&gt;

&lt;p&gt;We believe that having well-architected systems greatly increases the likelihood of business success.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://d1.awsstatic.com/whitepapers/architecture/AWS-Serverless-Applications-Lens.pdf" rel="noopener noreferrer"&gt;Serverless Lens Whitepaper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://d0.awsstatic.com/whitepapers/architecture/AWS_Well-Architected_Framework.pdf" rel="noopener noreferrer"&gt;Well Architected Whitepaper&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  The Reliability Pillar
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Note -&lt;/strong&gt; The content for this section is a subset of the &lt;a href="https://d1.awsstatic.com/whitepapers/architecture/AWS-Serverless-Applications-Lens.pdf" rel="noopener noreferrer"&gt;Serverless Lens Whitepaper&lt;/a&gt; with some minor tweaks.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://d1.awsstatic.com/whitepapers/architecture/AWS-Serverless-Applications-Lens.pdf#page=48" rel="noopener noreferrer"&gt;reliability pillar&lt;/a&gt; includes the ability of a system to recover from infrastructure or service disruptions, dynamically acquire computing resources to meet demand, and mitigate disruptions such as misconfigurations or transient network issues.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;REL 2: How are you building resiliency into your serverless application?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Evaluate scaling mechanisms for Serverless and non-Serverless resources to meet customer demand, and build resiliency to withstand partial and intermittent failures across dependencies.&lt;/p&gt;

&lt;p&gt;Best Practices:&lt;/p&gt;

&lt;p&gt;1 / Manage transaction, partial, and intermittent failures: Transaction failures might occur when components are under high load. Partial failures can occur during batch processing, while intermittent failures might occur due to network or other transient issues.&lt;/p&gt;
&lt;h2&gt;
  
  
  What's Included In This Pattern?
&lt;/h2&gt;

&lt;p&gt;This is an implementation of the simple webservice pattern only instead of our Lambda Function using DynamoDB to store and retrieve data for the user it is being used to tell our Lambda Function if the webservice it wants to call is reliable right now or if it should use a fallback function.&lt;/p&gt;

&lt;p&gt;To demonstrate this behaviour the Lambda function has some logic in it to simulate failure. The below logic will randomly fail:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;unreliableFunction&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Success&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Success&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we have a circuitbreaker configured with a fallback mechanism for when it has failed too many times recently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fallbackFunction&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Expensive Fallback Successful&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fallback&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fallbackFunction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;failureThreshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;successThreshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;circuitBreaker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CircuitBreaker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;unreliableFunction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;circuitBreaker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fire&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  When You Would Use This Pattern
&lt;/h2&gt;

&lt;p&gt;When integrating with an external service and you want to provide a cost effective, resilient service for your consumers. If you don't do this and the external service is down you will be paying lambda invocation costs for the full request timeout plus your consumers will be waiting for an ultimately frustrating experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Test This Pattern
&lt;/h2&gt;

&lt;p&gt;After you deploy this pattern you will have a url for an API Gateway where if you open it in a browser you will get a JSON payload back with one of two messages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;circuit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;closed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;unreliable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;worked&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Success"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;circuit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;open&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fallback"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So refresh the browser a few times and you will see the message switch to Fallback then if you open the CloudWatch logs for your Lambda Function as you hit it again you should be able to watch the circuit breaker change state&lt;/p&gt;

&lt;p&gt;You will see messages like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;INFO CircuitBreaker state: OPEN&lt;/li&gt;
&lt;li&gt;INFO CircuitBreaker state: HALF&lt;/li&gt;
&lt;li&gt;INFO CircuitBreaker state: CLOSED&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open means that no requests are going through to the unreliable function, half means that some requests are let through to test the stability of the unreliable function and closed means operating as normal.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>architecture</category>
      <category>awscdk</category>
    </item>
    <item>
      <title>Everything I Learned Creating CDK Day - My First Global, Virtual Conference</title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Mon, 12 Oct 2020 12:52:22 +0000</pubDate>
      <link>https://dev.to/aws-builders/everything-i-learned-creating-cdk-day-my-first-global-virtual-conference-3g7k</link>
      <guid>https://dev.to/aws-builders/everything-i-learned-creating-cdk-day-my-first-global-virtual-conference-3g7k</guid>
      <description>&lt;p&gt;On 30th September 2020 we had our first ever CDK Day! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuf2xiav26xru5fc808pf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuf2xiav26xru5fc808pf.jpg" alt="CDK Day Logo and Speaker images"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Some Numbers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Over 6000 views of the on demand video across Twitch and YouTube in first 7 days&lt;/li&gt;
&lt;li&gt;Over 3000 people signed up to attend&lt;/li&gt;
&lt;li&gt;Over 1000 people watched the live stream&lt;/li&gt;
&lt;li&gt;800 members in the cdk.dev community slack org&lt;/li&gt;
&lt;li&gt;14 Main Talks, a keynote and a panel discussion involving over 17 speakers&lt;/li&gt;
&lt;li&gt;4 Hosts&lt;/li&gt;
&lt;li&gt;One adorable pancake loving otter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;The Viewers:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fz06xoasxvfwupl8ugil6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fz06xoasxvfwupl8ugil6.png" alt="Global Map of Viewers"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;We did have some image and audio quality issues on the day but on the whole I would deem this event a massive success considering it was our first time ever doing anything like this and we had a budget of £0. &lt;/p&gt;

&lt;p&gt;Now that the event has taken place and the recordings are all available to watch (&lt;a href="https://cdkday.com/2020" rel="noopener noreferrer"&gt;https://cdkday.com/2020&lt;/a&gt;) it seemed appropriate to look back on everything on camera and off camera to make this event happen so some of my learnings can hopefully help the next person.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Background
&lt;/h2&gt;

&lt;p&gt;I wrote a &lt;a href="https://dev.to/aws-builders/launching-a-virtual-global-conference-in-two-weeks-through-aws-community-builders-32f1"&gt;previous post&lt;/a&gt; detailing the origin story but let's repeat some key points.&lt;/p&gt;

&lt;p&gt;We have all been in a global lockdown since March, so on 29th July I felt the need to reach out and bring together a community of people interested in the CDK products. Not just AWS CDK but CDK for Terraform and CDK for Kubernetes.&lt;/p&gt;

&lt;p&gt;I sent a quick message (without any planning) to a few of my international friends, I was very excited and basically said "what if we took one day to celebrate everything CDK?". We had a couple of conversations, everyone got very excited and two weeks later we announced CDK Day to the world!&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1293581076980477955-438" src="https://platform.twitter.com/embed/Tweet.html?id=1293581076980477955"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1293581076980477955-438');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1293581076980477955&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Don't See
&lt;/h2&gt;

&lt;p&gt;It is very tempting to look at that situation and think "ok you sent a tweet, so what?" but to get to this point we were launching a product into the marketplace (albeit a free one with the cost being viewers time).&lt;/p&gt;

&lt;p&gt;NB: Everywhere in this article I refer to "we" I refer to the full organising committee (Matt Coulter, Sebastian Korfmann, Matt Bonig, Julia Jacobs, Thorsten Hoeger, Pahud Hsieh, Marek Kuczyński, Philipp Garbe, Anubhav Mishra, Richard Boyd, Elad Ben-Israel, Chris Fife, Sudeepa Prakash, Aaron Schwam, Eric Johnson). It was this group as a whole that made all the decisions.&lt;/p&gt;

&lt;p&gt;Behind the scenes we needed to do a lot of foundational work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) Name the event&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2) Create the logo&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;3) Stand up the social media accounts&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;4) Buy a domain and stand up a website&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Believe it or not 1 and 2 were harder than I expected, you are establishing a brand with an opinion and this opinion mightn't reflect your personal one. My entire background is AWS CDK and to me whether you were using AWS CDK, CDKTF or CDK8s you are reusing AWS software in the &lt;a href="https://github.com/aws/constructs" rel="noopener noreferrer"&gt;constructs programming model&lt;/a&gt;. So I wanted to call the day AWS CDK day, this was a deal breaker from a Terraform CDK perspective because when people read "AWS" and "CDK" beside each other it means the AWS CDK which is not CDKTF or CDK8s.&lt;/p&gt;

&lt;p&gt;We eventually settled on just CDK Day and introduced all of the product names into the logo so it was clear this was everything CDK.&lt;/p&gt;

&lt;p&gt;This decision had wider implications for 4. We could have worked with AWS to run an official AWS Community Day which comes with an out of the box website, branding kit, marketing team etc BUT then the event needed AWS in the name. So this was an absolute deal breaker and we had to turn down this support. That meant I had to use Tailwind and 11ty to rapidly stand up the website from scratch before the tweet could go out... I wasn't even 100% sure what to put on there but something was better than nothing. I wrote a rough blurb to describe our mission statement, then listed who was involved&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmdqyjl19w958v4t22tdp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmdqyjl19w958v4t22tdp.png" alt="Mission Statement"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Feleezm59qt3so6ehuwat.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Feleezm59qt3so6ehuwat.png" alt="some of the people involved"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We then decided that we needed two more things before we could announce:&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;5) A place for people to submit talks&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;6) A way for people to signup&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
I wanted to apply the serverless mindset to this, yes I could have custom built both of these things pretty quickly using CDK Patterns I already had at &lt;a href="https://cdkpatterns.com" rel="noopener noreferrer"&gt;cdkpatterns.com&lt;/a&gt; but remember we had never ran an event like this before so how could we know better than the established tooling out of the gate?&lt;/p&gt;

&lt;p&gt;That is why we settled on eventbrite and sessionize, we may not particularly like eventbrite but it was an established platform with the functionality we needed. So I pulled together these two accounts and got us validated as a non profit event so we weren't charged a penny for their use.&lt;/p&gt;

&lt;p&gt;So we are good to tweet now right?... nope&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;7) Who is our anchor host?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We had four hosts on the day which is amazing but when running an event like this, especially for the first time you need a host that people know/trust and want to listen to for 5 hours. On this one we lucked out that Matthew Bonig was close enough with Eric Johnson to ask him and he said yes!&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;8) Establish a working pattern and cadence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before making a public commitment to run an event like this we needed to establish a model for how we would organise it. Our team was fully international so no time zone was ideal and we definitely couldn't physically meet up (even if it had been pre-covid)&lt;/p&gt;

&lt;p&gt;I didn't want to have a lot of synchronous meetings, they are great for consensus on a decision but given this was a best efforts volunteer only setup we kept to one 30 minute meeting a week. I also did my absolute best to keep that meeting on time. That was brilliant, I enjoyed those meetings but very early on we realised we would also need a collaborative workspace to share stuff.&lt;/p&gt;

&lt;p&gt;In the beginning I created a Google Drive folder which I shared with the group and we were using sheets and docs in there to do this work. The engineers in the group asked if we could use GitHub to track this project instead so Matthew Bonig setup a project for us in his OCF organisation which we used throughout to track items through issues (this worked surprisingly well)&lt;/p&gt;

&lt;p&gt;That's us caught up with everything it took to send that tweet... oh wait:&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;9) How long should we have the CFP? When should it open/close?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We wanted to host this event on a pretty aggressive timeline so that is why we picked 30th September (originally it was the week before, we were super ambitious). &lt;/p&gt;

&lt;p&gt;We had exactly 7 weeks from the announcement tweet to the event which meant that we needed to sort out the speakers as soon as possible so that we could use their talks as the marketing for the event itself and drum up interest. The problem was that since this was a brand new event, closing too soon could be a risk since the best speakers may not hear about us in time. We settled on a two week CFP and agreed as a group that community submissions would come first but if there were content gaps we as an organising committee would step in and deliver a talk to add balance.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;10) What platform would we use for the event?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Where would people go on the day to engage with CDK Day? Lucky for us Eric was an established self streamer so he advised us that we could use his StreamYard account to live stream to Twitter, YouTube and Twitch. We did look at other fully managed platforms but given our limited budget we didn't explore them much further.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;11) How much of the day did we want pre-recorded?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What is it they say? "never work with animals, children and live tech demos". We knew that the format of pre-recorded talks where the presenter engaged in the live chat was catching on but we also wanted some of the day to feel organic. At this point in time we were all for a 100% live event, later as we saw how global our speakers and attendees were we decided to make a recording the default option for shorter sessions and offer it as optional for any session.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;12) What time zone would we broadcast in?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You might assume we just defaulted to USA but we actually used information from the CDK Patterns &lt;a href="https://twitter.com/cdkpatterns" rel="noopener noreferrer"&gt;twitter followers&lt;/a&gt; to work out where the most interest in CDK was. We compromised on East Coast USA since it was in the middle of the red zone (and because our Host lives in Colorado so best compromise).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5fotxhx3qgvmrtk4d4bf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5fotxhx3qgvmrtk4d4bf.png" alt="CDK Patterns followers on a map"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;13) Decide where conversations would happen&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We wanted our audience to feel engaged and that meant we needed to make sure no matter what platform they were using to watch CDK Day that everyone went to the same place to ask questions. Sebastian Korfmann had purchased the cdk.dev domain early into our planning so we just leaned into it and said if we get people there during CDK Day then they can stay there afterwards as the active community. We went through a big Discord vs Slack debate but when people voted Slack was the winner - thus the cdk.dev Slack was born.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;14) Establish and Publish a Code of Conduct&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The thing that can make or break your event for people is how other people treat them. Now that we were going to encourage users across Twitter, Twitch, YouTube and Slack we needed to let everyone know the rules of attendance. We also needed to make clear the consequences for breaking those rules. We needed to establish this early so that speakers wouldn't be put off presenting and attendees wouldn't be put off watching.&lt;/p&gt;

&lt;p&gt;There are some great open source CoCs as a starter for 10 but we needed to define how people were actually going to report violations and when they did how we responded as a team. We decided to setup an email address and have a team of people on the day who would focus on any breaches. We published it on the site at &lt;a href="https://www.cdkday.com/coc/" rel="noopener noreferrer"&gt;https://www.cdkday.com/coc/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The Two Week CFP Window
&lt;/h2&gt;

&lt;p&gt;How It Started:&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1293621573598023683-333" src="https://platform.twitter.com/embed/Tweet.html?id=1293621573598023683"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1293621573598023683-333');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1293621573598023683&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;How It Ended:&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1298858464475779072-353" src="https://platform.twitter.com/embed/Tweet.html?id=1298858464475779072"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1298858464475779072-353');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1298858464475779072&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Don't See
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1) Differing Talk Types&lt;/strong&gt;&lt;br&gt;
After the CFP had opened we realised that we didn't want just 30 minute talks but we also wanted shorter lightning talks, I hadn't accounted for this in the sessionize form so we had to ask the people who had submitted talks to add a comment of lightning(10 mins) vs full(20-25). It is definitely something to ask up front for talk submissions.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;2) Speaker Diversity&lt;/strong&gt;&lt;br&gt;
I wanted to try and get as diverse a group of speakers / talk proposals as possible. We had an impressive array of countries represented but overall diversity was not an area we excelled in.&lt;/p&gt;

&lt;p&gt;I asked various groups if they would retweet the CFP and some were awesome enough to do so like below:&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1295640778966994944-754" src="https://platform.twitter.com/embed/Tweet.html?id=1295640778966994944"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1295640778966994944-754');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1295640778966994944&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I would have loved to have taken a few corporate sponsors to approach individual speakers and pay them to present at the conference. It is one thing if you volunteer your time to speak but it felt wrong to approach individuals and ask them to speak without compensating them. It is like saying I need you but I don't value you.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;3) Marketing&lt;/strong&gt;&lt;br&gt;
We had two awesome AWS employees helping us get official &lt;a href="https://twitter.com/awscloud/status/1311104383833305093" rel="noopener noreferrer"&gt;AWS tweets&lt;/a&gt; promoting the event (shoutout to Aaron Schwam and Sudeepa Prakash) but the CFP was too short and came too soon for them to help us for it.&lt;/p&gt;

&lt;p&gt;This meant that I had to pretty aggressively market the event across various platforms but focused on LinkedIn and Twitter (@cdkday, @cdkpatterns and &lt;a class="mentioned-user" href="https://dev.to/nideveloper"&gt;@nideveloper&lt;/a&gt; accounts). It also helps when you have a few AWS Heroes in your organising committee who have large followings plus I asked a few friends if they could help get the word out too. We were even lucky enough that this event coordinated with AWS Americas Online Summit where Werner Vogels keynote was about CDK and he told people to signup for our event!&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1298196045353148417-975" src="https://platform.twitter.com/embed/Tweet.html?id=1298196045353148417"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1298196045353148417-975');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1298196045353148417&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1293609286933843973-106" src="https://platform.twitter.com/embed/Tweet.html?id=1293609286933843973"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1293609286933843973-106');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1293609286933843973&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1311258558307143682-92" src="https://platform.twitter.com/embed/Tweet.html?id=1311258558307143682"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1311258558307143682-92');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1311258558307143682&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;One thing that helped a lot which I think Aaron started was that we ran a multi stage voting process with the community to pick and name a mascot for CDK Day which turned into &lt;a href="https://twitter.com/cdk_pancakes" rel="noopener noreferrer"&gt;Pancakes the otter&lt;/a&gt;. I think engaging the community on a pre-event activity really brought us together.&lt;/p&gt;

&lt;p&gt;Animal Chosen&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1296567709702983681-471" src="https://platform.twitter.com/embed/Tweet.html?id=1296567709702983681"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1296567709702983681-471');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1296567709702983681&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1297163402683580418-754" src="https://platform.twitter.com/embed/Tweet.html?id=1297163402683580418"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1297163402683580418-754');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1297163402683580418&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Name Decided&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1298642600577179649-506" src="https://platform.twitter.com/embed/Tweet.html?id=1298642600577179649"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1298642600577179649-506');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1298642600577179649&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1299400365503180803-956" src="https://platform.twitter.com/embed/Tweet.html?id=1299400365503180803"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1299400365503180803-956');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1299400365503180803&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Meet Pancakes&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1300086835301974016-803" src="https://platform.twitter.com/embed/Tweet.html?id=1300086835301974016"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1300086835301974016-803');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1300086835301974016&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Picking The Talks
&lt;/h2&gt;

&lt;p&gt;We agreed to use the built in ranking mechanism in sessionize as our main filter. The way this works is that you are asked to rank 3 talks 1,2,3 over and over again until you have compared everything enough to have a confident ranking. You can mark certain talks as a must so they go top and you don't have to vote on it anymore.&lt;/p&gt;

&lt;p&gt;We had quite a few people do this for all of the talks to try and get a fair ranking process.&lt;/p&gt;

&lt;p&gt;Personally I think this tool was super quick to use and very intuitive but I wasn't fully convinced by the outcome. There were talks I ranked first every time that ended up bottom for instance, I spoke to sessionize and they said they are working on the transparency of their ranking process.&lt;/p&gt;

&lt;p&gt;To me this tool is one lens and I wouldn't pick your entire schedule based on its top results.&lt;/p&gt;

&lt;p&gt;We didn't pick speakers based on who they were (i.e. more followers did not give you more points), we knew that we wanted to cover AWS CDK, CDK8s and CDKTF as much as we could in a varied way. We had to turn down some incredible speakers/talks, the quality was so high that I seriously considered if we could run two parallel tracks. The problem was that this was our very first event and we were still learning so the extra responsibility would have broken us. In the future I think we should look at themes and multiple tracks.&lt;/p&gt;

&lt;p&gt;As an aside, for anyone who has never used sessionize before, their inform the speakers functionality works very unnaturally. We had two kinds of talk - lightning and full. I went through and wrote a specific lightning session message then clicked send. Then I picked all the other speakers, changed the message to one for the full session and clicked send. All of the speakers got the full session messaging. Apparently even after clicking send you can modify the message being sent right up until the moment sessionize actually sends it. So if you are sending different inform messages don't send them within a couple of minutes of each other or you could have the same thing happen as me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing The Schedule
&lt;/h2&gt;

&lt;p&gt;We decided early that we were going to run one single five hour track rather than attempting anything more complicated on our first attempt.&lt;/p&gt;

&lt;p&gt;Scheduling this was more complicated than I thought it was going to be. Originally when we set the schedule, nearly everyone was presumed to present live as opposed to pre-recorded. This meant that multiple speakers time zones were in play. The earlier the time zone, if they wanted to present live they were given an earlier slot on the agenda.&lt;/p&gt;

&lt;p&gt;By the time we went live the vast majority of the talks were pre-recorded but that didn't mean we could alter the agenda significantly since we still wanted the speakers to be in their slack channel answering questions.&lt;/p&gt;

&lt;p&gt;Next time I would ask at time of CFP if the speaker wants to go live or pre-record but I don't think that would make the schedule a lot easier. The thing that would help is that I would also ask both their time zone and a time range in their day that works best. You mightn't be able to accommodate the time range but it would be great to know.&lt;/p&gt;

&lt;p&gt;I also planned a 30 minute slot for lunch which on the day was replaced with a panel discussion out of not wanting to cut transmission and drop viewers. There are other platforms I have seen since the event like hopin.to where the broadcast is only one part of the event - you can have multiple tracks with a main stage, random match making and sponsor booths. I think switching to a platform like that would allow better breaks and maintain audience participation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Announcing The Speakers
&lt;/h2&gt;

&lt;p&gt;Rather than announcing all of the speakers at once it seemed like it would build momentum towards the event by announcing them over the course of a couple of weeks. &lt;/p&gt;

&lt;p&gt;I know this is a long scroll but this shows all of the announcement tweets and the date that we announced them. This definitely kept the conversation open in the run up to the event. Different people related to different events and shared within their networks, had we dropped them all at once then topics may have been missed.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1301433096902971392-274" src="https://platform.twitter.com/embed/Tweet.html?id=1301433096902971392"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1301433096902971392-274');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1301433096902971392&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1301499500037578752-400" src="https://platform.twitter.com/embed/Tweet.html?id=1301499500037578752"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1301499500037578752-400');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1301499500037578752&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1301528488986513413-556" src="https://platform.twitter.com/embed/Tweet.html?id=1301528488986513413"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1301528488986513413-556');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1301528488986513413&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1302149293369819138-298" src="https://platform.twitter.com/embed/Tweet.html?id=1302149293369819138"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1302149293369819138-298');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1302149293369819138&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1302870541343260673-457" src="https://platform.twitter.com/embed/Tweet.html?id=1302870541343260673"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1302870541343260673-457');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1302870541343260673&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1302944828205027328-845" src="https://platform.twitter.com/embed/Tweet.html?id=1302944828205027328"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1302944828205027328-845');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1302944828205027328&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1303230440199909376-978" src="https://platform.twitter.com/embed/Tweet.html?id=1303230440199909376"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1303230440199909376-978');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1303230440199909376&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1303602641881182208-282" src="https://platform.twitter.com/embed/Tweet.html?id=1303602641881182208"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1303602641881182208-282');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1303602641881182208&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1303676287786135555-914" src="https://platform.twitter.com/embed/Tweet.html?id=1303676287786135555"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1303676287786135555-914');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1303676287786135555&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1303954637427482624-161" src="https://platform.twitter.com/embed/Tweet.html?id=1303954637427482624"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1303954637427482624-161');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1303954637427482624&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1304394340912058371-507" src="https://platform.twitter.com/embed/Tweet.html?id=1304394340912058371"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1304394340912058371-507');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1304394340912058371&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1304333539484274688-344" src="https://platform.twitter.com/embed/Tweet.html?id=1304333539484274688"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1304333539484274688-344');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1304333539484274688&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1305419721802739713-952" src="https://platform.twitter.com/embed/Tweet.html?id=1305419721802739713"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1305419721802739713-952');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1305419721802739713&amp;amp;theme=dark"
  }



&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1305491737419362304-692" src="https://platform.twitter.com/embed/Tweet.html?id=1305491737419362304"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1305491737419362304-692');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1305491737419362304&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Working With The Speakers
&lt;/h2&gt;

&lt;p&gt;There is a gap between announcing the speakers and the event itself. In this gap when you are a speaker you can be sitting there thinking "I know they announced me... but I haven't heard anything". That is why for any speaker who wasn't in the organising committee I asked that we assign them a mentor. Matthew Bonig, Thorsten Hoeger and Marek Kuczyński were our mentors.&lt;/p&gt;

&lt;p&gt;The purpose of the mentor was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To have a named easy to reach contact for any questions&lt;/li&gt;
&lt;li&gt;To feel valued&lt;/li&gt;
&lt;li&gt;To make collecting recordings easier because one person only had to collect a couple&lt;/li&gt;
&lt;li&gt;If going live to coordinate a trial run on StreamYard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think that this largely worked very well. I had personally already been in contact with all of the speakers so we did have a couple of miscommunications but I was able to step in at those points to smooth things over.&lt;/p&gt;

&lt;p&gt;What I would do differently is that I didn't make it clear where to put the talks up front. As long as Eric had a copy I was happy but what I should have done was provided a location for raw recordings which could then be pre-processed for audio quality etc before being passed onto Eric. &lt;/p&gt;

&lt;p&gt;Ideally I would love to provide a tool to speakers to say "run your recording through this for audio quality checks". I also should have drawn up a set of guidance for the presentations themselves e.g. minimum font size. I think all the speakers did an amazing job, I just think I could have done more to help them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Actual Event
&lt;/h2&gt;

&lt;p&gt;All of this pre-work was for our 5 hour live event. &lt;/p&gt;

&lt;p&gt;In terms of the keynote and the hosting on the day, Matthew Bonig led planning these efforts along with the other hosts and speakers who appeared. It was awesome having someone else to focus on that who was in the middle of it rather than having me helicopter parent so to speak when I wasn't going to be on screen with them. I definitely think having someone focus "on screen" and someone focus "off screen" helps.&lt;/p&gt;

&lt;p&gt;We did have a team of moderators on the day to moderate the comments across Twitter, YouTube and Twitch. Working out how to add moderators on these platforms was again harder than I expected, the easiest method was on YouTube if they commented you could click beside their name and click "make moderator". On Twitch you could find their user if they follow you and do the same. The amount of comments on the various platforms was an absolute firehose, do not underestimate the amount of effort needed to keep on top of this information. There are not only comments on your official streams but people sharing screenshots, quoting and mentioning you across the platforms.&lt;/p&gt;

&lt;p&gt;Whilst I was only on screen for a couple of minutes throughout the day I was backstage with direct chat access to the hosts and speakers all day long. StreamYard was awesome for this.&lt;/p&gt;

&lt;p&gt;Full disclosure most of that five hour event was a blur, it was definitely one of those "measure twice, cut once" situations where everyone had a job to do and they all nailed it.&lt;/p&gt;

&lt;p&gt;Something that really disappointed me about YouTube was that by default auto closed caption generation is turned off. So even though I enabled it after the event, I would have had to manually add captions. It feels like that setting should be on by default so if you setup a new channel make sure you enable the setting.&lt;/p&gt;

&lt;h2&gt;
  
  
  After The Event
&lt;/h2&gt;

&lt;p&gt;We did send out a survey after the event to try and learn from the audience. We used Google Forms for this and we got some good data, this was definitely worthwhile.&lt;/p&gt;

&lt;p&gt;One of the biggest asks of the event was "will this be available to watch after the fact?" and the answer was always "yes, YouTube saves the live stream instantly". That wasn't the optimum solution though. The first step was that for the full day video to have chapters on the video allowing viewers to skip to a talk.&lt;/p&gt;

&lt;p&gt;I now know adding chapters to a YouTube video just involves editing the video description to add the timestamps followed by a description making sure the first one starts: &lt;/p&gt;

&lt;p&gt;00:00 {name of chapter}&lt;br&gt;
10:00 {name of second chapter}&lt;/p&gt;

&lt;p&gt;That is an improvement but what consumers want is for the whole event to be broken up into individual videos. I decided to try the built in YouTube editing tools to do this, they were super awkward and very slow so I switched to iMovie.&lt;/p&gt;

&lt;p&gt;This meant I needed to download the 1080p version of the video, the problem was that YouTube would only let me download it in 720p. Twitch to the rescue, luckily Twitch let me download the 1080p video from there which makes it worth streaming to even if you have no viewers there.&lt;/p&gt;

&lt;p&gt;Then I was able to splinter and upload the individual videos to YouTube at 1080p quality with auto closed captions. I also created the &lt;a href="https://cdkday.com/2020" rel="noopener noreferrer"&gt;CDK Day Rewind&lt;/a&gt; page so that it's easy to watch them all.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Have I Learned?
&lt;/h2&gt;

&lt;p&gt;This event started as a small idea, I thought about getting a few people together to run a couple of talks. What I learned is that running a global, virtual event is a lot more work than just finding the speakers. Next time I would:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spend more than 2 months planning&lt;/li&gt;
&lt;li&gt;Even if the event is free, find sponsors. We did this whole event for free but charity only runs so far.&lt;/li&gt;
&lt;li&gt;Use a virtual event platform like hopin.to&lt;/li&gt;
&lt;li&gt;pre-process recorded videos&lt;/li&gt;
&lt;li&gt;Add session types to the cfp&lt;/li&gt;
&lt;li&gt;Add live vs pre-recorded to the cfp&lt;/li&gt;
&lt;li&gt;Add time zone and preferred time range to cfp&lt;/li&gt;
&lt;li&gt;Auto generated closed captions are ok but I would love to improve by hiring a sign language interpreter for the whole event&lt;/li&gt;
&lt;li&gt;Work with awesome communities like &lt;a href="https://twitter.com/BTPipeline" rel="noopener noreferrer"&gt;Black Tech Pipeline&lt;/a&gt; and &lt;a href="https://twitter.com/DiversifyTechCo" rel="noopener noreferrer"&gt;Diversify Tech&lt;/a&gt; to try and promote the cfp with a more diverse audience&lt;/li&gt;
&lt;li&gt;I think this was an awesome first event but this event needs multiple tracks in the future potentially one per product (AWS CDK, CDKTF and CDK8s). It would allow the event to stay a CDK Day but allow space for developers to learn about or avoid the products they don't use. &lt;/li&gt;
&lt;li&gt;Alternatively to multiple tracks - maybe it rotates product so AWS CDK Day, then CDKTF Day followed by CDK8s Day.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tool Rating
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;StreamYard&lt;/strong&gt; - 7/10&lt;br&gt;
Amazing for multi platform streaming and handling on stage / backstage. Pre-recorded videos seem to be a problem for it though, we had image and audio quality issues&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YouTube&lt;/strong&gt; - 9/10&lt;br&gt;
Did exactly what it is supposed to do and I like how it preserves the live chat from the day separate from post recording comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Twitch&lt;/strong&gt; - 10/10&lt;br&gt;
People reported better image quality here than YouTube&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;eventbrite&lt;/strong&gt; - 6/10&lt;br&gt;
We mostly used this as a method for people to sign up so they got reminders about the event and for us to send out the survey afterwards. I had some reports of users not able to access tickets (lucky they didn't need them), it was also very awkward about logo sizes etc&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sessionize&lt;/strong&gt; - 9/10&lt;br&gt;
Very easy to sign up, free once I explained the event was community based. They handled speaker profiles and talk submissions plus scoring and notifying speakers. It also handled schedule creation and allowed me to put the schedule on the website via a plugin. The only drawback was the talk scoring mechanism wasn't very transparent.&lt;/p&gt;

</description>
      <category>awscdk</category>
      <category>cdkday</category>
      <category>conference</category>
    </item>
    <item>
      <title>Launching A Virtual Global Conference In Two Weeks Through AWS Community Builders</title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Fri, 14 Aug 2020 10:34:26 +0000</pubDate>
      <link>https://dev.to/aws-builders/launching-a-virtual-global-conference-in-two-weeks-through-aws-community-builders-32f1</link>
      <guid>https://dev.to/aws-builders/launching-a-virtual-global-conference-in-two-weeks-through-aws-community-builders-32f1</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yqRCxHI8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n4j0cn8j6xfzdhovx905.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yqRCxHI8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n4j0cn8j6xfzdhovx905.jpg" alt="CDK Day is coming 30th September, sign up now or submit a talk proposal" width="880" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is CDK Day?
&lt;/h2&gt;

&lt;p&gt;Over a year has passed since AWS CDK went GA and it has now grown into a family of products: AWS CDK, CDK8s (Kubernetes) and CDKTF (Terraform).&lt;/p&gt;

&lt;p&gt;A small group of community members from across the globe thought this was something worth celebrating so we are going to take one day and showcase the brightest and best of cdk from across the whole product family. Let's talk serverless, kubernetes and multi cloud all in the same day!&lt;/p&gt;

&lt;p&gt;During the day we plan to mix introduction talks with hands on builders sessions so that everyone can leave having learned something new.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.cdkday.com"&gt;www.cdkday.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Is Organising It?
&lt;/h2&gt;

&lt;p&gt;A global crew of people!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/nideveloper"&gt;Matt Coulter&lt;/a&gt;, &lt;a href="https://twitter.com/skorfmann"&gt;Sebastian Korfmann&lt;/a&gt;, &lt;a href="https://twitter.com/mattbonig"&gt;Matt Bonig&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/juliajacobs/"&gt;Julia Jacobs&lt;/a&gt;, &lt;a href="https://twitter.com/hoegertn"&gt;Thorsten Hoeger&lt;/a&gt;, &lt;a href="https://twitter.com/pahudnet"&gt;Pahud Hsieh&lt;/a&gt;, &lt;a href="https://twitter.com/marekq"&gt;Marek Kuczyński&lt;/a&gt;, &lt;a href="https://twitter.com/build1point0"&gt;Anubhav Mishra&lt;/a&gt;, &lt;a href="https://twitter.com/rchrdbyd"&gt;Richard Boyd&lt;/a&gt;, &lt;a href="https://twitter.com/emeshbi"&gt;Elad Ben-Israel&lt;/a&gt;, &lt;a href="https://twitter.com/ccfife"&gt;Chris Fife&lt;/a&gt;, &lt;a href="https://twitter.com/imsudeepa"&gt;Sudeepa Prakash&lt;/a&gt;, &lt;a href="https://twitter.com/ASchwam"&gt;Aaron Schwam&lt;/a&gt;, &lt;a href="https://twitter.com/edjgeek"&gt;Eric Johnson&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4sfeKSi2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2k64co1rgzsx2997twji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4sfeKSi2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2k64co1rgzsx2997twji.png" alt="Matt Coulter, Sebastian Korfmann and Matt Bonig" width="880" height="1210"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ihhc0hb8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h70wz6q1k18gmrzjzj5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ihhc0hb8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h70wz6q1k18gmrzjzj5l.png" alt="Julia Jacobs, Thorsten Hoeger, Pahud Hsieh and Marek kuczyński" width="880" height="1220"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yzjpvlPO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/agsx3hrcm9nfjrdmp5uo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yzjpvlPO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/agsx3hrcm9nfjrdmp5uo.png" alt="Anubhav Mishra, Richard Boyd, Elad Ben-Israel and Chris Fife" width="880" height="1272"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tYHN1nvZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4bwzik1e58k3k6wy84mp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tYHN1nvZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4bwzik1e58k3k6wy84mp.png" alt="Sudeepa Prakash, Aaron Schwam and Eric Johnson" width="880" height="1371"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How Did It Come About?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LsxFwBQa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q2xjmpvq20405i7ip342.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LsxFwBQa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q2xjmpvq20405i7ip342.png" alt="Alt Text" width="880" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you might have seen, AWS launched a new initiative a couple of weeks ago called AWS Community Builders (ACB) - &lt;a href="https://aws.amazon.com/developer/community/community-builders/"&gt;https://aws.amazon.com/developer/community/community-builders/&lt;/a&gt;. This has a different take than previous initiatives like the AWS Hero program, instead of being hand selected to be included you apply to join providing a link to your technical content. It is not designed to be a limited, exclusive status symbol but is about building a passionate community.&lt;/p&gt;

&lt;p&gt;ACB is designed to provide a common platform for people excited about AWS to meet/communicate with their peers and learn from each other. It fits with a lot of our core values and the application window to join is open now (&lt;a href="https://amazonmr.au1.qualtrics.com/jfe/form/SV_aVP5WTzsHJWX3Vz"&gt;https://amazonmr.au1.qualtrics.com/jfe/form/SV_aVP5WTzsHJWX3Vz&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Werner and myself have similar opinions :)&lt;br&gt;
&lt;/p&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--GLM_ot8g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/563188960394891264/z3-Rh11q_normal.jpeg" alt="Werner Vogels profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Werner Vogels
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="mentioned-user" href="https://dev.to/werner"&gt;@werner&lt;/a&gt;
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      This is exactly why we created the AWS Community Builders Program. If you are passionate about sharing your AWS knowledge and connecting with the &lt;a href="https://twitter.com/hashtag/AWSCommunity"&gt;#AWSCommunity&lt;/a&gt; check out  &lt;a href="https://t.co/yZHdgQLV1a"&gt;aws.amazon.com/blogs/aws/anno…&lt;/a&gt; &lt;a href="https://t.co/Xp0GTRYmVw"&gt;twitter.com/NIDeveloper/st…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      07:27 AM - 04 Aug 2020
    &lt;/div&gt;

      &lt;div class="ltag__twitter-tweet__quote"&gt;
        &lt;div class="ltag__twitter-tweet__quote__header"&gt;
          &lt;span class="ltag__twitter-tweet__quote__header__name"&gt;
            Matt Coulter
          &lt;/span&gt;
          &lt;a class="mentioned-user" href="https://dev.to/nideveloper"&gt;@nideveloper&lt;/a&gt;
        &lt;/div&gt;
        &lt;a class="mentioned-user" href="https://dev.to/werner"&gt;@werner&lt;/a&gt; I have to say, the support I have received from AWS employees over the last six months while I was stepping out into sharing public content for the first time has been sensational! My hope is that through this program I can pass some of that onto the next person #AWSCommunity
      &lt;/div&gt;

    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1290549813440729088" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1290549813440729088" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1290549813440729088" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;I am a member of the dev tools category of the AWS Community Builders program because of my open source work with &lt;a href="https://cdkpatterns.com"&gt;CDK Patterns&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dvALi4Ks--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/k37iunag4m61s2ncdc86.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dvALi4Ks--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/k37iunag4m61s2ncdc86.png" alt="cdk patterns" width="880" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a personal, passion project of mine done in my spare time over the past 7 months, where I have been collecting various different serverless architecture patterns all together in one place using AWS CDK and making them deployable with one command. All the patterns are available in Python and Typescript but recently community contribution has added some C# and Java is on the way. I use Twitter as my main source for updates about these patterns and to date there are nearly 1300 followers with over 500 GitHub stars on the repo.&lt;/p&gt;

&lt;p&gt;Building this project has given me a unique insight into the AWS CDK community over the past year combined with our internal adoption rates, it also has connected me with a lot of AWS Heroes to the point I can sometimes directly message them if I need an opinion.&lt;/p&gt;

&lt;p&gt;When the AWS Community Builders program launched I wondered if it was a good idea to merge the two worlds. I had an option to go all in on the community and make something very public or to just continue like nothing had changed. I decided to test drive the power of a motivated group of individuals passionate about AWS.&lt;/p&gt;

&lt;p&gt;On 29th of July 2020 I sent a message to a few people from the builders program and some AWS Heroes saying:&lt;/p&gt;

&lt;p&gt;"Sorry for the cold message but I had an idea... what would everyone think of having an official CDK Day? We can bring the SMEs in for CDK8s, CDKTF, CDK and plan a full day of talks showcasing what has been built in the past year. We could even have a discussion panel with some of the core team. There’s loads of scope!"&lt;/p&gt;

&lt;p&gt;The conversation escalated very quickly through AWS and through the Builders program - we had two meetings, lots of async communication and exactly two weeks later on 12th August, we announced CDK Day to the world:&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--R8WoWBFO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1292411575698063365/KLq11Ll__normal.png" alt="CDK Day profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        CDK Day
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @cdkday
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Over a year has passed since AWS CDK went GA and it has grown into a family of products (cdktf and cdk8s)&lt;br&gt;&lt;br&gt;We are going to take one day and showcase the brightest and best of CDK from across the whole product family&lt;br&gt;&lt;br&gt;Come join us - &lt;a href="https://t.co/YPetPErV5L"&gt;cdkday.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;a href="https://twitter.com/hashtag/awscdk"&gt;#awscdk&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/awscommunity"&gt;#awscommunity&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      16:12 PM - 12 Aug 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1293581076980477955" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1293581076980477955" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1293581076980477955" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;In those two weeks we had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Brought together 3 product teams (AWS CDK, CDK for Terraform and CDK8s)&lt;/li&gt;
&lt;li&gt;Learned how to live stream an event&lt;/li&gt;
&lt;li&gt;Found an awesome host&lt;/li&gt;
&lt;li&gt;Established a name - more complicated than you would think given CDK and AWS CDK are different products both made by AWS and CDKTF/CDK8s can deploy to Azure/GCP&lt;/li&gt;
&lt;li&gt;Created the branding&lt;/li&gt;
&lt;li&gt;Created/Deployed the website&lt;/li&gt;
&lt;li&gt;Setup sessionize for CFP&lt;/li&gt;
&lt;li&gt;Setup eventbrite for tickets&lt;/li&gt;
&lt;li&gt;Expanded our team&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Have I Learned?
&lt;/h2&gt;

&lt;p&gt;The AWS Community is so awesome - nearly 350 people have signed up to attend less than 36 hours after launch! Everyone retweeted / shared and commented to make the launch a success.&lt;/p&gt;

&lt;p&gt;Everyone I asked if they wanted to be involved immediately said yes and has been fully supportive. This has been an incredible experience to just be part of this group.&lt;/p&gt;

&lt;p&gt;The original group had people from Taiwan, Israel, Germany, Northern Ireland, East/Central/West Coast USA and Canada. We have now expanded to include The Netherlands, so in 2020 it is possible to form an effective global group of individuals which is amazing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I hope that a few people will submit talk proposals- &lt;a href="https://sessionize.com/cdkday"&gt;https://sessionize.com/cdkday&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If not please grab a free ticket and join us on 30th September - &lt;a href="https://www.eventbrite.com/e/cdk-day-tickets-116595156251"&gt;https://www.eventbrite.com/e/cdk-day-tickets-116595156251&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are passionate about AWS please do apply for the Community Builders program, you can see it has significantly helped me - &lt;a href="https://aws.amazon.com/developer/community/community-builders/"&gt;https://aws.amazon.com/developer/community/community-builders/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awscdk</category>
      <category>cloud</category>
      <category>cdkday</category>
    </item>
    <item>
      <title>CDK Patterns on the AWS Architecture Blog</title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Sun, 26 Jul 2020 07:41:17 +0000</pubDate>
      <link>https://dev.to/cdkpatterns/cdk-patterns-on-the-aws-architecture-blog-b85</link>
      <guid>https://dev.to/cdkpatterns/cdk-patterns-on-the-aws-architecture-blog-b85</guid>
      <description>&lt;p&gt;I recently worked with AWS on an article talking about how we use AWS CDK, CDK Patterns and AWS Well Architected within Liberty IT.&lt;/p&gt;

&lt;p&gt;AWS posted it on their Architecture blog:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fq66zosy9izpod8mh9omw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fq66zosy9izpod8mh9omw.png" alt="Arch blog preview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To view the article visit &lt;a href="https://aws.amazon.com/blogs/architecture/liberty-it-adopts-serverless-best-practices-using-aws-cdk/" rel="noopener noreferrer"&gt;this link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cdk</category>
      <category>architecture</category>
      <category>serverless</category>
    </item>
    <item>
      <title>CDK Patterns at 20! Let's Walk Through all 20 Serverless Patterns for AWS</title>
      <dc:creator>Matt Coulter</dc:creator>
      <pubDate>Mon, 20 Jul 2020 15:28:54 +0000</pubDate>
      <link>https://dev.to/cdkpatterns/cdk-patterns-at-20-let-s-walk-through-all-20-serverless-patterns-for-aws-dh</link>
      <guid>https://dev.to/cdkpatterns/cdk-patterns-at-20-let-s-walk-through-all-20-serverless-patterns-for-aws-dh</guid>
      <description>&lt;p&gt;This is a link to the original post under my nideveloper account but I cannot move it yet because multiple sources still actively deep link to that post. I will swap over the content in a couple of weeks but I want visitors to cdkpatterns to find the article:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/nideveloper" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mIs0j92M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--DxTcaqtz--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/344151/981e1051-b576-4a48-955f-3b6bcf891f58.png" alt="nideveloper"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/nideveloper/cdk-patterns-at-20-let-s-walk-through-all-20-serverless-patterns-for-aws-d1n" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;CDK Patterns at 20! Let's Walk Through all 20 Serverless Patterns for AWS&lt;/h2&gt;
      &lt;h3&gt;Matt Coulter ・ Jul 14 '20 ・ 12 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#aws&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#cdk&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#serverless&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>aws</category>
      <category>awscdk</category>
      <category>serverless</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
