<?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>Forem: Jack Goggin</title>
    <description>The latest articles on Forem by Jack Goggin (@jackhenryg).</description>
    <link>https://forem.com/jackhenryg</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%2F1047128%2F76e3ef1c-5734-453c-8b29-6e1337347461.jpeg</url>
      <title>Forem: Jack Goggin</title>
      <link>https://forem.com/jackhenryg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jackhenryg"/>
    <language>en</language>
    <item>
      <title>Product Management: AWS Portfolio website - part 3, going to market and finishing the development life cycle</title>
      <dc:creator>Jack Goggin</dc:creator>
      <pubDate>Thu, 30 Mar 2023 12:23:42 +0000</pubDate>
      <link>https://forem.com/jackhenryg/product-management-aws-portfolio-website-part-3-going-to-market-and-finishing-the-development-life-cycle-3lm4</link>
      <guid>https://forem.com/jackhenryg/product-management-aws-portfolio-website-part-3-going-to-market-and-finishing-the-development-life-cycle-3lm4</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this last blog of the 3 part series I will be detailing how the portfolio website hosted on AWS was 'launched' to 'market' and how you would usually finish a product development life cycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bringing the product to market
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Launch isn't the end of development but rather the beginning of selling" (Chapter 8, Bringing Your Product To Market, The Product Book)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This will be a collaboration between marketing, sales and the Product Manager. The PM's input is for forming strategies, they will know who the product should be aimed at and what the target market will be using, this can be useful guidance for marketing.&lt;/p&gt;

