<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://koukia.ca/feed.xml" rel="self" type="application/atom+xml" /><link href="https://koukia.ca/" rel="alternate" type="text/html" /><updated>2026-10-20T23:14:05+00:00</updated><id>https://koukia.ca/feed.xml</id><title type="html">Aram Koukia</title><subtitle>Aram Koukia is an engineering leader at AWS who writes about technical leadership, scalable systems, and building teams that love what they do.</subtitle><author><name>Aram Koukia</name></author><entry><title type="html">How to Evaluate a Distributed System Architecture in 30 Minutes</title><link href="https://koukia.ca/2025/11/how-to-evaluate-a-distributed-system-architecture-in-30-minutes/" rel="alternate" type="text/html" title="How to Evaluate a Distributed System Architecture in 30 Minutes" /><published>2025-11-24T00:00:00+00:00</published><updated>2025-11-24T00:00:00+00:00</updated><id>https://koukia.ca/2025/11/how-to-evaluate-a-distributed-system-architecture-in-30-minutes</id><content type="html" xml:base="https://koukia.ca/2025/11/how-to-evaluate-a-distributed-system-architecture-in-30-minutes/"><![CDATA[<h2 id="how-to-evaluate-a-distributed-system-architecture-in-30minutes">How to Evaluate a Distributed System Architecture in 30 Minutes</h2>

<p>One of the biggest surprises when moving into senior engineering or engineering management roles is how often you need to evaluate systems you didn’t design. You’re handed a document, a diagram, or a pitch – and you have 30 minutes to understand whether the architecture is sound, scalable, operationally manageable, and worth investing in.</p>

<p>The good news: you don’t need to know every detail.</p>

<p>Over the years, I’ve developed a fast, structured way to assess an architecture with enough confidence to ask the right questions and catch the biggest risks early. This is the same approach I use in design reviews and technical strategy discussions today.</p>

<p>This isn’t a checklist of tiny details.</p>

<p>This is how you see the shape of a system quickly.</p>

<p>⸻</p>

<p><strong>Step 1: Understand the Core Flow (5 minutes)</strong></p>

<p>Every distributed system has a “dominant path” – the sequence of actions that matter most for correctness, performance, and customer experience.</p>

<p>Ask the presenter or yourself:</p>

<ol>
  <li>What is the primary customer action?</li>
</ol>

<p>(Upload, read, write, query, process, etc.)</p>

<ol>
  <li>What components does that action flow through?</li>
</ol>

<p>Identify the small number of components that appear on every request.</p>

<ol>
  <li>Where are the critical boundaries?</li>
</ol>

<p>• Cross-region?</p>

<p>• Cross-account?</p>

<p>• Cross-service?</p>

<p>If you understand the happy path, you’re already 60% of the way to evaluating the architecture.</p>

<p>Red flags: unclear data flow, inconsistent diagrams, components that seem duplicated without explanation.</p>

<p>⸻</p>

<p><strong>Step 2: Identify the Single Points of Failure (5 minutes)</strong></p>

<p>Distributed systems don’t fail in subtle ways – they fail in embarrassingly predictable ones.</p>

<p>Look for:</p>

<p>• A single database with no replication strategy</p>

<p>• A queue with unclear DLQ behavior</p>

<p>• A single compute layer without autoscaling</p>

<p>• A service that only runs in one zone</p>

<p>• A region dependency that breaks the idea of “multi-region”</p>

<p>Your goal here is not to fix the design but to surface the assumptions the team is making.</p>

<p>A healthy architecture can answer:</p>

<p>• What happens if this component fails?</p>

<p>• How does the system degrade?</p>

<p>• How do we recover?</p>

<p>If they can’t answer those, you just found your first major risk.</p>

<p>⸻</p>

<p><strong>Step 3: Stress the System at Scale (5 minutes)</strong></p>

<p>A design that works for 100 requests per second can collapse at 10,000.</p>

<p>Ask:</p>

<p>• What’s the biggest bottleneck at 10× scale?</p>

<p>• Which component becomes cost-prohibitive first?</p>

<p>• Where does backpressure show up?</p>

<p>• What’s the critical path for latency?</p>

<p>You want to know where the system bends and where it breaks.</p>

<p>This is where senior engineers shine – spotting the performance cliffs before they appear in production.</p>

<p>⸻</p>

<p><strong>Step 4: Validate Operational Excellence (5 minutes)</strong></p>

<p>A system isn’t “done” when it works. It’s done when it can be operated.</p>

<p>Look for:</p>

<p>• Metrics identified per component</p>

<p>• Alarms tied to real failure modes, not vanity metrics</p>

<p>• Clear runbooks for disasters</p>

<p>• Observability across request boundaries</p>

<p>• Idempotency and retry strategies</p>

<p>If the design doc or architecture review never mentions alerts, dashboards, retries, or logs, it isn’t production-ready.</p>

<p>A system that can’t be operated will eventually fail – harder than it should.</p>

<p>⸻</p>

<p><strong>Step 5: Evaluate Data Consistency and Boundaries (5 minutes)</strong></p>

<p>Every distributed system is balancing tradeoffs:</p>

<p>• Latency vs durability</p>

<p>• Freshness vs availability</p>

<p>• Strong consistency vs eventual consistency</p>

<p>• Write amplification vs throughput</p>

<p>• Cost vs correctness</p>

<p>Great designs state these tradeoffs explicitly. Mediocre designs pretend they don’t exist.</p>

