<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Storyteller</title>
	<atom:link href="https://markfreedman.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://markfreedman.com</link>
	<description>Thoughts of pragmatic problem solver and software engineer, Mark Freedman.</description>
	<lastBuildDate>Tue, 11 Mar 2025 10:58:18 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://markfreedman.com/wp-content/uploads/2014/03/cropped-MarkFace1-144x144.jpg</url>
	<title>Storyteller</title>
	<link>https://markfreedman.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>How Vertical AI Agents Are Built</title>
		<link>https://markfreedman.com/how-vertical-ai-agents-are-built/</link>
					<comments>https://markfreedman.com/how-vertical-ai-agents-are-built/#respond</comments>
		
		<dc:creator><![CDATA[Mark Freedman]]></dc:creator>
		<pubDate>Tue, 11 Mar 2025 10:58:16 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://markfreedman.com/?p=4071</guid>

					<description><![CDATA[Now that we’ve explored what Vertical AI Agents are and the tools that power them, let’s dive into how they’re actually built. Unlike generic AI models, designed for broad applications, Vertical AI Agents are tailored for specific industries and optimized for real-world use cases. Building one involves several key steps, from defining its purpose to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Now that we’ve explored what Vertical AI Agents are and the tools that power them, let’s dive into how they’re actually built. Unlike generic AI models, designed for broad applications, Vertical AI Agents are <strong>tailored for specific industries</strong> and <strong>optimized for real-world use cases</strong>. Building one involves several key steps, from defining its purpose to deploying it into an automated workflow.</p>



<h2 class="wp-block-heading"><strong>Defining the Problem and Industry Focus</strong></h2>



<p class="wp-block-paragraph">Before building a Vertical AI Agent, the first step is to <strong>clearly define its purpose</strong>. Unlike general AI, which tries to solve a wide range of problems, a Vertical AI Agent must be <strong>laser-focused on a specific task within an industry</strong>. For example, you wouldn’t build a Vertical AI Agent to write poetry <em>and</em> detect fraudulent transactions. That would be like hiring a famous chef to fix your car.</p>



<h3 class="wp-block-heading"><strong>Key Questions to Ask:</strong></h3>



<ul class="wp-block-list">
<li>What <strong>business function</strong> will this AI automate or improve?</li>



<li>Is there <strong>enough industry-specific data</strong> to train the AI effectively?</li>



<li>Does the AI need to integrate with <strong>existing company workflows</strong>?</li>
</ul>



<h3 class="wp-block-heading"><strong>Example Use Cases:</strong></h3>



<ul class="wp-block-list">
<li><strong>Healthcare:</strong> AI that helps radiologists detect abnormalities in X-rays.</li>



<li><strong>Finance:</strong> AI that flags potentially fraudulent transactions in real-time.</li>



<li><strong>Retail:</strong> AI that predicts which products will sell best in different seasons.</li>
</ul>



<p class="wp-block-paragraph">The better you define the AI’s job upfront, the more useful it’s going to be. No one wants an AI that just makes educated guesses of what to do.</p>



<h2 class="wp-block-heading"><strong>Collecting and Preparing Data</strong></h2>



<p class="wp-block-paragraph">Data is the fuel that powers AI. But unlike broad AI models that use massive general datasets, Vertical AI Agents need <strong>high-quality, industry-specific data</strong> to specialize in their task.</p>



<h3 class="wp-block-heading"><strong>Data Sources for Training</strong></h3>



<ul class="wp-block-list">
<li><strong>Structured Data:</strong> Spreadsheets, databases, transaction logs</li>



<li><strong>Unstructured Data:</strong> Text documents, images, audio recordings</li>



<li><strong>APIs &amp; External Feeds:</strong> Real-time financial data, legal updates, medical records</li>
</ul>



<h3 class="wp-block-heading"><strong>Data Cleaning and Preparation</strong></h3>



<p class="wp-block-paragraph">Before AI can learn from data, it has to go through a serious cleanup. You know the term, <strong>“garbage in, garbage out”</strong>? Well, that’s not just true for junk food and bad reality TV (Survivor is good — don’t fight me on that). AI is the same way. If you train it on messed up, inconsistent data, don’t be surprised when it starts spitting out nonsense.</p>



<p class="wp-block-paragraph">This means <strong>removing duplicates</strong>, <strong>filling in missing info</strong>, and <strong>making sure all the formats match up</strong>. It’s like making soup. If half your ingredients are expired, you wouldn’t just throw everything in and hope for the best, right? AI is the same. It can’t magically fix bad data, so we have to clean it up first.</p>



<p class="wp-block-paragraph">Oh, the soup I make is canned, so there’s that…</p>



<h2 class="wp-block-heading"><strong>Choosing the Right AI Model</strong></h2>



<p class="wp-block-paragraph">Ok, so now we have clean data. Now what? We need to pick the right AI model. Not all models work for all tasks. You wouldn’t use Google Maps to write an essay, right? Well maybe geography essays, but I digress…</p>



<h3 class="wp-block-heading"><strong>Where Different Models Fit in Vertical AI:</strong></h3>



<ul class="wp-block-list">
<li><strong>Large Language Models (LLMs) like GPT-4o, Claude, and Gemini</strong>
<ul class="wp-block-list">
<li>Great for anything text-based (contracts, chatbots, customer emails).</li>



<li><strong>Example:</strong> A legal AI agent reviewing documents might use <strong>Claude</strong>, known for longer context windows, or <strong>GPT-4o</strong>, optimized for fast, accurate responses.</li>
</ul>
</li>



<li><strong>Vision Models like OpenAI’s DALL·E, Google’s Gemini, Stable Diffusion, and even Midjourney</strong>
<ul class="wp-block-list">
<li>Best for image generation and computer vision tasks (medical imaging, quality control in factories). Models like <strong>Midjourney</strong> are mainly used for creative image generation, but could help in design-heavy industries.</li>



<li><strong>Example:</strong> A radiology AI might use <strong>Google’s DeepMind models</strong> for X-ray analysis, while a fashion AI might use <strong>DALL·E</strong> for virtual clothing design.</li>
</ul>
</li>



<li><strong>Custom Models &amp; Fine-Tuned Engines</strong>
<ul class="wp-block-list">
<li>For companies that want something <em>really</em> specific, like an AI that can detect tax fraud but <em>only</em> for restaurants (because yes, that’s a thing).</li>



<li><strong>Example:</strong> A <strong>fraud detection AI</strong> might not use GPT-4o but instead fine-tune a <strong>financial anomaly detection model</strong> on proprietary transaction data.</li>
</ul>
</li>



<li><strong>Hybrid Models (RAG + API Integrations)</strong>
<ul class="wp-block-list">
<li>Sometimes, workflows <strong>mix and match models</strong>. Like a chatbot that pulls live product data using an API. It’s kind of like a Swiss Army knife, but for AI.</li>



<li><strong>Example:</strong> A <strong>customer service chatbot</strong> might use <strong>GPT-4o for conversation</strong>, <strong>RAG to pull knowledge from an internal database</strong>, and <strong>an external API to check inventory in real-time</strong>.</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><strong>Examples of When to Use Model Types?</strong></h3>



<p class="wp-block-paragraph"><em>(As of this writing)</em></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Model Type</strong></th><th><strong>Best Use Case</strong></th><th><strong>Pros</strong></th><th><strong>Cons</strong></th></tr></thead><tbody><tr><td><strong>GPT-4o</strong></td><td>General-purpose AI Agents (chatbots, research assistants)</td><td>Strong reasoning, fast responses, multimodal (text, images, audio)</td><td>Can be costly for high-volume tasks</td></tr><tr><td><strong>Claude (Anthropic)</strong></td><td>Long document analysis (contracts, research papers)</td><td>Handles long-context better than GPT-4o</td><td>Less powerful for complex reasoning</td></tr><tr><td><strong>Gemini (Google DeepMind)</strong></td><td>Image and text AI, integration with Google products</td><td>Multimodal strength, good for web data</td><td>Not as widely adopted as OpenAI</td></tr><tr><td><strong>Fine-Tuned Models</strong></td><td>Industry-specific AI (medical, finance, legal)</td><td>Tailored for a specific job, cheaper to run</td><td>Requires proprietary data and training</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><strong>How to Choose the Right Model for a Vertical AI Agent</strong></h3>



<ul class="wp-block-list">
<li><strong>Define the problem:</strong> Is it text-heavy, image-based, or predictive?</li>



<li><strong>Decide on real-time vs. batch processing:</strong> Does it need instant responses or deep analysis?</li>



<li><strong>Evaluate cost vs. accuracy:</strong> Can a general LLM work, or does it need fine-tuning?</li>



<li><strong>Consider integration needs:</strong> Does it need API access to external data sources?</li>
</ul>



<h3 class="wp-block-heading"><strong>Types of AI Models Used in Vertical AI:</strong></h3>



<ul class="wp-block-list">
<li><strong>Supervised Learning:</strong> When “labeled data” is available, which basically means examples that have both the input and expected output defined. For example, training an AI to identify fraud using past fraud cases. I remember reading about a bank that trained its fraud detection AI on old data, and it kept flagging legit transactions because consumer habits had changed. AI is only as good as the trends it learns from. And, if you’ve ever looked at Twitter (especially “X” ?) trends, you know that’s a terrifying thought.</li>



<li><strong>Unsupervised Learning:</strong> When patterns need to be discovered, like customer segmentation in retail.</li>



<li><strong>Reinforcement Learning:</strong> When AI learns through trial and error. It’s like training a dog — give it a treat (for AI, some more tasty data to chew on) when it gets something right, and it will learn to repeat that behavior.</li>
</ul>



<p class="wp-block-paragraph">Many companies <strong>don’t build AI models from scratch</strong>. Instead, they <strong>fine-tune existing pre-trained models</strong> using their own domain-specific data. APIs and cloud-based AI services can make this process more efficient.</p>



<h2 class="wp-block-heading"><strong>Training the AI Agent</strong></h2>



<p class="wp-block-paragraph">Therefore, training AI means feeding it data and allowing it to learn patterns. This process typically involves:</p>



<ul class="wp-block-list">
<li><strong>Batch Training:</strong> Training the AI in steps to adjust its accuracy.</li>



<li><strong>“Hyperparameter” Tuning:</strong> Tweaking model settings to improve performance. Fancy word… Think of hyperparameter tuning like adjusting settings on a camera. Too much brightness, and the image is washed out. Too little contrast, and details disappear. (I asked my wife about this one. She’s the professional photographer ?). AI training is full of these small adjustments.</li>



<li><strong>Performance Testing:</strong> Checking how well the AI performs on new, previously unseen data.</li>
</ul>



<h3 class="wp-block-heading"><strong>Tools Used in AI Training:</strong></h3>



<ul class="wp-block-list">
<li><strong>TensorFlow / PyTorch:</strong> Open-source AI frameworks for model training.</li>



<li><strong>AutoML Platforms:</strong> Google AutoML, Microsoft Azure ML, Databricks AutoML, and AWS SageMaker for training without extensive coding.</li>



<li><strong>Custom Training Pipelines:</strong> Built-in enterprise AI systems tailored for specific use cases.</li>
</ul>



<p class="wp-block-paragraph">Once the AI reaches a good accuracy level, it’s ready for deployment.</p>



<h2 class="wp-block-heading"><strong>Deploying the AI into a Workflow</strong></h2>



<p class="wp-block-paragraph">A Vertical AI Agent must integrate into a company’s <strong>workflow</strong> and existing tools to be useful.</p>



<h3 class="wp-block-heading"><strong>Ways to Deploy AI Agents:</strong></h3>



<ul class="wp-block-list">
<li><strong>As an API:</strong> AI runs in the cloud and serves results via API calls, like fraud detection as a service.</li>



<li><strong>Embedded in Software:</strong> AI is built into business applications, such as AI-powered chatbots in customer service tools.</li>



<li><strong>Standalone AI Assistants:</strong> AI works as a separate tool, like an AI-powered document reviewer for legal teams.</li>
</ul>



<p class="wp-block-paragraph">By embedding AI into <strong>workflow automation</strong>, businesses can maximize efficiency and create seamless, repeatable AI-driven processes. I find this to be one of the coolest uses of AI. It’s like having a digital assistant that never sleeps (and doesn’t need coffee — thinking of how much money I’d save!).</p>



<p class="wp-block-paragraph">Even for personal tasks, workflow automation can help simplify the more painful tasks we have to perform in life. For example, I’m currently working on automating an existing, documented, manual workflow for preparing tax return breakdowns for my accountant. Look at the date — I better hurry! It’s a bunch of work now, but I can then do this in a fraction of the time starting next year.</p>



<h2 class="wp-block-heading"><strong>Continuous Learning and Optimization</strong></h2>



<p class="wp-block-paragraph">AI isn’t a “set it and forget it” tool. If industries evolve, the AI needs to, also. This means retraining it with <strong>fresh data</strong>, <strong>fine-tuning</strong> its accuracy as new trends emerge, and, of course, making sure humans stay in the loop to catch weird mistakes before they spiral out of control.</p>



<p class="wp-block-paragraph">Companies use workflow automation to keep AI running smoothly. The circle of AI life — using AI to help AI — really not as scary as it sounds. For the foreseeable future, I believe humans will remain the clearinghouse for all AI processes. As long as we don’t forget how to think, you know, with AI doing all that thinking for us these days.</p>



<p class="wp-block-paragraph">AI can update itself constantly, but humans need to sleep, eat, and take vacations. Yes — we <em>need</em> vacations ?. Workflow automation helps AI keep running 24/7 without burning out — unlike us!</p>



<h2 class="wp-block-heading"><strong>Wrapping Up</strong></h2>



<p class="wp-block-paragraph">Building a Vertical AI Agent isn’t just about training a model. It’s about <strong>integrating AI into a specific industry, fine-tuning it with the right data, and making it a seamless part of real-world workflows</strong>.</p>



<p class="wp-block-paragraph">To recap:</p>



<ol class="wp-block-list">
<li><strong>Define the problem</strong> and industry use case.</li>



<li><strong>Gather and clean data</strong> to ensure quality.</li>



<li><strong>Select the right AI model</strong> for the job.</li>



<li><strong>Train the AI</strong> using machine learning techniques.</li>



<li><strong>Deploy AI into a workflow</strong> so it delivers real business value.</li>



<li><strong>Continuously update and improve the AI</strong> to keep it relevant.</li>
</ol>



<p class="wp-block-paragraph">Okay, that was a <em>lot</em> of info. But, if you’ve stuck with me this far, you now know that building a Vertical AI Agent isn’t just about throwing data at an algorithm and hoping for the best. It’s about <strong>giving AI a real job, setting it up with good data, picking the right tools, and making sure it keeps learning</strong>.</p>



<p class="wp-block-paragraph">Next time, we’ll <strong>skip the theory</strong> and look at <strong>real-world AI Agents already making a difference</strong>.</p>



<p class="wp-block-paragraph">Until then, be polite to our future overlords. They’re making a list, and checking it twice…jk</p>
]]></content:encoded>
					
					<wfw:commentRss>https://markfreedman.com/how-vertical-ai-agents-are-built/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The Tools That Power Vertical AI Agents</title>
		<link>https://markfreedman.com/the-tools-that-power-vertical-ai-agents/</link>
					<comments>https://markfreedman.com/the-tools-that-power-vertical-ai-agents/#respond</comments>
		
		<dc:creator><![CDATA[Mark Freedman]]></dc:creator>
		<pubDate>Wed, 05 Mar 2025 14:10:46 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI Agents]]></category>
		<guid isPermaLink="false">https://markfreedman.com/?p=4065</guid>

					<description><![CDATA[So far, we’ve talked about what Vertical AI Agents are and how they learn. But AI doesn’t just train on its own. It needs the right tools to become useful. That’s where&#160;Retrieval-Augmented Generation (RAG),&#160;APIs, and&#160;workflow automation&#160;come in. These technologies help AI learn faster, stay up-to-date, and work efficiently in real-world applications. Just a quick note [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">So far, we’ve talked about what Vertical AI Agents are and how they learn. But AI doesn’t just train on its own. It needs the right tools to become useful. That’s where&nbsp;<strong>Retrieval-Augmented Generation (RAG)</strong>,&nbsp;<strong>APIs</strong>, and&nbsp;<strong>workflow automation</strong>&nbsp;come in. These technologies help AI learn faster, stay up-to-date, and work efficiently in real-world applications.</p>



<p class="wp-block-paragraph"><em>Just a quick note — I’m writing these articles as if the reader may not be familiar with several of these terms, or if they aren’t in the software field. Even if you have this experience, you may pick up something new.</em></p>



<h2 class="wp-block-heading" id="retrieval-augmented-generation-rag-%E2%80%93-ais-research-assistant"><strong>Retrieval-Augmented Generation (RAG) – AI’s Research Assistant</strong></h2>



<p class="wp-block-paragraph">AI is only as good as the data it’s trained on. But what if you need it to understand a company’s intellectual property (IP) or other proprietary information? Also, what happens when the world changes? AI models trained months ago might give outdated answers. This is where&nbsp;<strong>Retrieval-Augmented Generation (RAG)</strong>&nbsp;comes in.</p>



<h3 class="wp-block-heading" id="how-rag-works"><strong>How RAG Works</strong></h3>



<ul class="wp-block-list">
<li>Instead of relying only on pre-trained knowledge, RAG allows AI to&nbsp;<strong>retrieve new information</strong>&nbsp;from external sources (like databases, APIs, or the web) when answering a question.</li>



<li>It’s like an AI that can “Google” things before responding, making sure it has the latest information.</li>
</ul>



<h3 class="wp-block-heading" id="example-of-rag-in-action"><strong>Example of RAG in Action</strong></h3>



<p class="wp-block-paragraph">Imagine a&nbsp;<strong>legal AI assistant</strong>&nbsp;that helps lawyers draft contracts. Laws change all the time, so instead of only using outdated training data, RAG enables the AI to pull the latest regulations from a legal database before generating a response.</p>



<h2 class="wp-block-heading" id="apis-%E2%80%93-ais-building-blocks"><strong>APIs – AI’s Building Blocks</strong></h2>



<p class="wp-block-paragraph">APIs (Application Programming Interfaces) let different systems talk to each other. This is often how developers&nbsp;<strong>integrate</strong>&nbsp;systems with either third-party or other internal services. They’re also like&nbsp;<strong>bridges</strong>&nbsp;that connect AI to external data, tools, and applications.</p>



<h3 class="wp-block-heading" id="why-apis-matter-for-ai"><strong>Why APIs Matter for AI</strong></h3>



<ul class="wp-block-list">
<li><strong>Access to external knowledge:</strong>&nbsp;AI can fetch real-time stock prices, weather updates, medical records, etc. via APIs.</li>



<li><strong>Access to internal systems:</strong>&nbsp;AI can also fetch real-time company data, or integrate with existing internal systems via APIs.</li>



<li><strong>Faster AI development:</strong>&nbsp;Instead of training a new AI model from scratch, developers can use APIs to&nbsp;<strong>access pre-trained AI models</strong>&nbsp;for tasks like speech recognition, image analysis, or language translation. In other words, AI models can make use of other, third-party, AI models as well.</li>



<li><strong>Better integration:</strong>&nbsp;AI doesn’t work in isolation. As hinted at above, APIs allow AI models to be embedded into&nbsp;<strong>apps, websites, and enterprise software.</strong></li>
</ul>



<h3 class="wp-block-heading" id="example-of-apis-in-action"><strong>Example of APIs in Action</strong></h3>



<p class="wp-block-paragraph">Imagine a&nbsp;<strong>customer support chatbot</strong>&nbsp;that helps users troubleshoot problems. Instead of training an AI to recognize every possible issue, it can use APIs to:</p>



<ul class="wp-block-list">
<li>Pull customer data from a database.</li>



<li>Check inventory levels if a replacement is needed.</li>



<li>Retrieve help articles from a company knowledge base.</li>
</ul>



<p class="wp-block-paragraph">This makes the AI&nbsp;<strong>smarter and more useful</strong>&nbsp;without requiring endless retraining.</p>



<h2 class="wp-block-heading" id="workflow-automation-%E2%80%93-ai-that-powers-business-processes"><strong>Workflow Automation – AI That Powers Business Processes</strong></h2>



<p class="wp-block-paragraph">AI models don’t just exist. They need to be&nbsp;<strong>deployed, monitored, updated, and, in many cases, integrated into business workflows</strong>. Vertical AI Agents often play a key role in&nbsp;<strong>workflow automation</strong>, where they help automate&nbsp;<strong>specific, repeatable company functions</strong>. Instead of just acting as isolated models, they become part of an entire automation system that streamlines operations, reduces manual effort, and improves efficiency. Workflow automation helps AI run smoothly without requiring human intervention at every step. This helps free people up to focus on their actual creative and intellectual roles.</p>



<h3 class="wp-block-heading" id="how-workflow-automation-helps-ai-and-businesses"><strong>How Workflow Automation Helps AI and Businesses</strong></h3>



<ul class="wp-block-list">
<li><strong>Data Pipelines:</strong>&nbsp;Automates the process of collecting, cleaning, and feeding new data into AI models.</li>



<li><strong>AI Model Updating:</strong>&nbsp;Instead of retraining manually, workflow automation triggers model updates when new data becomes available.</li>



<li><strong>Real-Time Decision Making:</strong>&nbsp;AI can be integrated into business workflows, automatically acting on new insights.</li>
</ul>



<h3 class="wp-block-heading" id="example-of-workflow-automation-in-action"><strong>Example of Workflow Automation in Action</strong></h3>



<p class="wp-block-paragraph">A&nbsp;<strong>fraud detection AI</strong>&nbsp;at a bank needs to stay updated as criminals and hackers develop new tactics. Workflow automation ensures:</p>



<ul class="wp-block-list">
<li>New fraud cases automatically get added to a training dataset.</li>



<li>The AI model retrains itself periodically.</li>



<li>The AI’s fraud detection logic updates in real-time, reducing false positives.</li>
</ul>



<p class="wp-block-paragraph">Without automation, AI would require constant manual updates, making it inefficient and costly. But beyond updating AI models, workflow automation ensures that Vertical AI Agents can be&nbsp;<strong>embedded into core business processes</strong>; whether that’s automating customer service workflows, optimizing logistics, or improving financial reporting.</p>



<h2 class="wp-block-heading" id="bringing-it-all-together"><strong>Bringing It All Together</strong></h2>



<p class="wp-block-paragraph">So to build a powerful Vertical AI Agent, you don’t just need a well-trained model. You need tools to keep it&nbsp;<strong>smart, connected, and adaptable</strong>:</p>



<ul class="wp-block-list">
<li><strong>RAG keeps AI up-to-date</strong>&nbsp;by retrieving the latest information from internal and external resources.</li>



<li><strong>APIs give AI access to external data and services</strong>&nbsp;for real-time insights and data.</li>



<li><strong>Workflow automation ensures AI keeps improving</strong>&nbsp;without constant manual intervention.</li>
</ul>



<p class="wp-block-paragraph">These technologies transform AI from just a trained model into a&nbsp;<strong>fully functional, continuously learning, and self-improving system.</strong></p>



<p class="wp-block-paragraph">Next time, we’ll cover&nbsp;how&nbsp;<strong>Vertical AI Agents are built</strong>, discussing the steps, tools, and processes involved.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://markfreedman.com/the-tools-that-power-vertical-ai-agents/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How Vertical AI Agents Work</title>
		<link>https://markfreedman.com/how-vertical-ai-agents-work/</link>
					<comments>https://markfreedman.com/how-vertical-ai-agents-work/#respond</comments>
		
		<dc:creator><![CDATA[Mark Freedman]]></dc:creator>
		<pubDate>Sat, 01 Mar 2025 19:12:12 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI Agents]]></category>
		<guid isPermaLink="false">https://markfreedman.com/?p=4060</guid>

					<description><![CDATA[Now that we’ve talked about what Vertical AI Agents are, let’s take a look at how they actually work. These AI agents don’t start out intelligent. They have to be trained, just like people learn skills over time. But instead of sources like teachers and YouTube videos, they learn from data — often a massive [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Now that we’ve talked about what Vertical AI Agents are, let’s take a look at <strong>how they actually work</strong>. These AI agents don’t start out intelligent. They have to be trained, just like people learn skills over time. But instead of sources like teachers and YouTube videos, they learn from <strong>data</strong> — often a massive amount of data. This training makes them really good at one job, whether it’s spotting fraud, assisting doctors, or even recommending new songs.</p>



<p class="wp-block-paragraph"><em>Just a quick note — I’m writing these articles as if the reader may not be familiar with several of these terms, or if they aren’t in the software field. Even if you have this experience, you may pick up something new.</em></p>



<h2 class="wp-block-heading"><strong>Feeding the AI – Where Data Comes From</strong></h2>



<p class="wp-block-paragraph">So before a vertical AI can do its job, it needs information. Imagine trying to play a new video game without ever looking at the rules. You may make some educated guesses based on general knowledge you’ve gained playing games over the years. But you’d really have no idea exactly what to do. AI is the same way; it needs examples to learn from.</p>



<h3 class="wp-block-heading"><strong>Where Does the Data Come From?</strong></h3>



<ul class="wp-block-list">
<li><strong>Healthcare AI:</strong> Medical images, patient records, doctor’s notes</li>



<li><strong>Finance AI:</strong> Transaction logs, fraud reports, stock market trends</li>



<li><strong>Retail AI:</strong> Purchase history, customer behavior, inventory levels</li>
</ul>



<p class="wp-block-paragraph"><strong>Retrieval-Augmented Generation (RAG)</strong> is a method that helps AI find the best and most useful information from huge amounts of data, improving what it learns. We’ll dig into this a bit more in the next article.</p>



<h3 class="wp-block-heading"><strong>Cleaning the Data: Getting Rid of the Mess</strong></h3>



<p class="wp-block-paragraph">AI can’t learn properly if the data is a mess. Garbage in leads to garbage out. Imagine trying to read a book full of spelling mistakes and missing pages. It wouldn’t make sense. That’s why data has to be <strong>cleaned</strong> before AI can use it. Cleaning means:</p>



<ul class="wp-block-list">
<li>Removing <strong>duplicate or useless data</strong></li>



<li>Filling in <strong>missing information</strong></li>



<li>Making sure all data follows the same format</li>
</ul>



<h2 class="wp-block-heading"><strong>Training the AI – Learning from Examples</strong></h2>



<p class="wp-block-paragraph">Once the data is ready, it’s time to teach the AI. There are different ways AI can learn, just like us.</p>



<h3 class="wp-block-heading"><strong>Three Ways AI Learns:</strong></h3>



<ol class="wp-block-list">
<li><strong>Supervised Learning:</strong> The AI is given “labeled data,” meaning it’s told what’s right and wrong. Think of a teacher grading homework and showing students their mistakes.</li>



<li><strong>Unsupervised Learning:</strong> The AI is given data but <strong>not</strong> told what’s right or wrong. Instead, it finds patterns by itself, like a kid sorting Legos into colors without being told how.</li>



<li><strong>Reinforcement Learning:</strong> AI learns by trial and error, like playing a video game and figuring out what works based on scores and rewards.</li>
</ol>



<p class="wp-block-paragraph">AI developers often use <strong>pre-trained AI models</strong> (like using a pre-made cake mix instead of baking from scratch). <strong>APIs</strong> (Application Programming Interface) allow AI to access these models to learn even faster. We’ll talk more about APIs in a future article. They have multiple uses.</p>



<h2 class="wp-block-heading"><strong>Fine-Tuning – Polishing AI’s Knowledge</strong></h2>



<p class="wp-block-paragraph">Training gives AI a good starting point, but it’s not perfect. It needs <strong>fine-tuning</strong> to do its job well. This step is like practicing for a test — learning from mistakes and improving over time.</p>



<h3 class="wp-block-heading"><strong>How AI Gets Fine-Tuned:</strong></h3>



<ul class="wp-block-list">
<li>Adjusting <strong>settings</strong> to improve accuracy (we’ll talk about what these settings are in a future article)</li>



<li>Testing on <strong>new, unseen data</strong></li>



<li>Removing <strong>biases</strong> that could cause unfair results</li>
</ul>



<p class="wp-block-paragraph">Many AI systems keep learning even after they’re deployed. With <strong>workflow automation</strong>, AI models can keep updating themselves without needing to be re-trained from scratch every time new data appears.</p>



<h2 class="wp-block-heading"><strong>Putting AI to Work – Deployment</strong></h2>



<p class="wp-block-paragraph">Once AI is ready, it’s time to put it to use. There are different ways to use an AI system:</p>



<ul class="wp-block-list">
<li><strong>Inside apps or software</strong> (for example, an AI that detects fraud in banking apps)</li>



<li><strong>As an API</strong> (used by a chatbot that helps customer support teams)</li>



<li><strong>Standalone programs</strong> (like a medical AI that scans X-rays for doctors)</li>



<li><strong>Inside existing tools</strong> we use daily (like Slack, WhatsApp, etc.)</li>
</ul>



<h2 class="wp-block-heading"><strong>Continuous Learning – Keeping AI Smart Over Time</strong></h2>



<p class="wp-block-paragraph">Just like we need to keep learning to stay sharp and relevant in our field, AI needs updates too. If an AI is trained on old data, it might make bad or outdated decisions. To remain useful, it must <strong>keep learning from new data.</strong></p>



<h3 class="wp-block-heading"><strong>How AI Stays Up To Date:</strong></h3>



<ul class="wp-block-list">
<li><strong>New training data</strong> helps it stay accurate</li>



<li><strong>Feedback from users</strong> helps it adjust and improve</li>



<li><strong>Error checking</strong> helps fix mistakes and biases</li>
</ul>



<p class="wp-block-paragraph">As with initial training, AI systems can use <strong>Retrieval-Augmented Generation (RAG)</strong> to pull in the latest information whenever they make decisions. This helps them avoid outdated answers and stay fresh.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>What is Inference?</strong></h2>



<p class="wp-block-paragraph">Once AI is trained, it needs to use what it learned to make decisions. This is called <strong>inference.</strong> It’s when AI looks at new input and predicts an answer based on what it was taught.</p>



<ul class="wp-block-list">
<li>Example: A <strong>fraud detection AI</strong> is trained on thousands of real fraud cases. When it sees a <strong>new transaction</strong>, it <strong>infers</strong> whether it looks like fraud or not.</li>



<li>Example: A <strong>medical AI</strong> learns from millions of X-ray images. When it sees a new X-ray, it <strong>infers</strong> if there’s a problem.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Wrapping Up</strong></h2>



<p class="wp-block-paragraph">Vertical AI Agents <strong>don’t start smart. T</strong>hey learn from data, get trained, and keep improving over time. But learning isn’t enough. AI needs tools to help it stay useful. From <strong>Retrieval-Augmented Generation (RAG)</strong> to <strong>APIs and workflow automation</strong>, these technologies help AI work more efficient, stay current, and improve over time. Improving enough to think for itself? Well, that’s a debate for another time.</p>



<p class="wp-block-paragraph">Next time, we’ll dive deeper into <strong>how these tools work</strong> and how they help AI stay accurate, relevant, and powerful.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://markfreedman.com/how-vertical-ai-agents-work/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Introduction to Vertical AI Agents</title>
		<link>https://markfreedman.com/introduction-to-vertical-ai-agents/</link>
					<comments>https://markfreedman.com/introduction-to-vertical-ai-agents/#respond</comments>
		
		<dc:creator><![CDATA[Mark Freedman]]></dc:creator>
		<pubDate>Mon, 24 Feb 2025 12:46:00 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[AI Agents]]></category>
		<guid isPermaLink="false">https://markfreedman.com/?p=4056</guid>

					<description><![CDATA[What is AI, and How Do Vertical AI Agents Fit In? Artificial Intelligence (AI) is impacting up many industries, but not all AI works the same way. Some AI systems act like generalists — they can do a lot of different things but aren’t great at any one job. Jack of all trades; master at [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">What is AI, and How Do Vertical AI Agents Fit In?</h2>



<p class="wp-block-paragraph">Artificial Intelligence (AI) is impacting up many industries, but not all AI works the same way. Some AI systems act like generalists — they can do a lot of different things but aren’t great at any one job. Jack of all trades; master at none. Others are trained specialists so they can excel in one specific area. These are <a href="https://www.superannotate.com/blog/vertical-ai-agents" data-type="link" data-id="https://www.superannotate.com/blog/vertical-ai-agents">Vertical AI Agents</a>.</p>



<p class="wp-block-paragraph"><em>Just a quick note — I’m writing these articles as if the reader may not be familiar with several of these terms, or if they aren’t in the software field. Even if you have this experience, you may pick up something new.</em></p>



<h3 class="wp-block-heading">AI vs. Regular Software</h3>



<p class="wp-block-paragraph">Typical software follows predefined instructions, like a cookbook where every recipe has step-by-step directions. But AI learns from experience by looking at patterns in data and improving its output over time.</p>



<p class="wp-block-paragraph">For example, look at e-commerce recommendation engines like Amazon’s. Instead of following hard-coded rules, it studies what people browse and buy, like a store employee who learns what items to suggest based on what a customer has liked before.</p>



<h3 class="wp-block-heading">Broad AI vs. Narrow AI – &#8220;Swiss Army Knife vs. Precision Tool&#8221;</h3>



<p class="wp-block-paragraph">AI generally falls into two categories:</p>



<ul class="wp-block-list">
<li><strong>General AI</strong> (the Swiss Army knife) can handle a variety of tasks but isn’t deeply specialized in one. Think about Siri, Alexa, or ChatGPT out-of-the-box. They can answer random questions but they aren’t experts in any one subject. But when models like ChatGPT are fine-tuned, they can become more focused, moving closer toward specialized AI.</li>



<li><strong>Narrow AI</strong> (the precision tool) is built for a specific task. For example, an AI designed to detect fraudulent credit card transactions is focused on that task and wouldn’t be useful for answering trivia questions or writing blog post outlines.</li>
</ul>



<h3 class="wp-block-heading">What is a Vertical AI Agent? – &#8220;The AI That Masters a Single Industry&#8221;</h3>



<p class="wp-block-paragraph">A <strong>Vertical AI Agent</strong> is an AI system built to work in <strong>one specific industry</strong> (&#8220;vertical&#8221;). It’s designed to handle tasks within that domain better than a general AI could. For example:</p>



<ul class="wp-block-list">
<li><strong>Healthcare AI</strong> that assists doctors by analyzing medical images for early disease detection.</li>



<li><strong>Finance AI</strong> that monitors transactions to detect fraud before it happens.</li>



<li><strong>Music AI</strong> that helps sound engineers tweak levels for perfectly balanced tracks (something I’ve been using for my music).</li>
</ul>



<p class="wp-block-paragraph">AI agents don’t try to be everything to everyone. Rather, they focus on one field, like a developer who specializes in a single tech stack and eventually becomes an expert.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Other Info</h2>



<p class="wp-block-paragraph"><strong>AI Training and Model Optimization:</strong> AI models don’t start out smart. They need to be trained. The more relevant data they analyze, the better they get. It’s like debugging code — test, refine, reiterate, and optimize until it works correctly.</p>



<p class="wp-block-paragraph"><strong>Why More Data Improves AI Accuracy:</strong> AI works best when trained with diverse, quality (and often high-volumes of) data. The more real examples it can learn from, the better its predictions become. Like as a developer writes more code, they get better at troubleshooting and problem-solving.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">What’s Next?</h2>



<p class="wp-block-paragraph">Now that we know what Vertical AI Agents are, my next article will explain how they’re built. We’ll break down how they gather topic-specific data, train on real-world examples, and get deployed to solve specific problems.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://markfreedman.com/introduction-to-vertical-ai-agents/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Dropbox Cautionary Tale</title>
		<link>https://markfreedman.com/dropbox-cautionary-tale/</link>
					<comments>https://markfreedman.com/dropbox-cautionary-tale/#comments</comments>
		
		<dc:creator><![CDATA[Mark Freedman]]></dc:creator>
		<pubDate>Tue, 03 Nov 2020 19:41:11 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[disaster recovery]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[lesson learned]]></category>
		<guid isPermaLink="false">https://markfreedman.com/?p=3877</guid>

					<description><![CDATA[This is my first post in a long time. You know, pandemic, elections, world falling apart distractions. Will be prepping for my next AWS cert soon. But in the meantime, I have a cautionary tale about Dropbox. I love Dropbox. It has saved me so much time. It&#8217;s the most reliable synchronizing software I&#8217;ve used. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>This is my first post in a long time. You know, pandemic, elections, world falling apart distractions. Will be prepping for my next AWS cert soon. But in the meantime, I have a cautionary tale about Dropbox.</p>
<p>I love Dropbox. It has saved me so much time. It&#8217;s the most reliable synchronizing software I&#8217;ve used. But beware of a fatal flaw I came across last week, which was almost a disaster.</p>
<p>I&#8217;m a backup fanatic. I have four copies of everything locally, and three more copies of everything in cloud services.</p>
<p>But I did not include my Dropbox folder in that set of backups. Because, you know, Dropbox.</p>
<p>On my 8-year-old MacBook Air (my traveling Mac machine), I have my Dropbox folder on an external drive. The internal drive is simply too small. If I restart the system without the drive connected, I properly get a simple warning, and I temporarily disable it. But last week the machine was already booted up, and the drive was connected. While moving things around to clean the room it was in, the drive got disconnected. I was unaware that this happened, so I did not yet reconnect it.</p>
<p>But Dropbox considered that to mean “delete all Dropbox files.”</p>
<p>All my files were disappearing on all the machines where I had Dropbox installed. I mean like five different machines. I noticed this when a development project I was working on started failing. I saw it was due to files disappearing. Panicked, I scrambled to turn off the automatic start setting of Dropbox on each machine and shut it down.</p>
<p>Too late.</p>
<p>But then I remembered I have the 30 day deletion recovery feature on Dropbox, so I desperately tried restoring. Over a million files. The site could not handle it. Spinning cursor. Spinning. Spinning. Canceling, I then tried restoring subfolders piecemeal. Spinning. Spinning. Error message.</p>
<p>I started digging through the site looking for a number to call to ask if I could get a physical hard drive sent to me with all my deleted files. I never found such an option (still don&#8217;t know if that&#8217;s available).</p>
<p>More panic.</p>
<p>Had lunch to take a breath. Then I realized, luckily, because the drive was never reconnected all the files were still on that drive! Saved! It took me several days, but now all my files are restored.</p>
<p>And now my Dropbox folder is part of my regular backup process.</p>
<p>I hope this helps others avoid this situation. We already have enough to worry about these days. Stay safe, everyone.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://markfreedman.com/dropbox-cautionary-tale/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>I Can Help</title>
		<link>https://markfreedman.com/i-can-help/</link>
					<comments>https://markfreedman.com/i-can-help/#respond</comments>
		
		<dc:creator><![CDATA[Mark Freedman]]></dc:creator>
		<pubDate>Wed, 01 Apr 2020 11:30:43 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">http://markfreedman.com/?p=3592</guid>

					<description><![CDATA[Hi, I'm Mark Freedman, a problem solver who uses software to implement pragmatic solutions. I'll work with you on your specific challenges. I'll take the time to learn and understand your business because that's what really matters.]]></description>
										<content:encoded><![CDATA[<div  class="grids-section grids-is-stretch" style="--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:4;--_gs-rows:1"><div class="grids-s-w_i">
<div class="grids-area" style="--_ga-column:1/4;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<p class="wp-block-paragraph">Hi, I&#8217;m Mark Freedman, a problem solver who uses software to implement pragmatic solutions. I&#8217;ll work with you on your specific challenges. I&#8217;ll take the time to learn and understand your business because that&#8217;s what really matters.</p>

</div>

<div class="grids-area" style="--_ga-column:4/5;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<div class="wp-block-image"><figure class="alignleft size-large is-resized"><img decoding="async" src="https://markfreedman.com/wp-content/uploads/2008/06/markface1.jpg" alt="" class="wp-image-93" width="65" height="80"/></figure></div>

</div>
</div></div>

<div  class="grids-section grids-is-advanced" style="--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:12;--_gs-rows:6"><div class="grids-s-w_i">
<div class="grids-area" style="--_ga-column:1/14;--_ga-row:1/8;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)"></div>
</div></div>

<div  class="grids-section grids-is-stretch" style="--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:4;--_gs-rows:1"><div class="grids-s-w_i">
<div class="grids-area" style="--_ga-column:1/2;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<div class="wp-block-image"><figure class="alignleft size-large"><img fetchpriority="high" decoding="async" width="1024" height="678" src="https://markfreedman.com/wp-content/uploads/2020/03/advice-advise-advisor-business-7075-Photo-by-Startup-Stock-Photos-from-Pexels-1024x678.jpg" alt="Photo by Startup Stock Photos from Pexels" class="wp-image-3624" title="Photo by Startup Stock Photos from Pexels" srcset="https://markfreedman.com/wp-content/uploads/2020/03/advice-advise-advisor-business-7075-Photo-by-Startup-Stock-Photos-from-Pexels-1024x678.jpg 1024w, https://markfreedman.com/wp-content/uploads/2020/03/advice-advise-advisor-business-7075-Photo-by-Startup-Stock-Photos-from-Pexels-300x199.jpg 300w, https://markfreedman.com/wp-content/uploads/2020/03/advice-advise-advisor-business-7075-Photo-by-Startup-Stock-Photos-from-Pexels-768x509.jpg 768w, https://markfreedman.com/wp-content/uploads/2020/03/advice-advise-advisor-business-7075-Photo-by-Startup-Stock-Photos-from-Pexels-1536x1017.jpg 1536w, https://markfreedman.com/wp-content/uploads/2020/03/advice-advise-advisor-business-7075-Photo-by-Startup-Stock-Photos-from-Pexels-2048x1356.jpg 2048w, https://markfreedman.com/wp-content/uploads/2020/03/advice-advise-advisor-business-7075-Photo-by-Startup-Stock-Photos-from-Pexels-696x461.jpg 696w, https://markfreedman.com/wp-content/uploads/2020/03/advice-advise-advisor-business-7075-Photo-by-Startup-Stock-Photos-from-Pexels-1068x707.jpg 1068w, https://markfreedman.com/wp-content/uploads/2020/03/advice-advise-advisor-business-7075-Photo-by-Startup-Stock-Photos-from-Pexels-1920x1272.jpg 1920w, https://markfreedman.com/wp-content/uploads/2020/03/advice-advise-advisor-business-7075-Photo-by-Startup-Stock-Photos-from-Pexels-634x420.jpg 634w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></div>

</div>

<div class="grids-area" style="--_ga-column:2/5;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<p class="has-text-align-left wp-block-paragraph">The only way to provide the best value for you and the company is by understanding how you work, and what will make your job easier, better, and more profitable.</p>



<p class="wp-block-paragraph">With that knowledge, we&#8217;ll work together to build solutions, whether it means enhancing existing processes, augmenting it with new tools, or automating those time-eating rote tasks that get in the way of you doing your core job.</p>

</div>
</div></div>

<div  class="grids-section grids-is-stretch" style="--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:4;--_gs-rows:1"><div class="grids-s-w_i">
<div class="grids-area" style="--_ga-column:1/4;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<p class="wp-block-paragraph">I understand language of business and software, and can work closely with management and across teams, observing and gathering process information from people in the trenches. I&#8217;ll also help develop an integration strategy with business partners.</p>

</div>

<div class="grids-area" style="--_ga-column:4/5;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<div class="wp-block-image"><figure class="alignright size-large is-resized"><img decoding="async" src="https://markfreedman.com/wp-content/uploads/2020/03/man-in-white-long-sleeved-shirt-presenting-on-a-laptop-3931446-Photo-by-Andrea-Piacquadio-from-Pexels-1024x683.jpg" alt="Photo by Andrea Piacquadio from Pexels" class="wp-image-3621" width="241" height="161" title="Photo by Andrea Piacquadio from Pexels" srcset="https://markfreedman.com/wp-content/uploads/2020/03/man-in-white-long-sleeved-shirt-presenting-on-a-laptop-3931446-Photo-by-Andrea-Piacquadio-from-Pexels-1024x683.jpg 1024w, https://markfreedman.com/wp-content/uploads/2020/03/man-in-white-long-sleeved-shirt-presenting-on-a-laptop-3931446-Photo-by-Andrea-Piacquadio-from-Pexels-300x200.jpg 300w, https://markfreedman.com/wp-content/uploads/2020/03/man-in-white-long-sleeved-shirt-presenting-on-a-laptop-3931446-Photo-by-Andrea-Piacquadio-from-Pexels-768x512.jpg 768w, https://markfreedman.com/wp-content/uploads/2020/03/man-in-white-long-sleeved-shirt-presenting-on-a-laptop-3931446-Photo-by-Andrea-Piacquadio-from-Pexels-1536x1024.jpg 1536w, https://markfreedman.com/wp-content/uploads/2020/03/man-in-white-long-sleeved-shirt-presenting-on-a-laptop-3931446-Photo-by-Andrea-Piacquadio-from-Pexels-2048x1365.jpg 2048w, https://markfreedman.com/wp-content/uploads/2020/03/man-in-white-long-sleeved-shirt-presenting-on-a-laptop-3931446-Photo-by-Andrea-Piacquadio-from-Pexels-696x464.jpg 696w, https://markfreedman.com/wp-content/uploads/2020/03/man-in-white-long-sleeved-shirt-presenting-on-a-laptop-3931446-Photo-by-Andrea-Piacquadio-from-Pexels-1068x712.jpg 1068w, https://markfreedman.com/wp-content/uploads/2020/03/man-in-white-long-sleeved-shirt-presenting-on-a-laptop-3931446-Photo-by-Andrea-Piacquadio-from-Pexels-1920x1280.jpg 1920w, https://markfreedman.com/wp-content/uploads/2020/03/man-in-white-long-sleeved-shirt-presenting-on-a-laptop-3931446-Photo-by-Andrea-Piacquadio-from-Pexels-630x420.jpg 630w" sizes="(max-width: 241px) 100vw, 241px" /></figure></div>

</div>
</div></div>

<div  class="grids-section grids-is-stretch" style="--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:4;--_gs-rows:1"><div class="grids-s-w_i">
<div class="grids-area" style="--_ga-column:1/2;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<div class="wp-block-image"><figure class="alignleft size-large is-resized"><img loading="lazy" decoding="async" src="https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-pro-3861964-Photo-by-ThisIsEngineering-from-Pexels-683x1024.jpg" alt="Photo by ThisIsEngineering from Pexels" class="wp-image-3623" width="250" height="374" title="Photo by ThisIsEngineering from Pexels" srcset="https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-pro-3861964-Photo-by-ThisIsEngineering-from-Pexels-683x1024.jpg 683w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-pro-3861964-Photo-by-ThisIsEngineering-from-Pexels-200x300.jpg 200w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-pro-3861964-Photo-by-ThisIsEngineering-from-Pexels-768x1151.jpg 768w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-pro-3861964-Photo-by-ThisIsEngineering-from-Pexels-1024x1536.jpg 1024w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-pro-3861964-Photo-by-ThisIsEngineering-from-Pexels-1366x2048.jpg 1366w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-pro-3861964-Photo-by-ThisIsEngineering-from-Pexels-696x1044.jpg 696w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-pro-3861964-Photo-by-ThisIsEngineering-from-Pexels-1068x1601.jpg 1068w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-pro-3861964-Photo-by-ThisIsEngineering-from-Pexels-1920x2879.jpg 1920w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-pro-3861964-Photo-by-ThisIsEngineering-from-Pexels-280x420.jpg 280w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-pro-3861964-Photo-by-ThisIsEngineering-from-Pexels-scaled.jpg 1707w" sizes="auto, (max-width: 250px) 100vw, 250px" /></figure></div>

</div>

<div class="grids-area" style="--_ga-column:2/5;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<p class="wp-block-paragraph">We can learn a lot from each other. I&#8217;ve mentored technical and soft-skills, and look forward to learning from you and your team as well. I&#8217;ve also trained several successful IT executives; some with no prior software experience. Software is such an exciting field because the learning never ends. That&#8217;s why it&#8217;s also a hobby of mine.</p>

</div>
</div></div>

<div  class="grids-section grids-is-stretch" style="--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:2;--_gs-rows:1"><div class="grids-s-w_i">
<div class="grids-area" style="--_ga-column:1/2;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<div class="wp-block-image"><figure class="alignleft size-large"><img loading="lazy" decoding="async" width="1024" height="550" src="https://markfreedman.com/wp-content/uploads/2020/03/abstract-business-code-coder-270348-1024x550.jpg" alt="" class="wp-image-3626" srcset="https://markfreedman.com/wp-content/uploads/2020/03/abstract-business-code-coder-270348-1024x550.jpg 1024w, https://markfreedman.com/wp-content/uploads/2020/03/abstract-business-code-coder-270348-300x161.jpg 300w, https://markfreedman.com/wp-content/uploads/2020/03/abstract-business-code-coder-270348-768x413.jpg 768w, https://markfreedman.com/wp-content/uploads/2020/03/abstract-business-code-coder-270348-1536x826.jpg 1536w, https://markfreedman.com/wp-content/uploads/2020/03/abstract-business-code-coder-270348-696x374.jpg 696w, https://markfreedman.com/wp-content/uploads/2020/03/abstract-business-code-coder-270348-1068x574.jpg 1068w, https://markfreedman.com/wp-content/uploads/2020/03/abstract-business-code-coder-270348-781x420.jpg 781w, https://markfreedman.com/wp-content/uploads/2020/03/abstract-business-code-coder-270348.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>

</div>

<div class="grids-area" style="--_ga-column:2/3;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<p class="wp-block-paragraph">So who am I, and why do I think I could help you?</p>



<p class="wp-block-paragraph">Throughout my career, I&#8217;ve worked in every segment of the software industry. I&#8217;ve been with several startups, and have been a founder of a handful. I&#8217;ve served as engineer, architect, director, consultant, AWS certified DevOp, mentor and leader, often seamlessly switching between those on the same day.</p>



<p class="wp-block-paragraph">As a key cog on several teams, I helped drive tremendous growth by building cutting-edge solutions. I&#8217;ve established process, automation and monitoring systems, diminishing technical debt to improve visibility and prevent potential issues.</p>

</div>
</div></div>

<div  class="grids-section grids-is-stretch" style="--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:2;--_gs-rows:1"><div class="grids-s-w_i">
<div class="grids-area" style="--_ga-column:1/2;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<ul class="wp-block-list"><li>Helped spark 23,000% hyper-growth in one of the fastest growing companies in the northeast US.</li><li>Simplified dev and monitoring systems, with annual savings of $100,000s and 100s of support hours.</li><li>Built batch and real-time billing systems supporting over 200k daily transactions.</li><li>Data model and analytic SaaS systems improving clients’ marketing reach over 40%.</li><li>Through re-engineering, doubled participation on FCCC website, receiving rave reviews.</li><li>Rebooted user groups (an INETA Champion) helping to rejuvenate the NY/NJ/CT development community.</li><li>Led and mentored consulting staff of 20+ developers, doubling profits over several years, leading to annual profits of $500,000 to $1,000,000.</li><li>Invented and developed cutting-edge software development tools and libraries.</li></ul>

</div>

<div class="grids-area" style="--_ga-column:2/3;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<div class="wp-block-image"><figure class="alignright size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-374720-1024x683.jpg" alt="" class="wp-image-3625" srcset="https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-374720-1024x683.jpg 1024w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-374720-300x200.jpg 300w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-374720-768x512.jpg 768w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-374720-1536x1024.jpg 1536w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-374720-2048x1365.jpg 2048w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-374720-696x464.jpg 696w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-374720-1068x712.jpg 1068w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-374720-1920x1280.jpg 1920w, https://markfreedman.com/wp-content/uploads/2020/03/person-using-macbook-374720-630x420.jpg 630w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>

</div>
</div></div>

<div  class="grids-section grids-is-stretch" style="--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:4;--_gs-rows:1"><div class="grids-s-w_i">
<div class="grids-area" style="--_ga-column:1/2;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<div class="wp-block-image"><figure class="alignleft size-large"><img loading="lazy" decoding="async" width="683" height="1024" src="https://markfreedman.com/wp-content/uploads/2020/03/you-got-this-lighted-signage-2740954-Photo-by-Prateek-Katyal-from-Pexels-683x1024.jpg" alt="Photo by Prateek Katyal from Pexels" class="wp-image-3620" title="Photo by Prateek Katyal from Pexels" srcset="https://markfreedman.com/wp-content/uploads/2020/03/you-got-this-lighted-signage-2740954-Photo-by-Prateek-Katyal-from-Pexels-683x1024.jpg 683w, https://markfreedman.com/wp-content/uploads/2020/03/you-got-this-lighted-signage-2740954-Photo-by-Prateek-Katyal-from-Pexels-200x300.jpg 200w, https://markfreedman.com/wp-content/uploads/2020/03/you-got-this-lighted-signage-2740954-Photo-by-Prateek-Katyal-from-Pexels-768x1152.jpg 768w, https://markfreedman.com/wp-content/uploads/2020/03/you-got-this-lighted-signage-2740954-Photo-by-Prateek-Katyal-from-Pexels-1024x1536.jpg 1024w, https://markfreedman.com/wp-content/uploads/2020/03/you-got-this-lighted-signage-2740954-Photo-by-Prateek-Katyal-from-Pexels-1365x2048.jpg 1365w, https://markfreedman.com/wp-content/uploads/2020/03/you-got-this-lighted-signage-2740954-Photo-by-Prateek-Katyal-from-Pexels-696x1044.jpg 696w, https://markfreedman.com/wp-content/uploads/2020/03/you-got-this-lighted-signage-2740954-Photo-by-Prateek-Katyal-from-Pexels-1068x1602.jpg 1068w, https://markfreedman.com/wp-content/uploads/2020/03/you-got-this-lighted-signage-2740954-Photo-by-Prateek-Katyal-from-Pexels-1920x2880.jpg 1920w, https://markfreedman.com/wp-content/uploads/2020/03/you-got-this-lighted-signage-2740954-Photo-by-Prateek-Katyal-from-Pexels-280x420.jpg 280w, https://markfreedman.com/wp-content/uploads/2020/03/you-got-this-lighted-signage-2740954-Photo-by-Prateek-Katyal-from-Pexels-scaled.jpg 1707w" sizes="auto, (max-width: 683px) 100vw, 683px" /></figure></div>

</div>

<div class="grids-area" style="--_ga-column:2/5;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<p class="wp-block-paragraph">As a consultant or as an employee, I&#8217;ve always considered myself part of my clients&#8217; and employers&#8217; team. I care about your success. And I want to make your job easier and more productive.</p>



<p class="wp-block-paragraph">I can help you and your team. So, let&#8217;s talk.</p>



<p class="wp-block-paragraph">You can reach me using the contact information on <a href="http://markfreedman.com/wp-content/uploads/MarkFreedmanResume.pdf" target="_blank" rel="noreferrer noopener">my résumé</a>.</p>

</div>
</div></div>

<div  class="grids-section grids-is-stretch" style="--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:1;--_gs-rows:1"><div class="grids-s-w_i">
<div class="grids-area" style="--_ga-column:1/2;--_ga-row:1/2;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<h2 class="wp-block-heading">Testimonials</h2>


<div  class="grids-section grids-is-stretch" style="--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:4;--_gs-rows:1"><div class="grids-s-w_i">
<div class="grids-area" style="--_ga-column:1/4;--_ga-row:1/2;--_ga-va:center;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<div style="font-size: 11px;"><em>&#8220;…a software developer’s developer…patient and understanding…&#8221;</em> &#8211; Damien Spivak, Architect / Lead Developer, LiftEngine <br /><em>&#8220;…works very well with individuals or groups…&#8221;</em> &#8211; Sonny Saunders, Co-Founder, DPI-SIG <br /><em>&#8220;…passionate, fun, kind…dedicated to seeing through whatever he starts…&#8221;</em> &#8211; Nick Ventresca, Sr. VP and CIO, ARIAD Pharmaceuticals, Inc. <br /><em>&#8220;…dependable, smart, and has a strong work ethic…team oriented…&#8221;</em> &#8211; Louis Edouard, Leader of Infrastructure Services &amp; Security, EDR <br /><em>&#8220;…phenomenal influence, mentor and teacher…passionate about technology…&#8221;</em> &#8211; Vikram Karumbaiah, Technical Specialist, Affinion Group <br /><em>&#8220;…great leader…accomplished software developer…proven track record…&#8221;</em> &#8211; Joe Somma, Founder and Software Engineer, Millentek, LLC <br /><em>&#8220;…focused thought leader and great mentor…well respected by peers…&#8221;</em> &#8211; Terry Harris, Integration and Simplification Leader, GE Capital <br /><em>&#8220;…passionate and talented…extremely positive influence in my career…&#8221;</em> &#8211; John Zablocki, Senior Director of Engineering, HealthcareSource <br /><em>&#8220;…motivational leader…proactively manage change…&#8221;</em> &#8211; Gina Carey, CEO &amp; Founder, Carey CFO Services <br /><em>&#8220;…one of the best managers I have ever worked for…a born leader…&#8221;</em> &#8211; Kenneth Benoit, Senior Software Developer, State Of Connecticut Judicial Branch <br /><em>&#8220;…took time to truly understand…focus, attention, knowledge and skills…&#8221;</em> &#8211; Bonnie Andrelski, Regional Activation &amp; Support Lead-AMS, Unilever <br /><em>&#8220;…detail-oriented…ethical and sincere…leads by example…&#8221;</em> &#8211; Pat Chipdey, Manager &#8211; Systems Development, Weeden &amp; Co.</div>

</div>

<div class="grids-area" style="--_ga-column:4/5;--_ga-row:1/2;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)">

<div class="wp-block-image"><figure class="alignright size-large is-resized"><img loading="lazy" decoding="async" src="https://markfreedman.com/wp-content/uploads/2016/05/team-523239_1280-1024x768.jpg" alt="" class="wp-image-2983" width="245" height="184" srcset="https://markfreedman.com/wp-content/uploads/2016/05/team-523239_1280-1024x768.jpg 1024w, https://markfreedman.com/wp-content/uploads/2016/05/team-523239_1280-300x225.jpg 300w, https://markfreedman.com/wp-content/uploads/2016/05/team-523239_1280-768x576.jpg 768w, https://markfreedman.com/wp-content/uploads/2016/05/team-523239_1280-696x522.jpg 696w, https://markfreedman.com/wp-content/uploads/2016/05/team-523239_1280-1068x801.jpg 1068w, https://markfreedman.com/wp-content/uploads/2016/05/team-523239_1280-1080x810.jpg 1080w, https://markfreedman.com/wp-content/uploads/2016/05/team-523239_1280.jpg 1280w" sizes="auto, (max-width: 245px) 100vw, 245px" /></figure></div>

</div>
</div></div>
</div>
</div></div>]]></content:encoded>
					
					<wfw:commentRss>https://markfreedman.com/i-can-help/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AWS Living Tip Sheet: SAM</title>
		<link>https://markfreedman.com/aws-living-tip-sheet-sam/</link>
					<comments>https://markfreedman.com/aws-living-tip-sheet-sam/#respond</comments>
		
		<dc:creator><![CDATA[Mark Freedman]]></dc:creator>
		<pubDate>Wed, 29 Jan 2020 16:39:29 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[cloudformation]]></category>
		<category><![CDATA[tips]]></category>
		<guid isPermaLink="false">http://markfreedman.com/?p=3301</guid>

					<description><![CDATA[The AWS Serverless Application Model (SAM) is a CloudFormation transformation macro used to ease the creation of serverless applications. We can think of it as a lightweight CloudFormation template with the core purpose of creating serverless infrastructure as code.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Last updated: 2020-02-02</em></p>



<p class="wp-block-paragraph">I will be posting tip sheets on a regular basis. These are called &#8220;living&#8221; tip sheets because they could be updated frequently, as I learn more.</p>



<p class="wp-block-paragraph">The <a href="https://aws.amazon.com/serverless/sam/" target="_blank" rel="noreferrer noopener" aria-label="AWS Serverless Application Model (SAM&lt;&quot;span&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;span&quot;&gt;) (opens in a new tab)">AWS Serverless Application Model (SAM) <i class="wp-svg-new-tab new-tab"></i></a> is a <a href="https://aws.amazon.com/cloudformation/" target="_blank" rel="noreferrer noopener" aria-label="CloudFormation &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)">CloudFormation <i class="wp-svg-new-tab new-tab"></i></a> transformation macro used to ease the creation of <a href="https://aws.amazon.com/serverless/" target="_blank" rel="noreferrer noopener" aria-label="serverless &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)">serverless <i class="wp-svg-new-tab new-tab"></i></a> applications. We can think of it as a lightweight CloudFormation template with the core purpose of creating serverless infrastructure as code.</p>



<p class="wp-block-paragraph">The documentation format of each attribute below is: <strong>Name</strong> &#8211; (<strong>YAML indentation level</strong>) <strong>Explanation</strong></p>



<ul class="wp-block-list"><li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/format-version-structure.html" target="_blank" rel="noreferrer noopener" aria-label="AWSTemplateFormatVersion&lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)"><strong><code>AWSTemplateFormatVersion</code></strong><i class="wp-svg-new-tab new-tab"></i></a> (1) This is the version of the CloudFormation template we&#8217;re writing for. AWS versions are normally in the format of a date (YYYY-MM-DD).</li><li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-section-structure.html" target="_blank" rel="noreferrer noopener" aria-label="Transform &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)"><strong><code>Transform</code></strong> <i class="wp-svg-new-tab new-tab"></i></a> (1) This is used to specify what CloudFormation <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html" target="_blank" rel="noreferrer noopener" aria-label="macros &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)">macros <i class="wp-svg-new-tab new-tab"></i></a> (and, optionally, macro version) we are using. The macro for transforming this template from SAM into CloudFormation is <code>AWS::Serverless-2016-10-31</code>. In this example, <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html" target="_blank" rel="noreferrer noopener" aria-label="AWS::Serverless&lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)"><code>AWS::Serverless</code><i class="wp-svg-new-tab new-tab"></i></a> is the macro we&#8217;re using (Serverless; that is SAM), and <code>2016-10-31</code> is the version. AWS versions are normally in the format of a date (YYYY-MM-DD). Resource names (like macros) are delimited by a double colon (::).</li><li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-description-structure.html" target="_blank" rel="noreferrer noopener" aria-label="Description&lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)"><strong><code>Description</code></strong> <i class="wp-svg-new-tab new-tab"></i></a> (1) Comments describing the template. This setting must follow the <code>AWSTemplateFormatVersion</code> setting.</li><li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html" target="_blank" rel="noreferrer noopener" aria-label="Mappings &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)"><strong><code>Mappings</code></strong> <i class="wp-svg-new-tab new-tab"></i></a> (1) This allows us to create key/value pairs of data that we can use throughout our template. Under this, we specify a name for each of our mapping categories, and within each of those, we specify our key/value pairs that we can reference in our template. We reference these via the <code>!FindInMap</code> function call (documentation coming soon).</li><li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html" target="_blank" rel="noreferrer noopener" aria-label="Resources &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)"><strong><code>Resources</code></strong> <i class="wp-svg-new-tab new-tab"></i></a> (1) This is a significant attribute in SAM templates, proceeding all the actual AWS resources to configure.
<ul>
<li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html" target="_blank" rel="noreferrer noopener" aria-label="Logical ID &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt;  (opens in a new tab)"><strong><code>Logical ID</code></strong> <i class="wp-svg-new-tab new-tab"></i> </a>(2) An alphanumeric name given to a resource. This must be unique for all resources in a template.
<ul>
<li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html" target="_blank" rel="noreferrer noopener" aria-label="Type &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)"><strong><code>Type</code></strong> <i class="wp-svg-new-tab new-tab"></i></a> (3) The type of AWS resource this is. The format of this value is <code>service-provider::service-name::data-type-name</code>. For example, <code>AWS::EC2::Instance</code>. Resource names are delimited by a double colon (::).</li>
<li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html" target="_blank" rel="noreferrer noopener" aria-label=" (opens in a new tab)"><strong><code>Properties</code></strong> <i class="wp-svg-new-tab new-tab"></i></a> (3) A set of key/value pair properties (or options) for the resource.</li>
<li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html" target="_blank" rel="noreferrer noopener" aria-label="DeletionPolicy&lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)"><strong><code>DeletionPolicy</code></strong> <i class="wp-svg-new-tab new-tab"></i></a> (3) AWS deletes resources upon CloudFormation stack update and deletion by default. But we can specify this attribute with a value of &#8220;Retain&#8221; when we want to retain a resource beyond the life of the stack.</li>
<li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html" target="_blank" rel="noreferrer noopener" aria-label="DependsOn &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)"><strong><code>DependsOn</code></strong> <i class="wp-svg-new-tab new-tab"></i></a> (3) If we want a resource to be created only after another resource is created, we can force this by specifying this attribute along with the logical resource name of the dependency. We can have a resource depend on one or more other resources.</li>
</ul>
</li>
</ul>
</li></ul>



<p class="wp-block-paragraph">For more details on CloudFormation templates, check out <a href="https://timharkin.com/cloudformation-templates/" target="_blank" rel="noreferrer noopener" aria-label="Tim Harkin&#039;s blog post &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)">Tim Harkin&#8217;s blog post <i class="wp-svg-new-tab new-tab"></i></a>.</p>



<p class="wp-block-paragraph">&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://markfreedman.com/aws-living-tip-sheet-sam/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AWS Elastic Compute Cloud (EC2)</title>
		<link>https://markfreedman.com/aws-elastic-compute-cloud-ec2/</link>
					<comments>https://markfreedman.com/aws-elastic-compute-cloud-ec2/#respond</comments>
		
		<dc:creator><![CDATA[Mark Freedman]]></dc:creator>
		<pubDate>Mon, 20 Jan 2020 12:52:18 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[ebs]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[security groups]]></category>
		<category><![CDATA[ssh]]></category>
		<guid isPermaLink="false">http://markfreedman.com/?p=3246</guid>

					<description><![CDATA[EC2 is essentially a virtual server in the cloud. It can be available within minutes after setting it up. Compare that to how long it would take to provision and prepare a physical server in your own datacenter. Even ordering it and awaiting initial configuration and shipment can take weeks. General knowledge about EC2 is one of the key categories in the AWS Certified Cloud Practitioner exam.]]></description>
										<content:encoded><![CDATA[

<p class="wp-block-paragraph"><em>Last updated: 2020-02-22</em></p>
<p><em>Fixed several links.</em></p>

<p class="wp-block-paragraph"><img decoding="async" class="wp-image-3191" style="float: left; margin: 8px 8px 8px 0; width: 90px;" src="https://markfreedman.com/wp-content/uploads/2020/01/image21.png" alt="" /><a href="https://aws.amazon.com/ec2/" target="_blank" rel="noreferrer noopener" aria-label="EC2 (opens in a new tab)">EC2 <i class="wp-svg-new-tab new-tab"></i></a> is essentially a virtual server in the cloud. It can be available within minutes after setting it up. Compare that to how long it would take to provision and prepare a physical server in your own datacenter. Even ordering it and awaiting initial configuration and shipment can take weeks. General knowledge about EC2 is one of the key categories in the <a href="https://markfreedman.com/aws-certified-cloud-practitioner/">AWS Certified Cloud Practitioner</a> exam.</p>



<h4 class="wp-block-heading">Instance Types</h4>



<p class="wp-block-paragraph">EC2 is region-specific, so we should launch instances in a region that makes sense for latency and regulatory reasons. When we set up an EC2 instance, we get to choose from a large selection of pre-canned images across several different Linux offshoots and Microsoft Windows OSs. There are several <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html" target="_blank" rel="noreferrer noopener" aria-label="instance classes (opens in a new tab)">instance types <i class="wp-svg-new-tab new-tab"></i></a> for these operating systems that we can select from. Here&#8217;s a <a href="https://ec2instances.info/" target="_blank" rel="noreferrer noopener" aria-label="great chart (opens in a new tab)">great chart <i class="wp-svg-new-tab new-tab"></i></a> to help find the most appropriate instances to use.</p>



<p class="wp-block-paragraph"><strong>Note: </strong><em>There&#8217;s a common mnemonic we can use to help us remember the different instance types, but that likely won&#8217;t appear on the <strong>AWS Certified Cloud Practitioner</strong> exam: <strong>FIGHT DR MCPXZ</strong> (Fight Dr. McPixie), although with a recent change, the newer mnemonic could be <strong>FIGHT DR MACPXZ</strong>, due to the A1 class that was added in 2018. Keep in mind that some exams may refer to the older mnemonic.</em></p>



<p class="wp-block-paragraph">In general, these are the existing type categories:</p>



<ul class="wp-block-list">
<li><strong>F </strong>&#8211; For <strong>F</strong>PGA (<a href="https://simple.wikipedia.org/wiki/Field-programmable_gate_array" target="_blank" rel="noreferrer noopener" aria-label="Field Programmable Gate Arrays (opens in a new tab)">Field Programmable Gate Arrays <i class="wp-svg-new-tab new-tab"></i></a>) (<a href="https://aws.amazon.com/ec2/instance-types/f1/" target="_blank" rel="noreferrer noopener" aria-label="F1 instances (opens in a new tab)">F1 instances <i class="wp-svg-new-tab new-tab"></i></a>)</li>
<li><strong>I</strong> &#8211; For <strong>I</strong>OPS (<a href="https://aws.amazon.com/ec2/instance-types/#Storage_Optimized" target="_blank" rel="noreferrer noopener" aria-label="Storage Optimized (opens in a new tab)">Storage Optimized <i class="wp-svg-new-tab new-tab"></i></a>, backed by <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types" target="_blank" rel="noopener noreferrer">IOPS SSD EBS <i class="wp-svg-new-tab new-tab"></i></a>).</li>
<li><strong>G</strong> &#8211; For <strong>G</strong>raphics (<a href="https://aws.amazon.com/ec2/instance-types/#Accelerated_Computing" target="_blank" rel="noreferrer noopener" aria-label="Accelerated Computing (opens in a new tab)">Accelerated Computing <i class="wp-svg-new-tab new-tab"></i></a>)</li>
<li><strong>H</strong> &#8211; <strong>H</strong>igh Disk Throughput (<a href="https://aws.amazon.com/ec2/instance-types/i3/" target="_blank" rel="noreferrer noopener" aria-label="I3 instances (opens in a new tab)">I3 instances <i class="wp-svg-new-tab new-tab"></i></a>)</li>
<li><strong>T</strong> &#8211; Cheap general purpose, like <a href="https://aws.amazon.com/ec2/instance-types/t2/" target="_blank" rel="noreferrer noopener" aria-label="T2 (opens in a new tab)"><strong>T</strong>2 <i class="wp-svg-new-tab new-tab"></i></a> Micro</li>
<li><strong>D</strong> &#8211; <strong>D</strong>ensity (<a href="https://aws.amazon.com/about-aws/whats-new/2015/03/now-available-d2-instances-the-latest-generation-of-amazon-ec2-dense-storage-instances/" target="_blank" rel="noreferrer noopener" aria-label="D2 instances (opens in a new tab)">D2 instances <i class="wp-svg-new-tab new-tab"></i></a>)</li>
<li><strong>R</strong> &#8211; <strong>R</strong>AM (<a href="https://aws.amazon.com/ec2/instance-types/high-memory/" target="_blank" rel="noreferrer noopener" aria-label="High Memory instances (opens in a new tab)">High Memory instances <i class="wp-svg-new-tab new-tab"></i></a>)</li>
<li><strong>M</strong> &#8211; <strong>M</strong>ain choice for general-purpose apps (<a href="https://aws.amazon.com/ec2/instance-types/m5/" target="_blank" rel="noreferrer noopener" aria-label="M class instances (opens in a new tab)">M class instances <i class="wp-svg-new-tab new-tab"></i></a>)</li>
<li><strong>A</strong> &#8211; <strong>A</strong>RM-based workloads (<a href="https://aws.amazon.com/ec2/instance-types/a1/" target="_blank" rel="noreferrer noopener" aria-label="A1 instances (opens in a new tab)">A1 instances <i class="wp-svg-new-tab new-tab"></i></a>)</li>
<li><strong>C</strong> &#8211; <strong>C</strong>ompute (<a href="https://aws.amazon.com/ec2/instance-types/c5/" target="_blank" rel="noreferrer noopener" aria-label="C class instances (opens in a new tab)">C class instances <i class="wp-svg-new-tab new-tab"></i></a>)</li>
<li><strong>P</strong> &#8211; <strong>P</strong>ics (graphics) (<a href="https://aws.amazon.com/ec2/instance-types/g3/" target="_blank" rel="noreferrer noopener" aria-label="G class instances (opens in a new tab)">G class instances <i class="wp-svg-new-tab new-tab"></i></a>) (an alternative is now <a href="https://aws.amazon.com/about-aws/whats-new/2018/11/amazon-ec2-elastic-gpus-is-now-amazon-elastic-graphics/" target="_blank" rel="noreferrer noopener" aria-label="EC2 Elastic GPUs (opens in a new tab)">Amazon EC2 Elastic GPUs <i class="wp-svg-new-tab new-tab"></i></a>)</li>
<li><strong>X</strong> &#8211; E<strong>x</strong>treme Memory (<a href="https://aws.amazon.com/ec2/instance-types/x1/" target="_blank" rel="noreferrer noopener" aria-label="X1 (opens in a new tab)">X1 <i class="wp-svg-new-tab new-tab"></i></a> and <a href="https://aws.amazon.com/ec2/instance-types/x1e/" target="_blank" rel="noreferrer noopener" aria-label="X1e (opens in a new tab)">X1e <i class="wp-svg-new-tab new-tab"></i></a> instances)</li>
<li><strong>Z</strong> &#8211; Extreme Memory and CPU (<a href="https://aws.amazon.com/ec2/instance-types/z1d/" target="_blank" rel="noreferrer noopener" aria-label="Z1d instances (opens in a new tab)"><strong>z</strong>1d instances <i class="wp-svg-new-tab new-tab"></i></a>)</li>
</ul>



<p class="wp-block-paragraph">Aside from these AWS-supplied instance images, we can also create instances from a <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html" target="_blank" rel="noreferrer noopener" aria-label="previously saved image (AMI) (opens in a new tab)">saved image (AMI) <i class="wp-svg-new-tab new-tab"></i></a> that we created from previously configured instances, or from AMIs purchased from the <a href="https://aws.amazon.com/marketplace" target="_blank" rel="noreferrer noopener" aria-label="AWS Marketplace (opens in a new tab)">AWS Marketplace <i class="wp-svg-new-tab new-tab"></i></a>. This is often used for <a href="https://aws.amazon.com/ec2/autoscaling/" target="_blank" rel="noreferrer noopener" aria-label="Auto Scaling (opens in a new tab)">Auto Scaling <i class="wp-svg-new-tab new-tab"></i></a> launch configurations and <a href="https://aws.amazon.com/elasticloadbalancing/" target="_blank" rel="noreferrer noopener" aria-label="Elastic Load Balancing (opens in a new tab)">Elastic Load Balancing <i class="wp-svg-new-tab new-tab"></i></a> target groups. This will be covered in another article.</p>



<p class="wp-block-paragraph">We should <em>always</em> design for failure. So, at minimum, we should create an EC2 instance in each availability zone in the region.</p>



<h4 class="wp-block-heading">Security</h4>



<p class="wp-block-paragraph">When we create an instance, we also need to create a <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html" target="_blank" rel="noreferrer noopener" aria-label="Security Group (opens in a new tab)">Security Group <i class="wp-svg-new-tab new-tab"></i></a> to poke holes in the firewall for ports from specific IP address(es) or from anywhere: 0.0.0.0/0. Think of this as a virtual firewall at the instance level. By default, the SSH port (22) is opened up. But other common ports we may want to open up are:</p>



<ul class="wp-block-list">
<li>HTTP (80)</li>
<li>HTTPS (443)</li>
<li>RDP (3389)</li>
</ul>



<p class="wp-block-paragraph">If we want to have fine-grained (specific IP-level) access control to our EC2 instances, we&#8217;d apply <a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html" target="_blank" rel="noreferrer noopener" aria-label="network ACLs (NACLs) (opens in a new tab)">network ACLs (NACLs) <i class="wp-svg-new-tab new-tab"></i></a> to our EC2s&#8217; VPC and subnets.</p>



<h4 class="wp-block-heading">Storage</h4>



<p class="wp-block-paragraph">When setting up an EC2 instance, we also have to configure the storage we want attached to our instance. We do that by specifying the <a href="https://aws.amazon.com/ebs/" target="_blank" rel="noreferrer noopener" aria-label="Elastic Block Storage (EBS) (opens in a new tab)">Elastic Block Storage (EBS) <i class="wp-svg-new-tab new-tab"></i></a> type(s) to attach. These are virtual disks in the cloud, and are created in the same availability zone (AZ) as the EC2 instance. Each virtual storage device is auto-replicated:</p>



<ul class="wp-block-list">
<li><strong>SSD</strong> (Solid-State Drive)
<ul>
<li><strong>GP2</strong> is a general purpose SSD, often used as the main root volume.</li>
</ul>
<ul>
<li><strong>I01</strong> is provisioned IOPS SSD high-performance drives, which are best for high-performance databases.</li>
</ul>
</li>
<li><strong>HDD</strong> (Magnetic Drive)
<ul>
<li>HDD drives cannot be boot volumes.</li>
</ul>
<ul>
<li><strong>ST1</strong> is a throughput-optimized HDD, which is a low-cost volume for frequent, throughput-intensive workloads, such as database servers.</li>
<li><strong>SC1</strong> is a &#8220;cold&#8221; HDD, which is the lowest cost option for less frequently accessed workloads, such as file servers.</li>
<li><strong>Magnetic</strong> is a previous generation EBS type, and is being phased out.</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading">Instance Access</h4>



<p class="wp-block-paragraph">Once we get our EC2 instance(s) configured and started, we&#8217;ll often need direct access to the machines. The most common method is via <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html" target="_blank" rel="noreferrer noopener" aria-label="SSH (opens in a new tab)">SSH <i class="wp-svg-new-tab new-tab"></i></a> (port 22). Upon launch of an EC2 instance, we&#8217;re prompted to select or create a &#8220;key pair&#8221; (<a href="https://en.wikipedia.org/wiki/Public-key_cryptography" target="_blank" rel="noreferrer noopener" aria-label="public/private key (opens in a new tab)">public/private key <i class="wp-svg-new-tab new-tab"></i></a>) that we&#8217;ll need to SSH into Linux instances and to obtain a password to <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html" target="_blank" rel="noreferrer noopener" aria-label="RDP into Windows instances (opens in a new tab)">RDP into Windows instances <i class="wp-svg-new-tab new-tab"></i></a>. This creates a private key (.PEM file) that can be used directly from a Linux-based OS (including MacOS) to SSH into the instance. To use this key file from Windows, we&#8217;d need to use a utility like <a href="https://www.putty.org/" target="_blank" rel="noreferrer noopener" aria-label="PuTTY (opens in a new tab)">PuTTY <i class="wp-svg-new-tab new-tab"></i></a> to convert the key file into a .PPK file and SSH into the instance.</p>



<p class="wp-block-paragraph">From a Linux-based OS, after saving the .PEM file, we need to apply read-only rights to the file owner by running <strong>chmod 400 keyname.pem</strong>.</p>



<p class="wp-block-paragraph">From a local machine, we can connect via SSH by running <strong>ssh ec2-user@x.x.x.x -i keyname.pem</strong>, where x.x.x.x is the IP address we can grab from the AWS console&#8217;s <strong>IPv4 Public IP</strong> field on the EC2 instance <strong>Description</strong> panel.</p>



<p class="wp-block-paragraph">We also use this key pair to run <a href="https://aws.amazon.com/cli/" target="_blank" rel="noreferrer noopener" aria-label="AWS CLI (opens in a new tab)">AWS CLI <i class="wp-svg-new-tab new-tab"></i></a> commands. Although this is a topic for another article, please note that we need to store this key locally (in plain text) in the <strong>~/.aws</strong> folder. If we want to run CLI commands from the EC2 instance itself, it is far more secure to apply <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html" target="_blank" rel="noreferrer noopener" aria-label="IAM Roles (opens in a new tab)">IAM Roles <i class="wp-svg-new-tab new-tab"></i></a> to the instance instead. If anyone ever got access to the EC2 instance, they could grab complete control of the instance for good if the private key was available in the file system.</p>



<h4 class="wp-block-heading">Pricing</h4>



<p class="wp-block-paragraph">I cover EC2 pricing in much more detail <a href="https://markfreedman.com/aws-pricing-and-billing-part-1/">in another article</a>. In general, there are four main EC2 pricing models:</p>



<ul class="wp-block-list">
<li><strong>On-Demand</strong> (low-cost and flexible)</li>
<li><strong>Reserved</strong> (steady-state, predictable usage)</li>
<li><strong>Dedicated</strong> (for regulatory requirements)</li>
<li><strong>Spot</strong> (flexible start and end times)</li>
</ul>



<p class="wp-block-paragraph">This may be the last article I can write before my first AWS certificate exam, so wish me luck <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>




<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://markfreedman.com/aws-elastic-compute-cloud-ec2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AWS Simple Storage Service (S3)</title>
		<link>https://markfreedman.com/aws-simple-storage-service-s3/</link>
					<comments>https://markfreedman.com/aws-simple-storage-service-s3/#comments</comments>
		
		<dc:creator><![CDATA[Mark Freedman]]></dc:creator>
		<pubDate>Wed, 15 Jan 2020 12:41:03 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[buckets]]></category>
		<category><![CDATA[files]]></category>
		<category><![CDATA[objects]]></category>
		<category><![CDATA[s3]]></category>
		<category><![CDATA[s3 storage classes.]]></category>
		<guid isPermaLink="false">http://markfreedman.com/?p=3215</guid>

					<description><![CDATA[S3 is object-based flat file unlimited storage. It's unlimited, but that doesn't mean we should throw files up there without thinking -- storage still costs money. It's not block-based, so it's not meant for storing operating systems or live databases. But any type of file can be stored (including database file backups), and each can be from 0 bytes up to 5 TB. General knowledge about S3 is one of the key categories in the AWS Certified Cloud Practitioner exam.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>[Photo by&nbsp;<a href="https://unsplash.com/@markusspiske?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Markus Spiske</a>&nbsp;on&nbsp;<a href="https://unsplash.com/collections/4614762/abstract-future?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>]</em></p>



<p class="wp-block-paragraph"><em>Last updated: 2020-04-05</em></p>



<p class="wp-block-paragraph"><em>I’ll be updating my AWS articles from time to time, as I learn more. I got my first cert — the AWS Certified Cloud Practitioner certification — on January 22nd, but as I took the practice exams (5 exams, 2x each) and the actual exam, I learned about gaps in my knowledge. So I’ll be filling those in through the articles I wrote beforehand.</em></p>



<p class="wp-block-paragraph"><img loading="lazy" decoding="async" width="112" height="111" class="wp-image-3194" style="float: left; margin: 8px 8px 8px 0; width: 112px;" src="https://markfreedman.com/wp-content/uploads/2020/01/Screen-Shot-2020-01-10-at-11.35.10-AM.png" alt=""/><a href="https://aws.amazon.com/s3/" target="_blank" rel="noreferrer noopener" aria-label="S3 &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)">S3 <i class="wp-svg-new-tab new-tab"></i></a> is object-based flat file unlimited storage. It&#8217;s unlimited, but that doesn&#8217;t mean we should throw files up there without thinking &#8212; storage still costs money. It&#8217;s <em>not</em> block-based, so it&#8217;s not meant for storing operating systems or live databases. But any type of file can be stored (including database file backups), and each can be from 0 bytes up to 5 TB. General knowledge about S3 is one of the key categories in the <a href="https://markfreedman.com/aws-certified-cloud-practitioner/">AWS Certified Cloud Practitioner</a> exam.</p>



<h4 class="wp-block-heading">Buckets</h4>



<p class="wp-block-paragraph"></p><p>Files are stored in <strong>buckets</strong>, which we can think of as root-level folders. Bucket names must be globally unique because they resolve to URLs, which are global. Most of the time, we wouldn&#8217;t expose these URLs publicly except for static S3 websites.</p> <s><p>When we name our buckets, AWS automatically postfixes “S3” or the bucket&#8217;s region to the name, depending on the region. Here are the two naming examples:</p> <ul> <li><strong>us-east-1</strong>: <code>https://my-unique-bucket-name.s3.amazon.com/</code></li> <li><strong>All other regions</strong>: <code>https://my-unique-bucket-name.us-west-2.amazon.com/</code></li> </ul> <p>Based on the above, we may wonder why the names still need to be globally unique instead of regionally. My answer: I don&#8217;t know. Maybe it&#8217;s a legacy reason.</p> <p>I recommend using reverse-domain naming using an appropriate domain you own. For example, I start all my bucket names with <code>com.markfreedman</code>. An exception would be when we host a static site. In that case, we need to use a normal domain name (in my case, <code>markfreedman.com</code>, although I already have this hosted elsewhere).</p></s>



<p class="wp-block-paragraph">Based on <a rel="noreferrer noopener" href="https://aws.amazon.com/blogs/aws/amazon-s3-path-deprecation-plan-the-rest-of-the-story/" target="_blank">this article <i class="wp-svg-new-tab new-tab"></i></a> and this <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html" target="_blank" rel="noreferrer noopener">documentation <i class="wp-svg-new-tab new-tab"></i></a>, please note that the bucket URL naming convention is changing. AWS supports both <em>path-style</em> requests and <em>virtual hosted-style</em> requests. But any buckets created after September 30, 2020 will only <em>support virtual hosted-style </em>requests. Also, the region should be specified in the URL. We could leave out the region, but there&#8217;s a slight bit of overhead due to AWS forcing a 307 redirect to the specific region (us-east-1 is checked first).</p>



<p class="wp-block-paragraph">Here are the updated <em>virtual hosted-style</em> naming examples:</p>



<ul class="wp-block-list"><li><strong>Regional-specific</strong>: <code>https://my-unique-bucket-name.s3.us-east-1.amazonaws.com/</code></li><li><strong>Without specifying a region (will 307 redirect)</strong>: <code>https://my-unique-bucket-name.s3.amazonaws.com/</code></li></ul>



<p class="wp-block-paragraph">I&#8217;m changing my recommended bucket naming convention slightly, due to the <strong>Bucket Names with Dots</strong> section of <a href="https://aws.amazon.com/blogs/aws/amazon-s3-path-deprecation-plan-the-rest-of-the-story/" target="_blank" rel="noreferrer noopener">this article <i class="wp-svg-new-tab new-tab"></i></a>:</p>



<p class="wp-block-paragraph">I recommend using reverse-domain naming using an appropriate domain you own, but replacing dots with dashes. For example, I now start all my bucket names with <code>com-markfreedman</code>. An exception would be when we host a static site. In that case, we need to use a normal domain name (in my case, <code>markfreedman.com</code>, although I already have this hosted elsewhere).</p>



<p class="wp-block-paragraph">Although bucket names must be globally unique, storage of the buckets themselves is region-specific. We should select a bucket&#8217;s region based on latency requirements. If most access would be from a certain region, create the bucket in the closest available AWS region. Using CloudFront can alleviate this need, though.</p>



<p class="wp-block-paragraph">Public access is blocked by default. AWS requires us to be explicit in exposing buckets to the public Internet. All those stories of hacked data (often exposed S3 buckets) should make us thankful for this default. We can secure buckets with IAM policies (bucket policies).</p>



<p class="wp-block-paragraph">We can also set lifecycle management for a bucket, which specifies which storage class to move the bucket to, and when to move it. More on storage classes, below.</p>



<h4 class="wp-block-heading">Objects (Files)</h4>



<p class="wp-block-paragraph">When we upload a file to an S3 bucket, AWS considers the file name to be the <strong>key</strong>, and refers it as <strong>key</strong> in the S3 APIs and SDKs. The S3 data model is a flat structure. In other words, there&#8217;s no hierarchy of subfolders (sub-buckets?). This is why I described buckets as root-level folders. However, you can simulate a logical folder hierarchy by separating portions of the key name with forward slashes (/).</p>



<p class="wp-block-paragraph">The file content is referred to as the <strong>value</strong>. Therefore, an S3 file is sometimes referred to as a key/value pair.</p>



<p class="wp-block-paragraph">Files can be versioned, encrypted, as well as provided with other metadata. We can secure files (objects) with IAM policies (object policies) and set ACLs at the file (object) level. By default, the resource owner has full ACL rights to the file. For extra protection, we can require <a href="https://en.wikipedia.org/wiki/Multi-factor_authentication" target="_blank" rel="noopener noreferrer">multi-factor authentication (MFA) <i class="wp-svg-new-tab new-tab"></i></a> in order to delete an object.</p>



<p class="wp-block-paragraph">When we upload a file to an S3 bucket, we&#8217;ll know the upload was successful if an HTTP 200 code is returned. This is most important when uploading programmatically. If we do it manually, AWS will let us know if it succeeded or not.</p>



<p class="wp-block-paragraph">We can expect 99.99% availability, but AWS only guarantees 99.9%. But it also guarantees 99.999999999% durability (11 x 9s). So we can be confident that our files will always be there.</p>



<p class="wp-block-paragraph">There are specific &#8220;data consistency&#8221; rules:</p>



<ul class="wp-block-list"><li><strong>Read after Write Consistency</strong> &#8212; when new files are uploaded, we can read the file immediately afterwards.</li><li><strong>Eventual Consistency</strong> &#8212; when files are updated or deleted, immediately attempting to read the file afterwards may result in the old file content. It can take a short period of time (perhaps a few seconds or more) to propagate throughout AWS (replication, cache cleaning), which is why we may see the old file.<br /><br /><em>(Update, 2020-04-05: I originally mentioned that new files use POST and updates use PUT. But according to what I can gather from their docs and some online Q&amp;A, POST is actually an&nbsp;alternate to PUT that enables browser-based uploads to S3. Parameters can either be passed via HTTP headers by using PUT, or passed via form fields by using POST, no matter if the object is new or being replaced. From what I can tell, S3 doesn&#8217;t really &#8220;replace&#8221; objects per se, since versioning is an option.)</em></li></ul>



<h4 class="wp-block-heading">Storage Classes</h4>



<p class="wp-block-paragraph">S3 supports tiered storage classes, which we can change on demand at the object level. We don&#8217;t specify a class at bucket creation time. Keep in mind, when we specify lifecycle rules, we do that at the bucket level, defining the lifecycle rules for the <em>objects</em> <em>in</em> that bucket:</p>



<ul class="wp-block-list"><li><strong>S3 Standard</strong> (most common) is designed to sustain loss of 2 facilities concurrently, and has the best performance.</li><li><strong>S3 IA</strong> (Infrequently Accessed) is lower cost, but we&#8217;re charged a retrieval fee.</li><li><strong>S3 One Zone IA</strong> is a lower cost version of <strong>S3 IA</strong>, but it doesn&#8217;t require multiple zone resilience. It&#8217;s the only tier that&#8217;s just in one availability zone; all the others are replicated in 3 or more zones.</li><li><strong>S3 Intelligent Tiering</strong> allows AWS to automatically move data to the most cost-effective tier using machine learning AI of usage patterns. For most buckets, I recommend using this, although it&#8217;s best for long-lived data with unpredictable access patterns.</li><li><strong>S3 Glacier</strong> is a secure, durable, low cost archival tier, which allows for configurable retrieval times, from minutes to hours. It provides query-in-place functionality for data analysis of archived data.</li><li><strong>S3 Glacier Deep Archive</strong> is the lowest cost tier, but it requires up to 12 hour retrieval time. This is great for archived data that doesn&#8217;t need to be readily available.</li><li><strong>S3 RRS</strong> is Reduced Redundancy Storage, but is being phased out. It appears to be similar to <strong>S3 One Zone IA</strong>.</li></ul>



<h4 class="wp-block-heading">Pricing</h4>



<p class="wp-block-paragraph">The prices we&#8217;re charged (<a href="https://markfreedman.com/aws-pricing-and-billing-part-2/">covered in another article</a>) using S3 is based on:</p>



<ul class="wp-block-list"><li>Storage</li><li>Requests</li><li>Storage Management</li><li>Data Transfer</li><li><a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html" target="_blank" rel="noreferrer noopener" aria-label="Transfer Acceleration &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)">Transfer Acceleration <i class="wp-svg-new-tab new-tab"></i></a>, which enables fast transfer to distant locations by using <a href="https://aws.amazon.com/cloudfront/" target="_blank" rel="noreferrer noopener" aria-label="CloudFront &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)">CloudFront <i class="wp-svg-new-tab new-tab"></i></a> edge locations, making use of backbone networks (much larger network &#8220;pipes&#8221;).</li><li><a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html" target="_blank" rel="noopener noreferrer">Cross Region Replication <i class="wp-svg-new-tab new-tab"></i></a>, which automatically replicates to another region bucket for disaster recovery purposes.</li><li>We can also configure buckets to require the <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html" target="_blank" rel="noreferrer noopener" aria-label="requester pay for access &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)">requester pay for access <i class="wp-svg-new-tab new-tab"></i></a>.</li><li>If we have multiple accounts under an&nbsp;<a href="https://aws.amazon.com/organizations/" target="_blank" rel="noreferrer noopener" aria-label="Organization &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)">Organization <i class="wp-svg-new-tab new-tab"></i></a>, S3 offers us volume discounts when we enable&nbsp;<a href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/consolidated-billing.html" target="_blank" rel="noreferrer noopener" aria-label="Consolidated Billing &lt;&quot;i&quot; class=&quot;wp-svg-&quot;new-tab&quot; &quot;new-tab&quot;&quot;&gt;&lt;/&quot;i&quot;&gt; (opens in a new tab)">Consolidated Billing <i class="wp-svg-new-tab new-tab"></i></a>.</li></ul>



<p class="wp-block-paragraph">&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://markfreedman.com/aws-simple-storage-service-s3/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>AWS Pricing and Billing (Part 3)</title>
		<link>https://markfreedman.com/aws-pricing-and-billing-part-3/</link>
					<comments>https://markfreedman.com/aws-pricing-and-billing-part-3/#respond</comments>
		
		<dc:creator><![CDATA[Mark Freedman]]></dc:creator>
		<pubDate>Sat, 11 Jan 2020 17:32:40 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[billing]]></category>
		<category><![CDATA[calculators]]></category>
		<category><![CDATA[cloudfront]]></category>
		<category><![CDATA[dynamodb]]></category>
		<category><![CDATA[ebs]]></category>
		<category><![CDATA[elb]]></category>
		<category><![CDATA[freetier]]></category>
		<category><![CDATA[lambda]]></category>
		<category><![CDATA[pricing]]></category>
		<category><![CDATA[rds]]></category>
		<category><![CDATA[snowball]]></category>
		<guid isPermaLink="false">http://markfreedman.com/?p=3197</guid>

					<description><![CDATA[In my last article, we discussed S3 pricing, which was an entire topic on its own. In this part, we&#8217;ll discuss other key service charges, and the options and decisions we need to make when planning. I don’t believe the exams will ask about specific prices, as these can always change. But the important thing is [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In <a href="https://markfreedman.com/aws-pricing-and-billing-part-2/">my last article</a>, we discussed S3 pricing, which was an entire topic on its own. In this part, we&#8217;ll discuss other key service charges, and the options and decisions we need to make when planning.</p>



<p class="wp-block-paragraph">I don’t believe the exams will ask about specific prices, as these can always change. But the important thing is understanding the relative pricing, so you could be able to make intelligent cost analysis decisions.</p>



<p class="wp-block-paragraph">Because there are often many details and variables that go into cost calculation, I&#8217;ll also link directly to the AWS pages for each service cost.</p>



<h4 class="wp-block-heading"><a href="https://aws.amazon.com/snowball/pricing/" target="_blank" rel="noreferrer noopener" aria-label="Snowball (opens in a new tab)">Snowball</a></h4>



<p class="wp-block-paragraph"><strong>Snowball</strong> is a physical petabyte-scale device used for migrating gigantic data sets into and out of AWS S3 storage. It&#8217;s much cheaper and faster to get on-premise data into and out of AWS using a physical device, especially when we&#8217;re talking petabytes.</p>



<h4 class="wp-block-heading"><a href="https://aws.amazon.com/ebs/pricing/" target="_blank" rel="noreferrer noopener" aria-label="Elastic Block Store (EBS) (opens in a new tab)">Elastic Block Store (EBS)</a></h4>



<p class="wp-block-paragraph">In my <a href="https://markfreedman.com/aws-pricing-and-billing-part-1/">first article on billing and pricing</a>, we discussed the support options’ costs and EC2 pricing. There are a few services that work hand-in-hand with EC2 that we&#8217;ll discuss here. First off, an EC2 (or any server instance) is useless without disk storage. EBS is AWS&#8217;s virtual disks in the cloud. These disks are not tied to any single EBS instance. The flexibility of keeping it independent allows us to detach it from one EC2 instance and attach it to another, like moving a physical hard drive from one physical server to another. But like physical servers, an EBS instance can only be attached to a single EC2 instance at a time. In addition, EBS instances can only be attached to EC2 instances in the same region.</p>



<p class="wp-block-paragraph">EBS pricing is based on media type and provisioned storage (not necessarily what&#8217;s physically used). The monthly prices shown are current as of this writing, and subject to change, but it will still give you an idea of relative costs:</p>



<ul class="wp-block-list">
<li><strong>General purpose SSD (gp2)</strong> volumes are 10 cents per GB. These are perfect for boot drives and general file storage purposes.</li>
<li><strong>Provisioned IOPS SSD (io1)</strong> volumes are 12.5 cents per GB. Because 10s of 1000s of these volumes can be attached to a single EC2 instance, we&#8217;re also charged 6.5 cents each per month. These are mainly for I/O-intensive and database workloads. I&#8217;m still not exactly sure why so many volumes are desirable, so I hope to learn more about that soon.</li>
<li><strong>Throughput Optimized HDD (st1)</strong> volumes are 4.5 cents per GB. These are magnetic drives good for large, sequential workloads and data warehouses.</li>
<li><strong>Cold HDD (sc1)</strong> volumes are 2.5 cents per GB. These magnetic drives are for inexpensive block storage where throughput is more important than speed.</li>
</ul>



<p class="wp-block-paragraph"><strong>EBS Snapshots</strong> are incremental backups of any EBS store, and are charged at 5 cents per GB of actual data stored; not provisioned size.</p>



<p class="wp-block-paragraph">There&#8217;s a service fee per &#8220;job.&#8221; A job is the shipping/loading/shipping/unloading of a single Snowball device. There are two sizes of Snowball; 50 TB and 80 TB. The service fee for each is $200 and $250 ($320 for Singapore and Seoul), respectively. Standard shipping charges are extra. There&#8217;s also a daily charge for holding onto the device, although the first 10 days are free. If we go beyond 10 days, we&#8217;re charged an extra $15 ($20 for Singapore and Seoul) per day afterwards. It&#8217;s free to transfer the data into S3. But transferring data out of S3 runs between 3 and 5 cents per GB, depending upon region.</p>



<h4 class="wp-block-heading"><a href="https://aws.amazon.com/rds/pricing/" target="_blank" rel="noreferrer noopener" aria-label="Relational Database Service (RDS) (opens in a new tab)">Relational Database Service (RDS)</a></h4>



<p class="wp-block-paragraph">There are no up-front fees for setting up RDS use. But Amazon prices RDS use by the following:</p>



<ul class="wp-block-list">
<li>Clock hours of server time.</li>
<li>Instance type and size.</li>
<li>Provisioned storage.</li>
<li>Additional storage.</li>
<li>Requests.</li>
<li>Engine.</li>
<li>Data transfer.</li>
</ul>



<p class="wp-block-paragraph">The monthly prices differ by instance type and database engine:</p>



<ul class="wp-block-list">
<li><strong>Aurora</strong> could potentially be a more cost-effective option if you can take advantage of the performance gains over MySQL and PostgreSQL, and you are looking for no-touch administration. But it could be up to 20% more expensive. Storage is 10 cents per GB and I/O is 20 cents per million requests. Backup storage runs between 2 and 2.5 cents per GB, depending on region.</li>
<li><strong>MySQL</strong>, <strong>PostgreSQL</strong>, and <strong>MariaDB</strong> costs vary significantly based upon instance type and region. Single-AZ on-demand costs can run from 1.7 cents per hour to almost $14 per hour! These prices double when running in multiple AZs. As with EC2 instances, we can also get significant discounts by reserving instances. 1-year terms can save us around 25%, while 3-year terms can save us around 50%. The savings can even increase as the instance type grows.</li>
<li><strong>Oracle</strong> and <strong>SQL Server</strong> prices can vary quite a bit depending upon license and instance size. I&#8217;d avoid these engines unless you have very specific needs.</li>
</ul>



<h4 class="wp-block-heading"><a href="https://aws.amazon.com/dynamodb/pricing/" target="_blank" rel="noreferrer noopener" aria-label="DynamoDB (opens in a new tab)">DynamoDB</a></h4>



<p class="wp-block-paragraph">There are two &#8220;capacity modes&#8221; for <strong>DynamoDB</strong>:</p>



<ul class="wp-block-list">
<li><strong>On-Demand</strong> capacity doesn&#8217;t require the need to predict usage. <strong>Provisioned</strong> capacity offers significant savings, if we can predict our need. We&#8217;re charged by the following:
<ul>
<li>Read request units.</li>
<li>Write request units.</li>
<li>Data storage.</li>
<li>Continuous backups.</li>
<li>On-demand backups.</li>
<li>Backup table restore.</li>
<li>Global tables.</li>
<li>Accelerator (DAX).</li>
<li>Streams.</li>
<li>Data transfer.</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Pricing details for all of the above are too numerous to go through here, so I recommend reading all the details on the <a href="https://aws.amazon.com/dynamodb/pricing/" target="_blank" rel="noreferrer noopener" aria-label="AWS site (opens in a new tab)">AWS site <i class="wp-svg-new-tab new-tab"></i></a>. Suffice it to say that <strong>DynamoDB</strong> is a lot cheaper than <strong>RDS</strong> costs, so only reserve <strong>RDS</strong> use for where you really need relational access.</p>



<h4 class="wp-block-heading"><a href="https://aws.amazon.com/cloudfront/pricing/" target="_blank" rel="noreferrer noopener" aria-label="CloudFront (opens in a new tab)">CloudFront</a></h4>



<p class="wp-block-paragraph"><strong>CloudFront</strong> is relatively cheap considering the benefits. There are no up-front fees.</p>



<ul class="wp-block-list">
<li><strong>Free Tier</strong> consists of 50 GB monthly of outbound data transfer and 2 million HTTP/HTTPS monthly requests over a year.</li>
<li><strong>On-Demand</strong> pricing for data transferred out to the Internet is on a sliding scale based on volume per month, and by region. This can range from 2 to 17 cents per GB. For regional transfer <em>inside</em> of AWS, the prices range from 2 to 16 cents per GB. HTTP method calls are all around 1 cent per 10,000 calls.</li>
</ul>



<h4 class="wp-block-heading"><a href="https://aws.amazon.com/elasticloadbalancing/pricing/" target="_blank" rel="noreferrer noopener" aria-label="Elastic Load Balancer (ELB) (opens in a new tab)">Elastic Load Balancer (ELB)</a></h4>



<p class="wp-block-paragraph">In order to calculate <strong>Elastic Load Balancer</strong> pricing, we first have to understand what a <strong>Load Balancer Capacity Unit (LCU)</strong> is. It&#8217;s based on the <em>highest</em> of the following:</p>



<ul class="wp-block-list">
<li>New connections per second (up to 25 = 1 <strong>LCU</strong>).</li>
<li>Active connections per minute (up to 3,000 active connections per minute = 1 <strong>LCU</strong>).</li>
</ul>



<p class="wp-block-paragraph">ELBs are charged at a bit over 2 cents per hour (or partial hour), differing slightly by region. In addition, we&#8217;re charged 0.8 cents per LCU-hour (as described above). So if you think about it, we&#8217;d be paying well under a dollar a day for a load balancer; probably around $15 or so per month. Definitely not where we&#8217;ll take a big hit budget-wise.</p>



<h4 class="wp-block-heading"><a href="https://aws.amazon.com/lambda/pricing/" target="_blank" rel="noreferrer noopener" aria-label="Lambda (opens in a new tab)">Lambda</a></h4>



<p class="wp-block-paragraph">Serverless computing has become enormously popular over the last few years, especially as we consider solutions for <a href="https://microservices.io/" target="_blank" rel="noreferrer noopener" aria-label="microservices (opens in a new tab)">microservices <i class="wp-svg-new-tab new-tab"></i></a>. AWS Lambda allows us to write small functions to respond to several types of events in a &#8220;single responsibility principle&#8221; model &#8212; and if you think about it, virtually everything in computing is triggered by an &#8220;event.&#8221; We can choose from various popular languages for coding these, which eliminates any real learning curve. AWS handles all the provisioning, scaling, and infrastructure for us at very low cost:</p>



<ul class="wp-block-list">
<li><strong>Request pricing</strong>
<ul>
<li>Free tier: 1 million requests per month. Great bargain.</li>
</ul>
<ul>
<li>20 cents per 1 million requests thereafter.</li>
</ul>
</li>
<li><strong>Duration pricing</strong> &#8212; this is based on processing time and allocated memory.
<ul>
<li>400,000 GB-seconds per month free up to 3.2 million seconds.</li>
<li>$0.00001667 for every GB-second used thereafter.</li>
</ul>
</li>
<li><em>Please keep in mind that we are still charged for the resources our Lambda functions use, such as S3 and database transactions.</em></li>
</ul>



<p class="wp-block-paragraph">One of the criticisms of Lambda is its cold startup time when it hasn&#8217;t been used for awhile. Each Lambda function is containerized, so even though containers are much more efficient than VMs, there is still start-up latency. AWS offers <strong>Provisioned Concurrency Pricing</strong> to help alleviate this issue, at a cost. As they say on their site, this &#8220;keeps functions initialized and hyper-ready to respond in double-digit milliseconds.&#8221; <strong>Provisioned Concurrency Pricing</strong> involves several variables, so it&#8217;s best to look at the <a href="https://aws.amazon.com/lambda/pricing/#Provisioned_Concurrency_Pricing" target="_blank" rel="noreferrer noopener" aria-label="examples on the AWS website (opens in a new tab)">examples on the AWS website <i class="wp-svg-new-tab new-tab"></i></a>.</p>



<h4 class="wp-block-heading">Free is for Me</h4>



<p class="wp-block-paragraph">AWS gives us several free service options as well:</p>



<ul class="wp-block-list">
<li><strong><a href="https://aws.amazon.com/free/free-tier-faqs/" target="_blank" rel="noreferrer noopener" aria-label="Free user tier (opens in a new tab)">Free user tier <i class="wp-svg-new-tab new-tab"></i></a></strong> for new accounts:
<ul>
<li>Free EC2 micro instances for a year.</li>
<li>Free S3 usage tier.</li>
<li>Free Elastic Block Store (EBS).</li>
<li>Free Elastic Load Balancing (ELB).</li>
<li>Free data transfer.</li>
<li>Etc.</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li><strong>Free services</strong>
<ul>
<li>VPC (virtual data center in the cloud)</li>
</ul>
<ul>
<li>Elastic Beanstalk (but provisioned resources aren&#8217;t free)</li>
<li>CloudFormation (but provisioned resources aren&#8217;t free)</li>
<li>Identity Access Management (IAM)</li>
<li>Auto Scaling (but provisioned resources aren&#8217;t free)</li>
<li>Opsworks (similar to Elastic Beanstalk)</li>
<li>Amplify</li>
<li>AppSync</li>
<li>CodeStar</li>
<li>Consolidated Billing</li>
<li>Cost Explorer</li>
<li>AMIs (exception: if creating from a running instance, we pay for running a micro instance (about 2 cents per hour, depending on region) plus some EBS fees).</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading">Pricing Calculators</h4>



<p class="wp-block-paragraph">AWS provides us with a couple of tools for estimating costs. Apparently, this is a big part of the <a href="https://markfreedman.com/aws-certified-cloud-practitioner/">AWS Certified Cloud Practitioner</a> exam, so practice using them:</p>



<ul class="wp-block-list">
<li><a href="https://calculator.s3.amazonaws.com/index.html" target="_blank" rel="noreferrer noopener" aria-label="Simple Monthly Calendar (opens in a new tab)">Simple Monthly Calculator <i class="wp-svg-new-tab new-tab"></i></a>
<ul>
<li>Allows us to build out environments for estimating costs.</li>
<li>Calculates running-cost estimates.</li>
<li>Hosted on S3 (trivia).</li>
</ul>
</li>
<li><a href="https://aws.amazon.com/tco-calculator/" target="_blank" rel="noreferrer noopener" aria-label="Total Cost of Ownership (TCO) Calculator (opens in a new tab)">Total Cost of Ownership (TCO) Calculator <i class="wp-svg-new-tab new-tab"></i></a>
<ul>
<li>This is a great tool for generating reports to convince C-level management the cost benefits of moving to the cloud.</li>
<li>Allows us to compare on-premise vs. AWS cloud costs.</li>
<li>Breaks things down into four categories (for overhead, space, power, and cooling costs):
<ul>
<li>Server costs</li>
<li>Storage costs</li>
<li>Network costs</li>
<li>IT labor costs</li>
</ul>
</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Again, practice, practice, practice.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://markfreedman.com/aws-pricing-and-billing-part-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