&lt;p&gt;A Product Message should be given to communicate value to customers and the problem it solves. It is very important to understand the customer personas before doing this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"The Personal Portfolio Website is the ultimate solution for anyone seeking to verify Jack's skills in product management and software development. It allows them to validate previous work and see tangible proof of the expertise."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When going-to-market (GTM) it is important to be prepared for every event. Like a server crash (this would be dealt with by AWS, that's a main benefit of the cloud) or marketing targeting the wrong outlets. A go-to-market plan should be developed to prevent this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch Goals: The goal is to launch the product to the target audience (hiring managers) via LinkedIn, achieve high customer adoption rates, and generate buzz around the product.&lt;/li&gt;
&lt;li&gt;Product readiness: It will be ensured that the product is ready for launch by conducting thorough testing to identify and fix any issues and ensure that the product meets the customer's needs and expectations.&lt;/li&gt;
&lt;li&gt;Launch Date: The launch date is set for the first week of February 2023.&lt;/li&gt;
&lt;li&gt;Launch Type: Full Launch - traditional launch method where the website is made public to everyone at once.&lt;/li&gt;
&lt;li&gt;Launch Asset Planning: We will create a series of  blog posts and a social media post via LinkedIn to accompany the product launch.&lt;/li&gt;
&lt;li&gt;Post-Launch: We will monitor the product's performance and customer feedback to identify any areas for improvement and address any issues promptly. We will also continue to promote the product and release updates to keep customers engaged and interested.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  End of the life cycle
&lt;/h2&gt;

&lt;p&gt;At the end of development, the job is not done for the Product Manager. The team should celebrate but we should also assess how things went:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what customers (hiring managers) think of the product&lt;/li&gt;
&lt;li&gt;did we achieve our set success metrics (number of visits to the webpage, % of hiring managers offering jobs)&lt;/li&gt;
&lt;li&gt;was the product easy to use?&lt;/li&gt;
&lt;li&gt;what did the team think of your management and work?&lt;/li&gt;
&lt;li&gt;recommend what the product/team should do next&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Thanks for reading this 3 part series, I'd appreciate any feedback! &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>product</category>
      <category>productmanagement</category>
      <category>aws</category>
    </item>
    <item>
      <title>Product Management: AWS Portfolio website - part 2, strategy and product development</title>
      <dc:creator>Jack Goggin</dc:creator>
      <pubDate>Thu, 30 Mar 2023 10:30:40 +0000</pubDate>
      <link>https://forem.com/jackhenryg/product-management-aws-portfolio-website-part-2-strategy-and-product-development-49ec</link>
      <guid>https://forem.com/jackhenryg/product-management-aws-portfolio-website-part-2-strategy-and-product-development-49ec</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this part 2 of my Product Management series I will discussing the process of bringing the idea to action via strategy and development processes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategy
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Fundamentally, this chapter is about an important PM soft skill—&lt;br&gt;
communication—and how to effectively communicate, discuss, and&lt;br&gt;
finalize the opportunity you’ve found with key stakeholders." (Chapter 5, From Idea to Action, The Product Book)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Two techniques to highlight the vision for your product are an 'imaginary' future internal press release document and a Product Requirements Document (PRD). One to show a high-level desired outcome via potential marketing campaign. The latter to show what needs to be done at a low-level to achieve our goal.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Future press release&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Product Management and Software Development Specialist Launches Impressive Personal Portfolio Website to Showcase Skills to Prospective Employers&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Introducing a revolutionary personal portfolio website that offers tangible proof of expertise in stakeholder management, cloud development, and product focus. Developed by a skilled product manager and software developer, this innovative platform solves the customers' problem of providing verifiable proof of their skills in these areas. By showcasing a range of previous work, including stakeholder engagement strategies, cloud-based development projects, and successful product launches, this website presents an effective and professional solution for those seeking to demonstrate their expertise in the field of product management and software development.&lt;/p&gt;

&lt;p&gt;"As a technical specialist myself, I know firsthand the struggle of validating the skills of potential colleagues. That's why I created this personal portfolio website - to provide a tangible representation of my expertise in web development, AWS cloud and Product Management. I believe this product is the ultimate one-stop-shop for anyone looking to validate my abilities and see how I stand out in today's competitive job market." (Jack, Product Manager for this website)&lt;/p&gt;

&lt;p&gt;"I was struggling to find a way for Jack to prove his effective skills outlined on his resume, but then I discovered this personal portfolio website. It was a game-changer for me - it fits perfectly into my busy life, and it's so easy to use. The website demonstrates all his skills under one roof and provides tangible proof of his excellent work. It has saved me time, effort and money during my usual tough hiring process and I would highly recommend the website to anyone else in the industry." (Allison, customer a example_company1)&lt;/p&gt;

&lt;p&gt;In conclusion, this personal portfolio website is a must-have tool for potential hirers to verify Jack's skills. New customers can easily find the website by following the links provided in Jack's blogs, LinkedIn profile, or by visiting jackgoggin.com directly. Don't miss out on this opportunity to hire a great colleague in today's competitive job market - take action now and contact Jack via his website today!&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Product Requirements Document&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Title: Jack's Personal Portfolio Website hosted on AWS&lt;/p&gt;

&lt;p&gt;Overview:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Personal Portfolio Website is a platform that allows Jack to showcase his skills in product management and software development to potential employers. The website will serve as a central location for Jack to display his previous work and provide tangible proof of his expertise in stakeholder management, cloud development, and product focus.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Objectives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable Jack to showcase his skills in product management and software development to potential employers&lt;/li&gt;
&lt;li&gt;Provide a central location for hiring managers to view tangible proof of Jack's expertise&lt;/li&gt;
&lt;li&gt;Increase the visibility of Jack's work samples to potential employers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Success Metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Number of people who have visited the site&lt;/li&gt;
&lt;li&gt;Number of people who used the contact form to contact Jack&lt;/li&gt;
&lt;li&gt;Number of hiring managers commending the site&lt;/li&gt;
&lt;li&gt;Percentage job offers received after hiring managers use the website&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Timeline/Release Planning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Week 1: Front-end design and development&lt;/li&gt;
&lt;li&gt;Week 2: Back-end development&lt;/li&gt;
&lt;li&gt;Week 3: Infrastructure-as-code development&lt;/li&gt;
&lt;li&gt;Week 4: Blog and website content writing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Personas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product Managers hiring managers&lt;/li&gt;
&lt;li&gt;Software Developer hiring managers&lt;/li&gt;
&lt;li&gt;UX Designers hiring managers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;User Scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sarah, a Product Manager and a potential employer who is impressed with Jack's previous work and offers him a job.&lt;/li&gt;
&lt;li&gt;John, a Software Developer and a recruiter discovers his website and is impressed by his web development skills. He offers him an interview to learn more about his cloud focused abilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Requirements/Features In:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responsive Design&lt;/li&gt;
&lt;li&gt;Work Samples&lt;/li&gt;
&lt;li&gt;Form and Social Media Integration for contact&lt;/li&gt;
&lt;li&gt;Blog outlining the development process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Designs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.figma.com/file/iSGQ6qg5hHOLMgb6Znjw56/AWS-Cloud-Resume-website?node-id=0-1&amp;amp;t=Kx7jJz8taePKIoL3-0"&gt;Early wireframes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q&amp;amp;A:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Q: Who is the target audience for the Personal Portfolio Website?&lt;/li&gt;
&lt;li&gt;A: The target audience is hiring managers for the following jobs - Product Managers, Software Developers, and UX Designers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Development
&lt;/h2&gt;

&lt;p&gt;Now we have an idea that we have validated as being valuable and the opportunity has been effectively conveyed to all our stakeholders, we have to transition into actually bringing that to life as something tangible. &lt;/p&gt;

&lt;p&gt;This involves working with the design team and the engineering team to build your software product. This website was developed by only me, so I was the only person to consult :).&lt;/p&gt;