<p>Your job is not to enforce one model – but to ensure the model chosen matches customer expectations.</p>

<p>Example questions:</p>

<p>• What happens if two writes occur at the same time?</p>

<p>• Do clients read their own writes?</p>

<p>• What’s the reconciliation strategy for conflicts?</p>

<p>If no one can explain the consistency model, assume the architecture has hidden correctness risks.</p>

<p>⸻</p>

<p><strong>Step 6: Ask the “Tell Me the Story” Question (5 minutes)</strong></p>

<p>My favorite closing question in any architecture review:</p>

<p>“Walk me through the worst day this system has.”</p>

<p>On a bad day:</p>

<p>• a dependency is throttling,</p>

<p>• a region is degraded,</p>

<p>• a batch job is stuck,</p>

<p>• a rollback is in progress,</p>

<p>• the load is higher than expected.</p>

<p>A mature design has a believable story here.</p>

<p>An immature one melts.</p>

<p>This question reveals:</p>

<p>• Real operational risks</p>

<p>• Organizational dependencies</p>

<p>• Failure cascades</p>

<p>• Whether the team has truly internalized the design</p>

<p>If they can tell a good story, the architecture is usually good.</p>

<p>⸻</p>

<p><strong>Putting It All Together</strong></p>

<p>You don’t need a full day or a deep dive to evaluate a distributed system.</p>

<p>You need a structured, repeatable way to uncover:</p>

<p>• correctness risks</p>

<p>• scaling bottlenecks</p>

<p>• availability weaknesses</p>

<p>• operational gaps</p>

<p>• unclear tradeoffs</p>

<p>In 30 minutes, you can surface 80% of the biggest issues – long before code is written.</p>

<p>If you’re a senior engineer, tech lead, or engineering manager, build this skill. It becomes one of the most valuable tools you have.</p>]]></content><author><name>Aram Koukia</name></author><summary type="html"><![CDATA[How to Evaluate a Distributed System Architecture in 30 Minutes]]></summary></entry><entry><title type="html">Reviving the Blog: A New Focus on Technical Leadership and Scalable Engineering</title><link href="https://koukia.ca/2025/11/reviving-the-blog-a-new-focus-on-technical-leadership-and-scalable-engineering/" rel="alternate" type="text/html" title="Reviving the Blog: A New Focus on Technical Leadership and Scalable Engineering" /><published>2025-11-22T00:00:00+00:00</published><updated>2025-11-22T00:00:00+00:00</updated><id>https://koukia.ca/2025/11/reviving-the-blog-a-new-focus-on-technical-leadership-and-scalable-engineering</id><content type="html" xml:base="https://koukia.ca/2025/11/reviving-the-blog-a-new-focus-on-technical-leadership-and-scalable-engineering/"><![CDATA[<h2 id="reviving-the-blog-a-new-focus-on-technical-leadership-and-scalable-engineering">Reviving the Blog: A New Focus on Technical Leadership and Scalable Engineering</h2>

<p>For more than a decade, this blog has been a place where I explored deep technical problems – distributed systems quirks, backend architecture challenges, and the kind of engineering details that only show up when you’ve been building things long enough to know where they break.</p>

<p>Over the past few years, my work has changed. Today, as a Senior Manager at AWS, I spend far less time writing low-level code and far more time shaping systems, teams, and engineering cultures. The altitude is different, but the depth is not. If anything, the problems are bigger, more ambiguous, and more consequential.</p>

<p>It took me a while to realize that the blog can evolve with me.</p>

<p><strong>Why Revive the Blog Now?</strong></p>

<p>Engineering leadership today moves fast. AI is changing the developer workflow. Distributed systems are becoming more complex, not less. High-performing teams require clarity in decision-making, architecture, ownership, and operational discipline. These are the challenges that occupy my day now – and they’re also the topics I wish more people wrote honestly about.</p>

<p>Many engineers step into senior roles and suddenly find themselves solving problems they’ve never been trained for:</p>

<p>• How do you evaluate an architecture document when you’re not writing all the code yourself?</p>

<p>• How do you balance velocity with correctness at scale?</p>

<p>• How do you align teams without drowning in meetings?</p>

<p>• What does “raising the bar” actually mean in a large engineering organization?</p>

<p>These questions matter as much as the technology itself.</p>

<p><strong>What to Expect Going Forward</strong></p>

<p>This blog is shifting focus – but not abandoning depth. Here’s what I’ll be writing about in the coming months:</p>

<p><strong>Technical Leadership</strong></p>

<p>Practical frameworks, decision-making models, how to review designs, and how to stay technical as you grow into leadership.</p>

<p><strong>Building and Scaling Engineering Team</strong>s</p>

<p>From mentoring senior engineers to managing managers, handling ambiguity, building culture, and navigating cross-org alignment.</p>

<p><strong>Systems Thinking at Scale</strong></p>

<p>Not AWS specifics, but the universal principles behind high-availability architectures, operational excellence, and cost-aware engineering.</p>

<p><strong>Stories &amp; Lessons From the Field</strong></p>

<p>Without confidential details – but with honest reflections. The kind of things I wish I’d known earlier in my career.</p>

<p><strong>Why This Matters</strong></p>

<p>There’s a gap between the content written for new engineers and the content needed by people stepping into senior roles. Most engineers learn leadership the hard way – by stumbling through it.</p>