&lt;p&gt;For design this would involve things like information architecture diagrams to help model and organize data which means engineers can understand the website flow better. Also, developing wireframes which are rough diagrams. Usability testing can also help verify that your customers appreciate the product.&lt;/p&gt;

&lt;p&gt;In terms of engineering, the product manager's job is to oversee the product, make sure it meets requirements, make scope changes if needed, prioritize backlog and eliminate any obstacles for engineers. &lt;/p&gt;

&lt;p&gt;When working with design and engineers it's important to realize that the designer or engineer is the specialist. Let them do their job. Even if you have experience, you shouldn't overstep.&lt;/p&gt;

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

&lt;p&gt;Thanks for reading! Make sure to check out the next and final blog in this 3 part series!&lt;/p&gt;

</description>
      <category>productmanagement</category>
      <category>product</category>
      <category>aws</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Product Management: AWS Portfolio website - part 1, identifying opportunity</title>
      <dc:creator>Jack Goggin</dc:creator>
      <pubDate>Wed, 29 Mar 2023 15:34:09 +0000</pubDate>
      <link>https://forem.com/jackhenryg/product-management-aws-portfolio-website-e5k</link>
      <guid>https://forem.com/jackhenryg/product-management-aws-portfolio-website-e5k</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Welcome to my blog series post where I'll be going back to my Cloud Resume webpage to implement some Product Management tools and techniques. In this blog I will be covering the section of identifying an opportunity.&lt;/p&gt;

&lt;p&gt;The methods shared here I have picked up from &lt;a href="https://www.amazon.co.uk/Product-Book-Become-Great-Manager-ebook/dp/B071HFBGXR"&gt;The Product Book: How to Become a Great Product Manager&lt;/a&gt; by Josh Annon and Carlos Gonzales De Villaumbrosia from Product School and the Udemy course &lt;a href="https://www.udemy.com/course/become-a-product-manager-learn-the-skills-get-a-job/"&gt;Become a Product Manager&lt;/a&gt; by Cole Mercer and Evan Kimbrell.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DwKAp2UX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6cu30gtqc75ixb3pl4mf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DwKAp2UX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6cu30gtqc75ixb3pl4mf.jpg" alt="Image description" width="265" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategically understanding a company
&lt;/h2&gt;

&lt;p&gt;This section is all about defining the company's context such as goals and position in the market. In this case, it's a company of one - me, myself and I. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does the company exist? What is the mission statement? What the vision?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I want to provide something that proves my ability and skills in Product Management and Software Development, so that potential employers can be confident in the potential value I can bring. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the company already building?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The company is already building (built) a portfolio website hosted completely within the AWS Cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What stage is the company at?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Growth stage. I want more people to be aware of my personal brand and the skills that I have. (compared to increasing revenue or satisfying existing customers)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does it do better than competitors?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The company (I) has(ve) skills in software development and is knowledgeable about the technology side of things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5C Framework&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Company = experienced software developer who can create website. Vision is to improve personal brand and provide proof of skills.&lt;/li&gt;
&lt;li&gt;Customers = Hiring managers are likely to use the product to validate experience. In terms of market segments, it could be hiring managers of software developers or product related roles. These could be further segmented into industries or size of companies. They make buying decisions based on amount of experience or location bases.&lt;/li&gt;
&lt;li&gt;Collaborators - this involved AWS to host the website. Education course leaders to help build the product. Etc.&lt;/li&gt;
&lt;li&gt;Competitors - all those people who have also completed the AWS Cloud Resume Challenge and have similar skill sets. Potential competitors are those looking to complete the challenge.&lt;/li&gt;
&lt;li&gt;Climate - tech is start to trend towards cloud and AI. Increasing skills into these areas would be beneficial.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I4-_PfOz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2nl4x47woxt5xyadf65p.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I4-_PfOz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2nl4x47woxt5xyadf65p.jpg" alt="Image description" width="275" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating an opportunity
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Establishing goals and metrics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Company vision - improve skills and prove those skills to potential employers.&lt;/p&gt;

&lt;p&gt;High level goal - develop a side project. This can be achieved by developing a portfolio website, deploying on AWS cloud and advertising to my network.&lt;/p&gt;

&lt;p&gt;Key success metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User Engagement: Measure user engagement by tracking the number of visitors to the website. This could be expanded to average time spent on the platform, amount of users that get in contact. ---&amp;gt; &lt;em&gt;This is an example of a funnel, if the customer was to visit the website but not get in touch this would be an example of leakage and could suggest that the skills demonstrated are not enough or the contact form is too clunky or hard to find etc.&lt;/em&gt; &amp;lt;---&lt;/li&gt;
&lt;li&gt;Feedback: Collect feedback from users through surveys, feedback forms, or direct conversations with mentors. Analyze the feedback to identify areas for improvement and iterate on the product accordingly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Opportunity hypothesis:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Potential employers (user/customer group) have the problem that they have no real proof of my skills in Product Management apart from experience within a software team developing an app product (pain point). The company believes that by developing a product, the portfolio website hosted on the AWS Cloud, and displaying Product Management techniques for creation of the product (proposed solution) we can solve this problem by creating value in the sense of proving the experience and success in this field. We will know this to be true once the Product is successfully deployed to AWS and available to end-users. (key metric/expected outcome). If this is successful, we can capture value through the responses of potential hirers acknowledging the skills, and improvements to be made and value shown (monetization strategy).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k7fzgqS---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x7l29kb74nm3vxqp3yyr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k7fzgqS---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x7l29kb74nm3vxqp3yyr.png" alt="Image description" width="880" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Validating the hypothesis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before rushing head first into this new product (which could cause negative opportunity cost), I want to validate that the idea actually would prove valuable and help achieve my goals - otherwise it would be a big waste of time, effort and money. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Market research&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This can be anything from determine the amount of competition, to where you market niche can be, to the amount of success there is to be had. Here I will do just a short intro.&lt;/p&gt;