<p>If sharing my experiences helps even a handful of people make better decisions, grow faster, or avoid painful lessons, then reviving this blog is worth it.</p>]]></content><author><name>Aram Koukia</name></author><summary type="html"><![CDATA[Reviving the Blog: A New Focus on Technical Leadership and Scalable Engineering]]></summary></entry><entry><title type="html">How to pass parameters or querystring from API Gateway to AWS Lambda?</title><link href="https://koukia.ca/2023/04/how-to-pass-parameters-or-querystring-from-api-gateway-to-aws-lambda/" rel="alternate" type="text/html" title="How to pass parameters or querystring from API Gateway to AWS Lambda?" /><published>2023-04-16T00:00:00+00:00</published><updated>2023-04-16T00:00:00+00:00</updated><id>https://koukia.ca/2023/04/how-to-pass-parameters-or-querystring-from-api-gateway-to-aws-lambda</id><content type="html" xml:base="https://koukia.ca/2023/04/how-to-pass-parameters-or-querystring-from-api-gateway-to-aws-lambda/"><![CDATA[<h3 id="how-to-pass-parameters-or-querystring-from-api-gateway-to-awslambda">How to pass parameters or querystring from API Gateway to AWS Lambda?</h3>

<p><img src="https://cdn-images-1.medium.com/max/800/1*A5kIemGtjMaAcxs3lZIYxQ.png" alt="" /></p>

<p>Amazon API Gateway is a service that allows you to create, manage and secure APIs for your applications. One of the common use cases for API Gateway is to invoke AWS Lambda functions as backend services for your APIs. In this article, we will learn how to pass querystring or route parameters from your API requests to your Lambda functions using two different types of integrations: proxy and non-proxy.</p>

<h4 id="proxy-integration">Proxy integration</h4>

<p>Proxy integration is the recommended approach for invoking Lambda functions from API Gateway, as it simplifies the configuration and reduces the latency of your API responses. With proxy integration, you can pass the raw request from the client to the Lambda function as-is, without having to define any mapping templates or transformations. The Lambda function can access the request parameters such as headers, query strings, path parameters and body from the event object that is passed as an argument.</p>

<h4 id="to-enable-proxy-integration-for-your-api-method-follow-thesesteps">To enable proxy integration for your API method, follow these steps:</h4>

<ol>
  <li>Open the API Gateway console and choose your API.</li>
  <li>Choose the resource and the HTTP method that you want to configure.</li>
  <li>Choose Integration Request from the method execution panel.</li>
  <li>Select Lambda Function as the integration type and check the box for Use Lambda Proxy integration.</li>
  <li>Select the region and the name of your Lambda function and choose Save.</li>
</ol>

<p>Now you can test your API method using the Test button on the method execution panel. You can enter any querystring or path parameters in the URL and see how they are passed to the Lambda function in the event object.</p>