&lt;p&gt;According to a survey conducted by Indeed, a job search website, 83% of hiring managers said that they prefer to see personal portfolio projects during the hiring process. Additionally, 75% of hiring managers said that a candidate's personal projects can be as important as their work experience. This proves the value of this opportunity hypothesis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gathering feedback&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This could come in the form of customer interviews, surveys or other project management tools. In this case, it would be wise to gather feedback from my network. For example, I could gather the thoughts of those software developers and product managers about how successful they think this project would be in terms of convincing them of the skills I have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimum Viable Product (MVP)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I could develop a MVP version of the portfolio website. This could be a set of &lt;a href="https://www.figma.com/file/iSGQ6qg5hHOLMgb6Znjw56/AWS-Cloud-Resume-website?node-id=0-1&amp;amp;t=Kx7jJz8taePKIoL3-0"&gt;wireframes like the set I have developed on the tool Figma&lt;/a&gt; or just a simple front-end with HTML. Just the basics that get the idea across but still provide functionality. I could then complete A/B testing, where I test two different versions, with this or just gather feedback to establish the potential value of the product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agile development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The product will also be developed in a agile fashion, where it is iteratively improved on in small sprints. This gives opportunity for change at every step of the way and essentially gives more validation and therefore more value to the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outro
&lt;/h2&gt;

&lt;p&gt;Thanks for reading! Watch out for my next post where I will covering taking the idea to action.&lt;/p&gt;

</description>
      <category>productmanagement</category>
      <category>product</category>
      <category>webdev</category>
      <category>aws</category>
    </item>
    <item>
      <title>My Cloud Resume Challenge</title>
      <dc:creator>Jack Goggin</dc:creator>
      <pubDate>Fri, 17 Mar 2023 15:11:37 +0000</pubDate>
      <link>https://forem.com/jackhenryg/my-cloud-resume-challenge-4e6i</link>
      <guid>https://forem.com/jackhenryg/my-cloud-resume-challenge-4e6i</guid>
      <description>&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;For a quick background on myself, I have a Bsc in Digital &amp;amp; Technology Solutions and ~2 years experience as an apprentice Software Engineer working on a full stack development with a touch of automated testing and containerization. &lt;/p&gt;

&lt;p&gt;So whilst I had the foundation of this challenge with HTML/CSS/JavaScript, databases, servers, Python and more; I didn't have any experience working with Cloud resources. &lt;/p&gt;

&lt;p&gt;So I took it upon myself to get an AWS Cloud Practitioner certification and take on Forrest Brazeal's &lt;a href="https://cloudresumechallenge.dev/" rel="noopener noreferrer"&gt;Cloud Resume Challenge&lt;/a&gt;. Within a couple months I had built a resume website on the AWS cloud, building a configuring service's along the way.&lt;/p&gt;

&lt;p&gt;In a nutshell, the project involved: creating the frontend and then hosting it in S3, Domain registration and DNS configuration, AWS SAM and CloudFormation for building the serverless backend stack; which was comprised of AWS API Gateway + Lambda (Python) + DynamoDB, then finally, continuous integration and deployment using Github Actions. My codebase was stored on Github and I incorporated Unit Tests into my CICD pipeline.&lt;/p&gt;

&lt;p&gt;In the interest of not reinventing the wheel - here's what the finished project's architecture looked like:&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%2F67fbfhxvbbpbnthblieg.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%2F67fbfhxvbbpbnthblieg.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ADVICE
&lt;/h2&gt;

&lt;p&gt;A lifesaver on this project, and one not mentioned in the guides, is to leverage CloudWatch logs for Lambda troubleshooting. Paired with the Postman application, this approach streamlined function testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Front-end - creating the website
&lt;/h2&gt;

&lt;p&gt;I started by create the base webpage itself, finding an online HTML and CSS template - &lt;a href="https://colorlib.com/wp/template/jackson/" rel="noopener noreferrer"&gt;Jackson template by Aigars Silkalns&lt;/a&gt; - which I customized to my needs. &lt;/p&gt;

&lt;p&gt;I then created a S3 bucket to store the files that built my front-end (HTML/CSS/JS etc.) in the AWS cloud. I then secured this store with HTTPS by using AWS CloudFront. &lt;/p&gt;

&lt;p&gt;AWS Cloudfront is a service that uses distributed caches to strategically place copies of the content worldwide. This reduce latency by delivering content from the nearest cache. It also enhances scalability by offloading the origin server, saves bandwidth and ensure more reliable user experience with high availability. This optimizes load balancing and essentially contributes to an overall responsive, scalable and reliable content delivery system. In addition to the perk of adding HTTPS for extra security.&lt;/p&gt;

&lt;p&gt;I then purchased a domain name (jackgoggin.com) via &lt;br&gt;
Amazon Route53, a DNS service used to register and managed domain names. I then used Amazon Certificate Manager to retieve appropriate certificates, SSL/TLS, to encrypt data in transit, ensuring security and to authenticity of my site by registering it with a certificate. This setup ensures secure traffic routing from jackgoggin.com to my CloudFront service, directing to my S3 bucket where the webpage content is retrieved and delivered.&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%2Fcyr324u4vy2yviwisijr.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%2Fcyr324u4vy2yviwisijr.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Useful resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html" rel="noopener noreferrer"&gt;Hosting a static website with S3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/getting-started-cloudfront-overview.html#getting-started-cloudfront-request-certificate" rel="noopener noreferrer"&gt;Static website with CloudFront &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Back-end
&lt;/h2&gt;

&lt;p&gt;This involved creating a counter which tracked how many times my webpage was visited.&lt;/p&gt;

&lt;p&gt;The steps included:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating a database, with DynamoDB (NOSQL database), with a count value which tracked the visitor counter over time&lt;/li&gt;
&lt;li&gt;Create an API Gateway endpoint, essentially a REST GET endpoint that when hit, would call a python function created with AWS Lambda, which would update the counter in the databse&lt;/li&gt;
&lt;li&gt;Ensure the Lambda function had been assigned an appropriate IAM role which allowed permissions to access and edit the DynamoDB table. This role ensures secure and controlled interactions between services, so nothing gets changed in error.&lt;/li&gt;
&lt;li&gt;Enable &lt;a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html" rel="noopener noreferrer"&gt;CORS to allow relaxation of rules&lt;/a&gt; on our endpoint. Enabling CORS (Cross-Origin Resource Sharing) is like opening the gates for secure communication between different websites (or web applications). When CORS is enabled, it allows a web page from one domain to request and receive resources, such as data or images, from another domain.&lt;/li&gt;
&lt;li&gt;Create a JavaScript function that will send a GET request to the our GET endpoint within AWS API Gateway, to update the visitor counter once a user visits the site.&lt;/li&gt;
&lt;/ol&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%2F3w5lcdbkf4t7xmf7r51i.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%2F3w5lcdbkf4t7xmf7r51i.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Useful resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://binaryguy.tech/aws/dynamodb/update-items-in-dynamodb-using-python/" rel="noopener noreferrer"&gt;DynamoDB lambda functions with Python &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html" rel="noopener noreferrer"&gt;Boto3 library &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Testing of Lambda functions
&lt;/h2&gt;

&lt;p&gt;At a high-level you can unit test our Lambda function by simply mocking the DynamoDB database with the Python library &lt;a href="https://pypi.org/project/moto/" rel="noopener noreferrer"&gt;Moto&lt;/a&gt;. Which means you simply create a dummy database within your code and feed this to your Lambda function, which will use that as a database and feed you back an expected JSON response that you can test against. Easy!&lt;/p&gt;