<p>For example, if you have a GET method for /user/{name} resource and you invoke it with /user/bob?age=25, you will see something like this in the event object:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{  "resource": "/user/{name}",  "path": "/user/bob",  "httpMethod": "GET",  "headers": {    // ...  },  "queryStringParameters": {    "age": "25"  },  "pathParameters": {    "name": "bob"  },  // ...}
</code></pre></div></div>

<p>You can access these parameters in your Lambda function code using dot notation, such as event.queryStringParameters.age or event.pathParameters.name.</p>

<h4 id="non-proxy-integration">Non-proxy integration</h4>

<p>Non-proxy integration is another option for invoking Lambda functions from API Gateway, but it requires more configuration and adds some overhead to your API responses. With non-proxy integration, you have to define mapping templates that transform the request parameters into a JSON payload that is sent to the Lambda function. The Lambda function can access these parameters from the JSON payload that is passed as an argument.</p>

<h4 id="to-enable-non-proxy-integration-for-your-api-method-follow-thesesteps">To enable non-proxy integration for your API method, follow these steps:</h4>

<ol>
  <li>Open the API Gateway console and choose your API.</li>
  <li>Choose the resource and the HTTP method that you want to configure.</li>
  <li>Choose Method Request from the method execution panel.</li>
  <li>Expand the URL Query String Parameters section and add any querystring parameters that you want to pass to your Lambda function. For example, if you want to pass a name parameter, enter name in the Name field and check the box for Required.</li>
  <li>Choose Integration Request from the method execution panel.</li>
  <li>Select Lambda Function as the integration type and uncheck the box for Use Lambda Proxy integration.</li>
  <li>Select the region and the name of your Lambda function and choose Save.</li>
  <li>Expand the Mapping Templates section and click on Add mapping template.</li>
  <li>Enter application/json in the Content-Type field and choose Method Request Passthrough from the Generate template dropdown menu.</li>
  <li>Modify the template code to include any querystring or path parameters that you want to pass to your Lambda function. For example, if you want to pass a name parameter, add this line in the template code: <code class="language-plaintext highlighter-rouge">"name": "$input.params('name')"</code></li>
  <li>Choose Save and deploy your API.</li>
</ol>

<p>Now you can test your API method using the Test button on the method execution panel. You can enter any querystring or path parameters in the URL and see how they are passed to the Lambda function in a JSON payload.</p>

<p>For example, if you have a GET method for /user resource and you invoke it with /user?name=bob, you will see something like this in the JSON payload:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{  "name": "bob"}
</code></pre></div></div>

<p>You can access these parameters in your Lambda function code using dot notation or bracket notation, such as event.name or event[‘name’].</p>

<h4 id="more-details-on-proxy-and-non-proxy-integrations">More details on Proxy and Non-Proxy integrations:</h4>

<p>Proxy integration is a type of integration where API Gateway passes the raw request from the client to the backend service (such as Lambda or HTTP endpoint) as-is, without any modifications or transformations. This means that you do not have to define any mapping templates or data mappings between the request and response parameters. The backend service can access the request parameters such as headers, query strings, path parameters and body from the event object (for Lambda) or the HTTP request object (for HTTP endpoint). Proxy integration simplifies the configuration and reduces the latency of your API responses. It also allows your backend service to evolve without having to change your API Gateway setup.</p>

<p>Non-proxy integration is a type of integration where API Gateway transforms the request from the client to a JSON payload that is sent to the backend service (such as Lambda or HTTP endpoint). This means that you have to define mapping templates and data mappings between the request and response parameters. The backend service can access the request parameters from the JSON payload that is passed as an argument. Non-proxy integration gives you more control and flexibility over your API design and behavior. It also allows you to reuse configured mapping templates for different backend services that have similar data formats.</p>

<p><strong>The following table summarizes some of the key differences between proxy and non-proxy integration:</strong></p>

<p><img src="https://cdn-images-1.medium.com/max/800/1*Cjpk68Vlt05LSjS1O38f3w.png" alt="" /></p>

<p>I hope this helps you understand the difference between proxy and non-proxy integration better.</p>]]></content><author><name>Aram Koukia</name></author><summary type="html"><![CDATA[Amazon API Gateway is a service that allows you to create, manage and secure APIs for your applications. One of the common use cases for…]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn-images-1.medium.com/max/800/1*A5kIemGtjMaAcxs3lZIYxQ.png" /><media:content medium="image" url="https://cdn-images-1.medium.com/max/800/1*A5kIemGtjMaAcxs3lZIYxQ.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Summary of Seeking SRE</title><link href="https://koukia.ca/2023/04/summary-of-seeking-sre/" rel="alternate" type="text/html" title="Summary of Seeking SRE" /><published>2023-04-12T00:00:00+00:00</published><updated>2023-04-12T00:00:00+00:00</updated><id>https://koukia.ca/2023/04/summary-of-seeking-sre</id><content type="html" xml:base="https://koukia.ca/2023/04/summary-of-seeking-sre/"><![CDATA[<h3 id="summary-of-seekingsre">Summary of Seeking SRE</h3>

<p><img src="https://cdn-images-1.medium.com/max/800/0*7LPepiMwyyba3oR2" alt="" /></p>

<p>Seeking SRE is a book that explores the diverse and evolving field of Site Reliability Engineering (SRE), which is a discipline that aims to ensure the reliability and performance of complex systems and applications. The book is curated and edited by David N. Blank-Edelman, and contains more than two dozen chapters written by different practitioners and leaders in the SRE world¹.</p>

<h4 id="the-book-covers-a-wide-range-of-topics-suchas"><strong>The book covers a wide range of topics, such as:</strong></h4>

<ul>
  <li>Different ways of implementing SRE and SRE principles in various settings, such as startups, enterprises, third parties, and non-dedicated teams.</li>
  <li>How SRE relates to other approaches such as DevOps, incident management, observability, and chaos engineering.</li>
  <li>Specialties on the cutting edge that will soon be commonplace in SRE, such as machine learning, security, ethics, and sustainability.</li>
  <li>Best practices and technologies that make practicing SRE easier, such as metrics, dashboards, automation, playbooks, and postmortems.</li>
  <li>The important but rarely explored human side of SRE, such as hiring, interviewing, diversity, inclusion, burnout, culture, and communication.</li>
</ul>

<p>The book is intended to bring readers into some of the important conversations going on in the SRE field right now, and to inspire them to seek their own ways of applying SRE principles to their own contexts. The book is not a prescriptive guide or a definitive reference, but rather a collection of perspectives and experiences that showcase the breadth and depth of SRE.</p>

<h4 id="some-of-the-key-takeaways-from-thebook">Some of the key takeaways from the book</h4>

<ul>
  <li>SRE is not a one-size-fits-all solution. It can be adapted to different organizations, teams, systems, and goals. There is no single right way to do SRE.</li>
  <li>SRE is not just about technical skills or tools. It also requires a mindset of continuous learning, improvement, collaboration, and ownership. It also involves balancing trade-offs between reliability and innovation.</li>
  <li>SRE is not only about systems. It is also about people. People are the ones who design, build, operate, maintain, and use systems. People are also the ones who can suffer from stress, fatigue, frustration, and dissatisfaction when systems fail or perform poorly. SRE should aim to improve both the quality of systems and the quality of life for people.</li>
</ul>

<p>Seeking SRE is a book that explores the diverse and evolving field of Site Reliability Engineering (SRE), which is a discipline that aims to ensure the reliability and performance of complex systems and applications. The book contains more than two dozen chapters written by different practitioners and leaders in the SRE world, covering topics such as implementation strategies, best practices, cutting-edge specialties, and human aspects of SRE. The book is intended to bring readers into some of the important conversations going on in the SRE field right now, and to inspire them to seek their own ways of applying SRE principles to their own contexts. The book showcases the breadth and depth of SRE as a field that can be adapted to different situations and goals, that requires both technical skills and a mindset of continuous learning and improvement, and that involves balancing trade-offs between reliability and innovation while caring for both systems and people.</p>

<h4 id="some-examples-of-sre-inpractice"><strong>Some examples of SRE in practice</strong></h4>

<ul>
  <li>Google, which pioneered the SRE model and has shared its best practices and case studies on topics such as service level objectives (SLOs), incident management, postmortems, and automation.</li>
  <li>PagerDuty, which provides a platform for incident response and has adopted and adapted the Incident Command System (ICS) framework to coordinate and communicate during incidents.</li>
  <li>Standard Chartered Bank, which has been implementing SRE as its primary support model and has improved its engineering culture and capabilities, as well as its reliability and performance metrics.</li>
  <li>Moogsoft, which provides an observability platform that leverages artificial intelligence and automation to help SRE teams detect and resolve incidents faster and more efficiently.</li>
</ul>

<h4 id="some-challenges-of-implementing-sre">Some challenges of implementing SRE</h4>

<ul>
  <li>Following the methodology: SRE is a prescriptive approach that requires a clear understanding of its principles, practices, and tools. It also requires a commitment to adopt a culture of reliability, ownership, and collaboration among different teams and stakeholders.</li>
  <li>SRE training: SRE involves a combination of technical skills and soft skills that may not be readily available or familiar to existing engineers or operators. It may require investing in training programs, mentoring, or hiring to build up the SRE capabilities and mindset.</li>
  <li>Getting stakeholders on your side: SRE may face resistance or skepticism from some stakeholders who are used to traditional ways of working or who are concerned about the costs or risks of changing the status quo. It may require convincing them of the benefits and value of SRE, as well as addressing their fears and expectations.</li>
  <li>Simulations: SRE relies on simulations such as load testing, chaos engineering, and disaster recovery drills to test and improve the reliability and resilience of systems. However, these simulations may be challenging to design, execute, and analyze, especially for complex or distributed systems.</li>
  <li>Finding practitioners: SRE is a relatively new and evolving field that may not have a large pool of experienced or qualified practitioners. It may be hard to find or recruit SREs who have the right mix of skills, knowledge, and attitude for the role.</li>
</ul>]]></content><author><name>Aram Koukia</name></author><summary type="html"><![CDATA[Seeking SRE is a book that explores the diverse and evolving field of Site Reliability Engineering (SRE), which is a discipline that aims…]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn-images-1.medium.com/max/800/0*7LPepiMwyyba3oR2" /><media:content medium="image" url="https://cdn-images-1.medium.com/max/800/0*7LPepiMwyyba3oR2" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">How do I give access to a third party application to access my AWS account in a read-only mode?</title><link href="https://koukia.ca/2023/01/how-do-i-give-access-to-a-third-party-application-to-access-my-aws-account-in-a-read-only-mode/" rel="alternate" type="text/html" title="How do I give access to a third party application to access my AWS account in a read-only mode?" /><published>2023-01-31T00:00:00+00:00</published><updated>2023-01-31T00:00:00+00:00</updated><id>https://koukia.ca/2023/01/how-do-i-give-access-to-a-third-party-application-to-access-my-aws-account-in-a-read-only-mode</id><content type="html" xml:base="https://koukia.ca/2023/01/how-do-i-give-access-to-a-third-party-application-to-access-my-aws-account-in-a-read-only-mode/"><![CDATA[<h3 id="how-do-i-give-access-to-a-third-party-application-to-access-my-aws-account-in-a-read-only-mode">How do I give access to a third party application to access my AWS account in a read-only mode?</h3>

<p><img src="https://cdn-images-1.medium.com/max/800/0*K2xa6s0s_8JxD37E.png" alt="" /><em>Image from <a href="https://www.msp360.com/">mps360.com</a></em></p>

<p>To give a third-party application read-only access to your AWS account information, you can use the AWS Identity and Access Management (IAM) service. Here are the steps:</p>

<ol>
  <li>Create an IAM user for the third-party application with read-only permissions.</li>
  <li>Attach a policy to the user that grants read-only access to the AWS resources you want the third-party application to access.</li>
  <li>Generate an AWS Access Key ID and Secret Access Key for the user, which the third-party application can use to authenticate API requests.</li>
  <li>Provide the third-party application with the AWS Access Key ID, Secret Access Key, and the AWS region to be used.</li>
</ol>

<p>Note: Be cautious when granting access to a third-party application and make sure to review the permissions you are granting and the data that will be accessible.</p>]]></content><author><name>Aram Koukia</name></author><summary type="html"><![CDATA[To give a third-party application read-only access to your AWS account information, you can use the AWS Identity and Access Management…]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn-images-1.medium.com/max/800/0*K2xa6s0s_8JxD37E.png" /><media:content medium="image" url="https://cdn-images-1.medium.com/max/800/0*K2xa6s0s_8JxD37E.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">What does the next 2 to 3 years look like for generative AI?</title><link href="https://koukia.ca/2023/01/what-does-the-next-2-to-3-years-look-like-for-generative-ai/" rel="alternate" type="text/html" title="What does the next 2 to 3 years look like for generative AI?" /><published>2023-01-31T00:00:00+00:00</published><updated>2023-01-31T00:00:00+00:00</updated><id>https://koukia.ca/2023/01/what-does-the-next-2-to-3-years-look-like-for-generative-ai</id><content type="html" xml:base="https://koukia.ca/2023/01/what-does-the-next-2-to-3-years-look-like-for-generative-ai/"><![CDATA[<h3 id="what-does-the-next-2-to-3-years-look-like-for-generative-ai">What does the next 2 to 3 years look like for generative AI?</h3>

<p><img src="https://cdn-images-1.medium.com/max/800/0*9KdhdbXc3lYylGVT.jpg" alt="" /><em>Image from <a href="https://arstechnica.com/">https://arstechnica.com/</a></em></p>

<p>Generative AI seems to be everywhere these days and the bets are, this is jut the beginning and it will be more present in our lives in several industries. Here are just a few to expect:</p>

<p>In the next 2 to 3 years, we can expect to see an increase in the adoption of generative AI across several industries including:</p>

<ol>
  <li><strong>Healthcare:</strong> Generative AI can help in drug discovery, personalized treatment plans and analysis of medical images.</li>
  <li><strong>Art &amp; Design:</strong> AI-powered tools will become more accessible to artists, designers and marketers for creating unique visual content.</li>
  <li><strong>E-commerce:</strong> AI models can generate product descriptions, customer reviews, and product recommendations.</li>
  <li><strong>Finance:</strong> AI-powered tools will be used for fraud detection, credit scoring, and financial forecasting.</li>
  <li><strong>Manufacturing:</strong> Generative AI can help in creating optimized production schedules, improving supply chain management, and prototyping new products.</li>
</ol>

<p>However, it is important to note that AI adoption will also depend on the specific limitations and ethical considerations of the industry, as well as the progress of AI research and development.</p>

<h4 id="how-long-until-the-government-will-try-to-regulate-generative-ai">How long until the government will try to regulate generative AI?</h4>

<p>It’s difficult to predict exactly when governments will start to regulate generative AI, as it depends on a variety of factors such as the pace of AI development, public opinion, and government priorities. However, with the increasing use and potential impact of generative AI, it is likely that governments will start taking regulatory measures in the near future.</p>

<p>In recent years, governments around the world have started taking steps to regulate AI and its applications. For example, the European Union has introduced the General Data Protection Regulation (GDPR) which affects AI applications, and some countries have started to consider regulations specifically targeting AI.</p>

<p>It’s important for governments to balance the benefits and potential risks of generative AI, while also considering the impact on businesses, citizens, and the overall economy. Overall, it can be expected that the regulation of generative AI will be a gradual process, shaped by a combination of technical advancements and public discourse.</p>]]></content><author><name>Aram Koukia</name></author><summary type="html"><![CDATA[Generative AI seems to be everywhere these days and the bets are, this is jut the beginning and it will be more present in our lives in…]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn-images-1.medium.com/max/800/0*9KdhdbXc3lYylGVT.jpg" /><media:content medium="image" url="https://cdn-images-1.medium.com/max/800/0*9KdhdbXc3lYylGVT.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">3 Levels That You Should Operate at as a Mentor</title><link href="https://koukia.ca/2023/01/3-levels-that-you-should-operate-at-as-a-mentor/" rel="alternate" type="text/html" title="3 Levels That You Should Operate at as a Mentor" /><published>2023-01-28T00:00:00+00:00</published><updated>2023-01-28T00:00:00+00:00</updated><id>https://koukia.ca/2023/01/3-levels-that-you-should-operate-at-as-a-mentor</id><content type="html" xml:base="https://koukia.ca/2023/01/3-levels-that-you-should-operate-at-as-a-mentor/"><![CDATA[<h3 id="3-levels-that-you-should-operate-at-as-amentor">3 Levels That You Should Operate at as a Mentor</h3>

<p><img src="https://cdn-images-1.medium.com/max/800/0*Vgb5FgnguqRFSX9a" alt="" /><em>Image from Forbes.com</em></p>

<p>As a mentor, you should operate at 3 levels:</p>

<h4 id="1-goals-figuring-out-what-they-reallywant">1. Goals: Figuring out what they really want</h4>

<h4 id="2-situations-handling-the-unfamiliar-or-difficult">2. Situations: Handling the unfamiliar or difficult</h4>

<h4 id="3-skills-gettingpromoted">3. Skills : Getting promoted</h4>

<h3 id="goals">Goals</h3>

<h4 id="telling-someone-what-they-should-want-isnt-as-powerful-as-helping-them-discover-it-for-themself">Telling someone what they should want isn’t as powerful as helping them discover it for themself.</h4>

<p>Goals are most meaningful when they are deeply understood.</p>

<p>The best goals come from within.</p>

<p>In the simplest form, it’s the “where do you see yourself in five years?” question, but that’s a big leap for most people to take in a way that’s authentic and not what they think they ought to say or what the mentor wants to hear.</p>

<p>Instead, probe for how well they understand their current situation:</p>

<ul>
  <li>What’s going well?</li>
  <li>What’s not going well?</li>
  <li>What about your role do you enjoy the most?</li>
  <li>What’s most frustrating?</li>
  <li>If you could change one thing, what would it be and why?</li>
</ul>

<h3 id="situations">SITUATIONS</h3>

<h4 id="to-mentor-situations-tellstories">To mentor situations, tell stories.</h4>

<p>Faced with the question “what should I do?”, a mentor should resist the urge to recommend and should look for an opportunity to tell a personal story instead.</p>

<p>Why answer indirectly with a story?</p>

<ul>
  <li>Sharing a related experience reassures a mentee that they’re not alone</li>
  <li>Stories engage the listener’s brain, helping them focus more completely on what they’re being told rather than their own problems</li>
  <li>Stories let a mentee consider a situation through an abstraction — when they aren’t the protagonist of their own, immediate problem, they have a chance to see a situation more objectively and consider different perspectives.</li>
  <li>Finally, it preserves their agency and sense of control. A story is a teaching tool — “this worked for me” — but you leave the decisions up to them.</li>
</ul>

<p><strong>IMPORTANT: Be honest if you haven’t experienced a situation personally.</strong></p>

<h3 id="skills">SKILLS</h3>

<h3 id="to-mentor-skills-you-have-to-observe-the-mentees-in-action-oroutput">To mentor skills, you have to observe the mentee’s in action or output.</h3>

<ul>
  <li>For coding skills, code review or pair programming.</li>
  <li>For communication skills, sit in on a meeting they expect to actively participate in or watch them practice a presentation.</li>
  <li>For technical writing, read what they’ve written.</li>
</ul>

<p><strong>The MOST IMPORTANT thing ON MENTORING is to PROVIDE ACTIONABLE FEEDBACK.</strong></p>

<p>It means being specific about your observations, what they need to learn or practice in order to improve &amp; providing direction about what they could have done differently.</p>

<p>If your mentee doesn’t know what to do next, your feedback wasn’t actionable.</p>

<p>Mentoring is about listening.</p>

<p>Resist the temptation to offer unsolicited advice.</p>

<p>Final Tip: Use The Career Ladder for Growth Conversations w/ your Mentor:</p>

<p>Look at the level above your current one.</p>

<p>For every item, ask:</p>

<ul>
  <li>Where do you see me on this?</li>
  <li>What am I missing, specifically?</li>
  <li>What steps can I take to demonstrate it?</li>
  <li>What support will I need to do that?</li>
</ul>]]></content><author><name>Aram Koukia</name></author><summary type="html"><![CDATA[As a mentor, you should operate at 3 levels:]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn-images-1.medium.com/max/800/0*Vgb5FgnguqRFSX9a" /><media:content medium="image" url="https://cdn-images-1.medium.com/max/800/0*Vgb5FgnguqRFSX9a" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">How can I list all the resources available in my AWS account?</title><link href="https://koukia.ca/2023/01/how-can-i-list-all-the-resources-available-in-my-aws-account/" rel="alternate" type="text/html" title="How can I list all the resources available in my AWS account?" /><published>2023-01-21T00:00:00+00:00</published><updated>2023-01-21T00:00:00+00:00</updated><id>https://koukia.ca/2023/01/how-can-i-list-all-the-resources-available-in-my-aws-account</id><content type="html" xml:base="https://koukia.ca/2023/01/how-can-i-list-all-the-resources-available-in-my-aws-account/"><![CDATA[<h3 id="how-can-i-list-all-the-resources-available-in-my-awsaccount">How can I list all the resources available in my AWS account?</h3>

<p><img src="https://cdn-images-1.medium.com/max/800/0*f6U7Z5d-HOPL-y_4.png" alt="" /></p>

<p>This used to be a really hard problem on AWS but not anymore (At least for most of the resource types).</p>

<p>AWS Resource Explorer is a tool that allows you to explore and discover the resources in your AWS account. It allows you to view, search, and filter the resources across all regions and services in your AWS account.</p>

<p>You can use the Resource Explorer to list all the resources available in your AWS account by following these steps:</p>

<ol>
  <li>Go to the AWS Resource Explorer website (<a href="https://aws.amazon.com/resource-explorer/">https://aws.amazon.com/resource-explorer/</a>)</li>
  <li>Sign in to your AWS account if prompted.</li>
  <li>On the homepage, you will see a list of all the services that are supported by Resource Explorer.</li>
  <li>Select the service that you want to view resources for.</li>
  <li>You can use the search bar or filter options to narrow down the list of resources.</li>
  <li>The resources will be displayed in a tree-like structure, you can click on a resource to view more information about it.</li>
</ol>

<p>You can also use the AWS CLI or SDKs to access the Resource Explorer.</p>

<p><code class="language-plaintext highlighter-rouge">aws resource-explorer list-resources</code> command in the AWS CLI can be used to list all the available resources in the account.</p>

<p>To use the AWS SDK, you can use the SDK’s API calls to list the resources available in your account.</p>

<p>It’s important to note that the Resource Explorer is a relatively new service and not all resources and services are available on it yet.</p>]]></content><author><name>Aram Koukia</name></author><summary type="html"><![CDATA[This used to be a really hard problem on AWS but not anymore (At least for most of the resource types).]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn-images-1.medium.com/max/800/0*f6U7Z5d-HOPL-y_4.png" /><media:content medium="image" url="https://cdn-images-1.medium.com/max/800/0*f6U7Z5d-HOPL-y_4.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">How to extract structured data from websites using Scrapy?</title><link href="https://koukia.ca/2023/01/how-to-extract-structured-data-from-websites-using-scrapy/" rel="alternate" type="text/html" title="How to extract structured data from websites using Scrapy?" /><published>2023-01-19T00:00:00+00:00</published><updated>2023-01-19T00:00:00+00:00</updated><id>https://koukia.ca/2023/01/how-to-extract-structured-data-from-websites-using-scrapy</id><content type="html" xml:base="https://koukia.ca/2023/01/how-to-extract-structured-data-from-websites-using-scrapy/"><![CDATA[<h3 id="how-to-extract-structured-data-from-websites-usingscrapy">How to extract structured data from websites using Scrapy?</h3>

<p><img src="https://cdn-images-1.medium.com/max/800/0*mSo_7vtqTgm87JPU" alt="" /><em>Image from github.om</em></p>

<p>Scrapy is an open-source and collaborative web crawling framework for Python. It is used for extracting the data from websites and can be used for a wide range of purposes such as data mining, data processing or historical archival. Scrapy provides an integrated way for following links and extracting data from the pages it crawls, and it can also be extended to handle more advanced functionality such as logging in to websites or handling cookies.</p>

<p>Scrapy allows you to extract structured data from websites using its built-in support for selecting and extracting data using CSS selectors and XPath expressions. Here is a general process of how to extract structured data using Scrapy:</p>

<ol>
  <li>Create a new Scrapy project using the command <code class="language-plaintext highlighter-rouge">scrapy startproject projectname</code>.</li>
  <li>Create a new spider using the command <code class="language-plaintext highlighter-rouge">scrapy genspider spidername website.com</code>.</li>
  <li>Define the start URL(s) for the spider by adding them to the <code class="language-plaintext highlighter-rouge">start_urls</code> list in the spider class.</li>
  <li>Define a parse method in the spider class that will be called with the HTTP response of the start URL(s).</li>
  <li>Use the <code class="language-plaintext highlighter-rouge">response.css()</code> or <code class="language-plaintext highlighter-rouge">response.xpath()</code> method to select elements from the page and extract the data you want.</li>
  <li>Define the structure of the extracted data by creating an item class that inherits from <code class="language-plaintext highlighter-rouge">scrapy.Item</code> and defines the fields you want to extract.</li>
  <li>Use the <code class="language-plaintext highlighter-rouge">yield</code> statement to return an instance of the item class populated with the extracted data.</li>
  <li>Run the spider using the command <code class="language-plaintext highlighter-rouge">scrapy crawl spidername</code></li>
</ol>

<p>Here is a simple example of how to extract data from a webpage using Scrapy:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import scrapyclass MySpider(scrapy.Spider):    name = "myspider"    start_urls = ["http://www.example.com"]    def parse(self, response):        title = response.css("title::text").get()        yield {"title": title}
</code></pre></div></div>

<p>This example spider will extract the title of the page from the start URL and return it as a dictionary. You can then use the <code class="language-plaintext highlighter-rouge">yield</code> statement to return an instance of the item class instead of a dictionary.</p>]]></content><author><name>Aram Koukia</name></author><summary type="html"><![CDATA[Scrapy is an open-source and collaborative web crawling framework for Python. It is used for extracting the data from websites and can be…]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn-images-1.medium.com/max/800/0*mSo_7vtqTgm87JPU" /><media:content medium="image" url="https://cdn-images-1.medium.com/max/800/0*mSo_7vtqTgm87JPU" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">What does the “yield” keyword do in python?</title><link href="https://koukia.ca/2023/01/what-does-the-yield-keyword-do-in-python/" rel="alternate" type="text/html" title="What does the “yield” keyword do in python?" /><published>2023-01-19T00:00:00+00:00</published><updated>2023-01-19T00:00:00+00:00</updated><id>https://koukia.ca/2023/01/what-does-the-yield-keyword-do-in-python</id><content type="html" xml:base="https://koukia.ca/2023/01/what-does-the-yield-keyword-do-in-python/"><![CDATA[<h3 id="what-does-the-yield-keyword-do-inpython">What does the “yield” keyword do in python?</h3>

<p><img src="https://cdn-images-1.medium.com/max/800/0*B1rQIcFPUzcv9vku.png" alt="" /><em>Image from <a href="https://betterprogramming.pub/">https://betterprogramming.pub/</a></em></p>

<p>In Python, the “yield” keyword is used in the body of a function definition. When a function is called with a “yield” statement, it returns a generator object, but does not start execution immediately. The code in the function is executed only when the generator’s next() method is called. Each time the yield statement is executed, the function’s state is saved and the function is suspended, so that when the function is later resumed, execution continues from the point at which it was suspended. This allows the function to produce a series of values over time, rather than computing them all at once and returning them in a list, for example.</p>

<p>Here’s an example of a simple function that uses the “yield” keyword:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>def simple_generator():    yield 1    yield 2    yield 3for i in simple_generator():    print(i)
</code></pre></div></div>

<p>This will output:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>123
</code></pre></div></div>

<p>Here’s another example that uses a loop to generate a sequence of numbers:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>def count_up_to(max):    count = 1    while count &lt;= max:        yield count        count += 1for num in count_up_to(5):    print(num)
</code></pre></div></div>

<p>This will output:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>12345
</code></pre></div></div>

<p>It’s important to note that when a generator function is called, it returns a generator object, but does not start execution immediately. The code in the function is only executed when the generator’s next() method is called. In the above examples, the for loop called the generator’s next() method behind the scene and that’s why the code inside the function was executed.</p>]]></content><author><name>Aram Koukia</name></author><summary type="html"><![CDATA[In Python, the “yield” keyword is used in the body of a function definition. When a function is called with a “yield” statement, it returns…]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn-images-1.medium.com/max/800/0*B1rQIcFPUzcv9vku.png" /><media:content medium="image" url="https://cdn-images-1.medium.com/max/800/0*B1rQIcFPUzcv9vku.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>