&lt;p&gt;Automated tests play a key role in the world of software development, using scripts and tools to execute changes to our codebase and verify their outcomes. This ensure we don't commit any game-breaking issues into production! This frees up valuable time for developers, allowing them to concentrate on refining features and tackling intricate scenarios. This not only speeds up the development lifecycle but also ensures that our code consistently meets high-quality standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Source control and CI/CD
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;GitHub Actions is a continuous integration and continuous delivery (CI/CD) platform that allows you to automate your build, test, and deployment pipeline. You can create workflows that build and test every pull request to your repository, or deploy merged pull requests to production. - &lt;a href="https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions" rel="noopener noreferrer"&gt;GitHub docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This can be leveraged so that when I make a change to my webpage's core codebase within my IDE and push it to Github, it will automatically update my AWS services as fit. This saves me from having to, for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload file changes to S3 myself&lt;/li&gt;
&lt;li&gt;Change my lambda functions manually&lt;/li&gt;
&lt;li&gt;Refresh new services each time to make sure updates are implemented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To implement this we simply setup a directory in our repos '.github/workflows' and create a &lt;em&gt;INSERT_NAME&lt;/em&gt;.yml file that will define a series of jobs for GitHub to run when a push is made to the respoitory. &lt;/p&gt;

&lt;p&gt;Before doing this, it is required that you setup a role in IAM with access keys that allow GitHub the appropriate permissions to start editing our AWS resources!&lt;/p&gt;

&lt;p&gt;Within this workflow YAML file we are simply going to setup this order of actions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Test our code&lt;/li&gt;
&lt;li&gt;If step 1 was successful, build and manage our infrastructure (still need to implement the SAM file for this step). E.g. upload any infrastructure changes or changes to our lambda function.&lt;/li&gt;
&lt;li&gt;Sync our front-end files with the S3 bucket. E.g. upload an changes to our website. (Also make sure to invalidate the cache of S3 to ensure any changes are properly uploaded.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Useful resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python" rel="noopener noreferrer"&gt;GitHub Python testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=50vzowTPdv0&amp;amp;list=PLEk97Q5Nj5oesA1WNk7DzaUpZUnCsQFVQ&amp;amp;index=16" rel="noopener noreferrer"&gt;Open Up The Cloud series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Infrastructure as Code
&lt;/h2&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%2Fv86a5zvp05zkbxi5dfg0.gif" 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%2Fv86a5zvp05zkbxi5dfg0.gif" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was the hardest part of the project, for me at least, but also the most rewarding in terms of learning and project value. By implementing IaC - instead of clicking around on the AWS console, I can define all I need in one file and simply execute one command to spin it all up or update it. This obviously improves efficiency but also consistency, agility, reusability, tracking and security.&lt;/p&gt;

&lt;p&gt;To achieve this, I used AWS SAM. To use this you will need AWS CLI installed and Docker is another helpful tool - I recommend following Chris' blog linked in the resources below. Then all you need to do is create a 'template.yaml' file in the base of your code and start defining jobs in that file and then execute this with 'sam build --use-container &amp;amp;&amp;amp; sam deploy --guided' (once you have setup SAM with AWS CLI). The SAM file should define all the things we have already discussed like your S3 bucket, bucket policy, CloudFront distribution, Route 53 and DNS, Certificates, DynamoDB Table, Lambda Function and API Gateway.&lt;/p&gt;

&lt;p&gt;Useful resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started.html" rel="noopener noreferrer"&gt;Getting started with SAM (AWS Docs)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/stacystipes/the-cloud-resume-challenge-how-i-fell-in-love-with-sam-2ik3"&gt;Stacy Stipes' blog&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.heyitschris.com/" rel="noopener noreferrer"&gt;Chris' series of blogs about the cloud (one on Lambda and one on DynamoDB)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This project was worth it's weight in gold by allowing me to cementing the skills I had learn from the Cloud Practitioner examination through real life implementation. I highly recommend it to anyone who wants to learn Cloud Development!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jackgoggin.com/" rel="noopener noreferrer"&gt;Final product.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>webdev</category>
      <category>devops</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
