<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Codable - Medium]]></title>
        <description><![CDATA[We’re sharing our world, via codes. - Medium]]></description>
        <link>https://medium.com/codable?source=rss----d2b12a6bf306---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Codable - Medium</title>
            <link>https://medium.com/codable?source=rss----d2b12a6bf306---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 19 May 2026 19:29:42 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/codable" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[PgCat: The Modern Proxy Solution for PostgreSQL]]></title>
            <link>https://medium.com/codable/pgcat-the-modern-proxy-solution-for-postgresql-938a41755f91?source=rss----d2b12a6bf306---4</link>
            <guid isPermaLink="false">https://medium.com/p/938a41755f91</guid>
            <category><![CDATA[pgcat]]></category>
            <dc:creator><![CDATA[ÖMER FARUK İÇEN]]></dc:creator>
            <pubDate>Fri, 27 Jun 2025 06:05:46 GMT</pubDate>
            <atom:updated>2025-06-27T06:05:46.675Z</atom:updated>
            <content:encoded><![CDATA[<p>PostgreSQL is a powerful open-source relational database, but as workloads grow, managing connections and scaling reads/writes becomes challenging. Traditional solutions like PgBouncer and PgPool-II have served well but come with limitations in modern cloud-native environments.Unlike traditional solutions, PgCat supports multi-tenant architectures and is optimized for high concurrency.</p><h3>Key Features and Comparative Advantages</h3><h4><strong>1. Read/Write Splitting</strong></h4><ul><li>Automatically routes SELECT queries to read replicas and INSERT, UPDATE, DELETE, and other write queries to the primary node.</li><li>Uses SQL parsing to determine the type of query.</li><li>Helps in scaling read-heavy workloads by offloading read operations to replicas.</li></ul><p><strong>Advantage over PgPool-II:</strong></p><ul><li>More accurate query classification</li><li>Lower latency routing decisions</li><li>Simpler configuration</li></ul><h4><strong>2. Connection Pooling</strong></h4><ul><li>Reduces the overhead of establishing new connections by pooling and reusing existing ones.</li><li>Supports per-user and per-database connection pools.</li><li>Configurable pool sizes and timeouts.</li></ul><p><strong>Alternative : Pgbouncer</strong></p><ul><li><strong>PgCat </strong>is a multi-threaded proxy written in Rust using the Tokio asynchronous runtime.<strong> Pgbouncer</strong> is a single-threaded proxy written in C based on libevent. <strong>PgCat </strong>is multi-threaded so it can benefit from more CPU cores on the machine it runs on.</li><li><strong>PgBouncer:</strong> Requires a restart or admin commands to reload configuration, which can disrupt active connections. <strong>PgCat:</strong> Supports <strong>hot reloads with zero downtime</strong> — config changes (like adding pools or nodes) apply live.</li></ul><p><a href="https://www.tembo.io/blog/postgres-connection-poolers">https://www.tembo.io/blog/postgres-connection-poolers</a></p><h4><strong>3. Replica Lag Awareness</strong></h4><ul><li>PgCat can track replication lag of read replicas and avoid sending queries to lagging replicas.</li><li>Helps ensure data freshness for read queries when consistency is important.</li></ul><p><strong>Alternative : PgPool|| and Patroni HA proxy</strong></p><ul><li>Pgpool-II supports replica lag monitoring, but it is not as advanced or as easily configurable as PgCat in this regard. It is a more traditional solution with broader features, but it is more limited and complex when it comes to lag awareness.</li><li>Patroni is a high-availability solution for PostgreSQL. When used together with HAProxy, HAProxy can route queries based on lag status or health check results. However, lag awareness in this setup may still require custom configuration and scripting.</li></ul><h4><strong>4. Automatic Failover Handling</strong></h4><p>Supports automatic failover to a new primary if the existing primary becomes unavailable. (Alternative: Patroni &amp; PgPool||)</p><h4><strong>5. Multi-Tenant and Multi-Database Support</strong></h4><ul><li>Can serve multiple databases and tenants from a single PgCat instance.</li><li>Each pool configuration can have its own primary and replicas.</li></ul><h4><strong>6. Config Reloading Without Restart</strong></h4><ul><li>Configuration can be reloaded on the fly (e.g., adding/removing replicas or changing settings) without restarting PgCat.</li></ul><h4><strong>7. Lightweight and Fast</strong></h4><ul><li>Written in Rust for performance and safety.</li><li>Designed to handle thousands of concurrent connections efficiently.</li></ul><h4><strong>8. Observability</strong></h4><ul><li>Exposes Prometheus-compatible metrics.</li><li>Logging and monitoring features help track query distribution, pool usage, and replica health.</li><li>Sample metrics endpoint settings:</li></ul><pre>curl http://localhost:9930/metrics</pre><h3>Hands-On Demonstration</h3><p>Let’s set up the application and create an example using Docker Compose</p><pre>version: &#39;3.8&#39;<br>x-postgres-common:<br>  &amp;postgres-common<br>  image: postgres:14-alpine<br>  user: postgres<br>  restart: always<br>  healthcheck:<br>    test: &#39;pg_isready -U postgres --dbname=postgres&#39;<br>    interval: 10s<br>    timeout: 5s<br>    retries: 5<br><br>services:<br>  postgres_primary:<br>    &lt;&lt;: *postgres-common<br>    ports:<br>      - 5434:5432<br>    environment:<br>      POSTGRES_USER: postgres<br>      POSTGRES_DB: postgres<br>      POSTGRES_PASSWORD: postgres<br>    command: |<br>      postgres <br>      -c wal_level=replica <br>      -c hot_standby=on <br>      -c max_wal_senders=10 <br>      -c max_replication_slots=10 <br>      -c hot_standby_feedback=on<br>      -c hba_file=/etc/postgresql/pg_hba.conf<br>      -c logging_collector=on<br>      -c log_directory=/var/lib/postgresql/data/logs<br>      -c log_filename=postgresql.log<br>      -c log_statement=all<br>      -c log_connections=on<br>      -c log_disconnections=on      <br>    volumes:<br>      - ./pg_hba.conf:/etc/postgresql/pg_hba.conf<br>      - ./00_init.sql:/docker-entrypoint-initdb.d/00_init.sql<br><br>  postgres_replica:<br>    &lt;&lt;: *postgres-common<br>    ports:<br>      - 5433:5432<br>    environment:<br>      PGUSER: replicator<br>      PGPASSWORD: replicator_password<br>    command: |<br>    <br>      bash -c &quot;<br>      until pg_basebackup --pgdata=/var/lib/postgresql/data -R --slot=replication_slot --host=postgres_primary --port=5432<br>      do<br>      echo &#39;Waiting for primary to connect...&#39;<br>      sleep 1s<br>      done<br>      echo &#39;Backup done, starting replica...&#39;<br>      chmod 0700 /var/lib/postgresql/data<br><br>      exec postgres \<br>      -c logging_collector=on \<br>      -c log_directory=/var/lib/postgresql/data/logs \<br>      -c log_filename=postgresql.log \<br>      -c log_statement=all \<br>      -c log_connections=on \<br>      -c log_disconnections=on \<br>      -c log_destination=stderr<br>      &quot;<br>    depends_on:<br>      - postgres_primary<br>  pgcat:<br>    build: .<br>    command:<br>      - &quot;pgcat&quot;<br>      - &quot;/etc/pgcat/pgcat.toml&quot;<br>    volumes:<br>      - &quot;${PWD}/examples/docker/pgcat.toml:/etc/pgcat/pgcat.toml&quot;<br>    ports:<br>      - &quot;6432:6432&quot;<br>      - &quot;9930:9930&quot;<br>    depends_on:<br>      - postgres_replica</pre><p>init.sql</p><pre>create user replicator with replication encrypted password &#39;replicator_password&#39;;<br>select pg_create_physical_replication_slot(&#39;replication_slot&#39;);<br><br><br>GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO replicator;<br>ALTER DEFAULT PRIVILEGES IN SCHEMA public<br>GRANT ALL ON TABLES TO replicator;</pre><p>pgcat.toml.yml is the configuration file used to define PGCat settings<br>Configurations for Read-Write Splitting:</p><pre>[general]<br>host = &quot;0.0.0.0&quot;<br>port = 6432<br><br># Whether to enable prometheus exporter or not.<br>enable_prometheus_exporter = false<br><br># Port at which prometheus exporter listens on.<br>prometheus_exporter_port = 9930<br><br># How long to wait before aborting a server connection (ms).<br>connect_timeout = 5000<br><br># How much time to give `SELECT 1` health check query to return with a result (ms).<br>healthcheck_timeout = 1000<br><br># How long to keep connection available for immediate re-use, without running a healthcheck query on it<br>healthcheck_delay = 30000<br><br># How much time to give clients during shutdown before forcibly killing client connections (ms).<br>shutdown_timeout = 60000<br><br># For how long to ban a server if it fails a health check (seconds).<br>ban_time = 60 # seconds<br><br># If we should log client connections<br>log_client_connections = false<br><br># If we should log client disconnections<br>log_client_disconnections = false<br><br>admin_username = &quot;postgres&quot;<br>admin_password = &quot;postgres&quot;<br>[pools.postgres]<br>pool_mode = &quot;transaction&quot;<br>default_role = &quot;any&quot;<br><br><br>query_parser_enabled = true<br>query_parser_read_write_splitting = true<br><br>primary_reads_enabled = true<br>sharding_function = &quot;pg_bigint_hash&quot;<br>[pools.postgres.users.0]<br>username = &quot;postgres&quot;<br>password = &quot;postgres&quot;<br>pool_size = 50<br>statement_timeout = 0<br>[pools.postgres.shards.0]<br>servers = [<br>    [ &quot;postgres_primary&quot;, 5432, &quot;primary&quot; ],<br>    [ &quot;postgres_replica&quot;, 5432, &quot;replica&quot; ]<br>]<br>database = &quot;postgres&quot;</pre><p>First, access the primary PostgreSQL container:</p><pre>docker exec -it pgcat-main-postgres_primary-1 sh<br>psql -U postgres<br>CREATE TABLE product (<br>    id SERIAL PRIMARY KEY,<br>    product VARCHAR(255)<br>);<br>INSERT INTO product (product) VALUES (&#39;Laptop&#39;);<br>INSERT INTO product (product) VALUES (&#39;Smartphone&#39;);</pre><p>Let’s run the container and connect to the PgCat using psql:</p><pre>docker exec -it pgcat-main-postgres_replica-1 sh<br>psql -h 127.0.0.1 -p 6432 -U postgres <br><br>Select * from product;<br></pre><p><strong>You can easily observe this in the secondary logs.</strong></p><pre>tail -f /var/lib/postgresql/data/logs/postgresql.log</pre><p>Now, let’s continue exploring the configuration file in more detail.</p><p><strong>Thread Settings</strong></p><pre>path: general.worker_threads<br>default: 5</pre><p>Number of worker threads the Runtime will use (4 by default).</p><h4>Pooling Settings</h4><p>Furthermore, you can configure connection pooling on a per-user basis under the pools.&lt;pool_name&gt;.users.&lt;user_index&gt; section.</p><pre>pools:<br>  my_pool:<br>    pool_mode: &quot;transaction&quot;  # Connection mode: &quot;session&quot; or &quot;transaction&quot;<br>    load_balancing_mode: &quot;random&quot;  # Load balancing algorithm: &quot;random&quot;, &quot;loc&quot; (least connections)<br>    default_role: &quot;any&quot;  # Default routing: &quot;any&quot;, &quot;replica&quot;, &quot;primary&quot;<br>    query_parser_enabled: true  # Whether SQL query parsing is enabled<br>    primary_reads_enabled: true  # Whether primary can be used for read queries<br>    idle_timeout: 40000  # Connection idle timeout (milliseconds)<br>    connect_timeout: 3000  # Connection establishment timeout (milliseconds)</pre><h4>Multi Database Connection Settings</h4><pre>path: pools.database<br>default: &quot;shard0&quot;<br>path: pools.database2<br>default: &quot;shard1&quot;</pre><h4>primary_reads_enabled</h4><p>If the query parser is enabled and this setting is enabled, the primary will be part of the pool of databases used for load balancing of read queries. Otherwise, the primary will only be used for write queries. The primary can always be explicitly selected with our custom protocol.</p><pre>path: pools.&lt;pool_name&gt;.primary_reads_enabled<br>default: true</pre><h4><strong>Conclusion</strong></h4><p>PGCat helps you scale your PostgreSQL infrastructure efficiently — with minimal configuration and maximum flexibility.If you’re looking for a transparent, performant way to enhance your database connectivity layer without rewriting your application logic, <strong>PGCat is definitely worth trying</strong>.</p><p><strong>References<br></strong><a href="https://github.com/postgresml/pgcat">https://github.com/postgresml/pgcat</a></p><p><strong>Example:</strong><br><a href="https://github.com/postgresml/pgcat">https://github.com/omerfarukicen/pgcat</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=938a41755f91" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codable/pgcat-the-modern-proxy-solution-for-postgresql-938a41755f91">PgCat: The Modern Proxy Solution for PostgreSQL</a> was originally published in <a href="https://medium.com/codable">Codable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Aligning Architecture with Business Reality: A Practical Guide to Domain-Driven Design and…]]></title>
            <link>https://medium.com/codable/aligning-architecture-with-business-reality-a-practical-guide-to-domain-driven-design-and-44e85776ac60?source=rss----d2b12a6bf306---4</link>
            <guid isPermaLink="false">https://medium.com/p/44e85776ac60</guid>
            <category><![CDATA[microservices]]></category>
            <category><![CDATA[domain-driven-design]]></category>
            <dc:creator><![CDATA[Eda Sevgin]]></dc:creator>
            <pubDate>Mon, 16 Jun 2025 06:30:59 GMT</pubDate>
            <atom:updated>2025-06-16T06:30:59.553Z</atom:updated>
            <content:encoded><![CDATA[<h3>Aligning Architecture with Business Reality: A Practical Guide to Domain-Driven Design and Microservices</h3><p>One of the key challenges in software development is understanding business needs clearly and turning them into effective technical solutions. Building a shared language between development teams and business stakeholders, and defining clear system boundaries, are essential parts of this process. <strong>Domain-Driven Design (DDD)</strong> offers a helpful approach to dealing with such complexities.</p><p>In this guide, we’ll explore the core ideas of DDD, how it connects naturally with microservice architecture, and how it can be adapted to both new and existing projects. The goal is to provide a perspective that supports better alignment between software and business understanding.</p><h3>What Is Domain-Driven Design?</h3><p>At its core, Domain-Driven Design (DDD) is a methodology for developing software based on the structure and language of the business domain. A domain refers to a specific area of knowledge or activity, such as logistics, e-commerce, or finance.</p><p>DDD focuses on building models that reflect this domain. One of the most powerful concepts in DDD is the <strong>Bounded Context</strong> — a logical boundary that encapsulates a specific part of the domain and its internal model. Within this boundary, the team uses a <strong>Ubiquitous Language</strong> shared between developers and business experts, enabling precise communication and understanding.</p><p>To effectively implement DDD, it’s crucial to grasp two complementary layers of design: tactical and strategic. Tactical patterns help shape the internal structure of your domain model, while strategic patterns guide how different models relate and interact across larger systems.</p><h3>Tactical Patterns: Modelling the Domain</h3><p>The diagram below visualizes the core tactical patterns in Domain-Driven Design within a bounded context. <strong>Entities</strong> and <strong>Value Objects</strong> make up the core of the domain layer. <strong>Aggregates</strong> group related entities and value objects to keep data consistent. <strong>Domain Services</strong> contain business logic that doesn’t naturally belong to entities. <strong>Application Services</strong> handle use cases and connect the domain with other systems. <strong>Repositories</strong> abstract data persistence. <strong>Infrastructure Services </strong>handle technical operations like messaging and storage. Together, these patterns create a well-structured, maintainable domain model aligned with business realities.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/940/1*s5rIKv2zqd-ABsFVh-cbLg.png" /><figcaption>Tactical Patterns UML</figcaption></figure><h3>Strategic Patterns: Defining Context Relationships</h3><p>While tactical patterns focus on the internals of a single model, <strong>strategic patterns</strong> define how multiple bounded contexts coexist and communicate within a larger system. <strong>Context Maps</strong> visualize and document these interactions between contexts.</p><p>By establishing <strong>clear boundaries and interaction styles,</strong> strategic patterns manage complexity and enable teams to develop independently while working together cohesively. These patterns help ensure models remain consistent, integration points are controlled, and the overall architecture scales effectively.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/773/1*Dmn1qcABO0gl7WvxBlMl0w.png" /><figcaption>Bounded Context</figcaption></figure><p><strong>Bounded Context Relationship Patterns</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/836/1*hHOm8fvOUbqsS6rJTB0MSA.png" /></figure><p>With a solid understanding of DDD’s building blocks, the next step is to see how these ideas can drive architectural decisions — especially when designing distributed systems like microservices.</p><h3>DDD and Microservices: A Natural Fit</h3><p>When designing microservices, aligning each service with a bounded context is a smart strategy. Each microservice should encapsulate a specific business capability and operate independently — just like a bounded context in DDD.</p><p>This alignment allows for:</p><p>· Clear domain understanding within each team</p><p>· Loosely coupled development and deployments</p><p>· Independent release schedules aligned with each service’s business needs</p><p>Microservices also offer architectural benefits such as:</p><p>· Technology flexibility</p><p>· Failure isolation</p><p>· Elastic scalability</p><p>However, they also introduce challenges:</p><p>· Latency due to network communication</p><p>· Complexity in data consistency</p><p>· Challenging debugging and monitoring</p><p>· Higher operational overhead due to distributed infrastructure</p><p>To address these, <strong>services should communicate through APIs</strong> — using REST, GraphQL, or asynchronous messaging (e.g., Kafka or RabbitMQ) — and avoid direct code-level dependencies.</p><p>This is where <strong>Event-Driven Architecture</strong> plays a critical role. By modelling business events explicitly and sharing them across services asynchronously, event-driven design complements both DDD and microservices — enabling reactive systems that scale and evolve independently.</p><h3>Event-Driven Design in DDD-Based Microservices</h3><p>Events are key to building loosely coupled systems:</p><p>· <strong>Domain Events</strong>: Represent meaningful events in the business (e.g., OrderPlaced)</p><p>· <strong>Integration Events</strong>: Used to notify other systems or services about domain changes</p><p>Event-driven approaches facilitate <strong>eventual consistency</strong> and <strong>reactive workflows</strong>, enabling services to remain decoupled while responding to changes. This architecture is particularly useful when applying DDD principles at scale, allowing services to focus on their own bounded contexts and still react to important events elsewhere in the system.</p><p>Techniques like <strong>event storming</strong> can be used to collaboratively discover domain events and workflows, strengthening the link between business understanding and technical implementation.</p><h3>Data Persistence and Isolation</h3><p>Each microservice should own its data — aligning with its bounded context. Avoid shared databases.</p><h3>Persistence Strategies</h3><p>· <strong>Shared Database</strong> (anti-pattern)</p><p>· <strong>Separate Database per Service</strong> (recommended)</p><p>Challenges with separate DBs:</p><p>· Cross-service data consistency</p><p>· Distributed transactions</p><p>Solutions:</p><p>· <strong>CQRS (Command-Query Responsibility Segregation)</strong>: Split write and read concerns</p><p>· <strong>SAGA Pattern</strong>: Handle long-running transactions using compensation steps</p><h3>Applying DDD in Real Projects</h3><h3>Greenfield Projects</h3><p>Fresh builds offer freedom in design. You can either:</p><p>· Start with microservices from day one (Ground-Up), or</p><p>· Begin with a monolith and split into microservices over time (Monolith-First)</p><h3>Brownfield Projects</h3><p>In legacy systems:</p><p>· You may refactor the existing monolith into modular microservices, or</p><p>· Replace legacy components one by one, managing technical debt along the way</p><p>Each strategy has trade-offs, but DDD principles help ensure alignment between the evolving architecture and the business domain.</p><h3>Final Thoughts</h3><p>Domain-Driven Design is not just a set of patterns — it’s a mindset. It brings your development efforts closer to business reality and aligns architecture with real-world complexity.</p><p>When combined with microservices, DDD offers a path toward maintainable, scalable, and meaningful software — enabling teams to work autonomously, evolve rapidly, and speak the same language as the business.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=44e85776ac60" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codable/aligning-architecture-with-business-reality-a-practical-guide-to-domain-driven-design-and-44e85776ac60">Aligning Architecture with Business Reality: A Practical Guide to Domain-Driven Design and…</a> was originally published in <a href="https://medium.com/codable">Codable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[DevSecOps with GitLab: Shifting Security Left Without Breaking Your Pipeline]]></title>
            <link>https://medium.com/codable/devsecops-with-gitlab-shifting-security-left-without-breaking-your-pipeline-8b04a2dcb429?source=rss----d2b12a6bf306---4</link>
            <guid isPermaLink="false">https://medium.com/p/8b04a2dcb429</guid>
            <category><![CDATA[pipeline]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[devsecops]]></category>
            <category><![CDATA[gitlab]]></category>
            <dc:creator><![CDATA[Ilkem Erol]]></dc:creator>
            <pubDate>Tue, 27 May 2025 14:37:10 GMT</pubDate>
            <atom:updated>2025-05-27T14:37:10.467Z</atom:updated>
            <content:encoded><![CDATA[<p>In today’s fast-paced development world, security can’t be an afterthought — it needs to be part of the process from day one. This is where DevSecOps comes into play. And when it comes to a unified, developer friendly DevSecOps platform, GitLab is making waves by offering built-in security capabilities right inside the DevOps lifecycle.</p><p>In this article, we’ll explore how GitLab enables teams to implement DevSecOps practices, enhance collaboration between dev, sec, and ops teams, and deliver secure software faster.</p><h3><strong>What Is DevSecOps?</strong></h3><p>DevSecOps is a cultural and technical shift that integrates security practices within the DevOps process. Rather than treating security as a gate at the end of the development pipeline, DevSecOps encourages a “shift-left” mindset — bringing security earlier into the software development lifecycle (SDLC).</p><h3>Why GitLab for DevSecOps?</h3><p>GitLab isn’t just a Git repository manager anymore. It’s an end-to-end DevOps platform that also embeds security testing into the CI/CD pipeline. Instead of relying on a patchwork of third-party tools, GitLab offers a single application where you can code, test, secure, and deploy — all in one place.</p><p>Here’s how GitLab stands out:<br><em>Native security scans in the CI/CD pipeline<br>Auto remediation suggestions<br>Merge request approvals based on security findings<br>Policy-driven governance and compliance controls<br>Centralized visibility for security across projects</em></p><h3>Built-In Security Scanning</h3><p>GitLab provides a wide range of out-of-the-box security scanners, automatically triggered during the CI/CD process.</p><p>These include:<br><em>Static Application Security Testing (SAST): Analyzes source code for<br>vulnerabilities.<br>Dynamic Application Security Testing (DAST): Scans running applications for runtime issues.<br>Dependency Scanning: Detects known vulnerabilities in dependencies (e.g., npm, pip, Maven).<br>Container Scanning: Inspects Docker images for security issues.<br>License Compliance: Ensures dependencies meet your license policies.<br>Secret Detection: Flags hardcoded secrets like API keys or passwords.</em></p><p>Each scan runs as a job in your CI pipeline and returns detailed results directly in the merge request. Developers can act on these findings without switching tools or waiting for manual reviews.</p><h3>Security in Merge Requests</h3><p>One of GitLab’s strongest features is its tight integration between security and merge requests. When a developer creates a merge request, GitLab can:<br><em>Run all enabled security scans.<br>Display scan results inline.<br>Automatically block the merge if high or critical vulnerabilities are found.<br>Suggest fixes or safer versions of packages.</em></p><p>This allows security to become part of the daily workflow, not a bottleneck down the line.</p><h3>Compliance and Governance</h3><p>For regulated industries, GitLab offers compliance frameworks, audit logs, and security policies that help ensure traceability and enforce best practices. Security policies can be configured to enforce scan coverage, block deployments, or require approvals from security reviewers. The Security Dashboard gives security teams visibility across projects, helping them identify risk areas and prioritize remediation without disrupting development velocity.</p><h3>Developer-Friendly Security</h3><p>DevSecOps only works when developers adopt it — and GitLab makes that easy. The interface is familiar, the feedback is fast, and the remediation suggestions are actionable. By integrating everything into the existing GitLab workflow, there’s no need to jump between tools or wait on long security reviews. Security becomes just another part of CI/CD — automated, consistent, and built-in.</p><h3>Final Thoughts</h3><p>With cyber threats evolving and software delivery accelerating, integrating security into your development pipeline is not optional — it’s essential. GitLab’s DevSecOps capabilities make it easy to bake security into every commit, without slowing down your team.</p><p>If you’re already using GitLab, many of these features are just a .gitlab-ci.yml snippet away. If not, it’s worth exploring how GitLab can unify your DevOps and security efforts into a single, streamlined workflow.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8b04a2dcb429" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codable/devsecops-with-gitlab-shifting-security-left-without-breaking-your-pipeline-8b04a2dcb429">DevSecOps with GitLab: Shifting Security Left Without Breaking Your Pipeline</a> was originally published in <a href="https://medium.com/codable">Codable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Transforming Monoliths to Microservices: Insights from Sam Newman]]></title>
            <link>https://medium.com/codable/transforming-monoliths-to-microservices-insights-from-sam-newman-29dd41904de0?source=rss----d2b12a6bf306---4</link>
            <guid isPermaLink="false">https://medium.com/p/29dd41904de0</guid>
            <dc:creator><![CDATA[Yasin Razlık]]></dc:creator>
            <pubDate>Wed, 20 Nov 2024 12:18:16 GMT</pubDate>
            <atom:updated>2024-11-20T12:18:16.554Z</atom:updated>
            <content:encoded><![CDATA[<p>In the dynamic world of software development, the shift from monolithic architectures to microservices has become a hot topic. This transformation promises enhanced scalability, agility, and resilience. However, there are many challenges. Sam Newman’s book, “<a href="https://www.amazon.com/Monolith-Microservices-Evolutionary-Patterns-Transform/dp/1492047848">Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith</a>” serves as a comprehensive guide for navigating this complex transition. This article is a summary of my takeaways from the book:</p><figure><img alt="Monolith to microservices" src="https://cdn-images-1.medium.com/max/1024/1*CF3yVIfjZ4GLWesMrH1QBQ.png" /></figure><p><strong>Understanding the Basics</strong><br>Sam Newman, a renowned expert in the field, begins by laying a solid foundation. He explains what monolithic applications are; self-contained systems where all components are interconnected and interdependent. While monoliths can be simpler to develop initially, they often become cumbersome to manage, scale, and update as they grow.</p><p>In contrast, microservices architecture breaks down applications into smaller, independent services. Each service handles a specific function and communicates with other services through APIs. This modular approach offers several benefits, including easier scalability, improved fault isolation, and the ability to deploy updates more frequently.</p><p><strong>The Case for Evolution</strong><br>One of the key themes in Newman’s book is the concept of evolutionary transformation. Instead of a risky, all-at-once migration, Newman advocates for an incremental approach. This method allows organizations to gradually transition to microservices while maintaining stability and minimizing disruptions.</p><p>Newman emphasizes the importance of understanding the existing system thoroughly before making any changes. This includes identifying the pain points, understanding the business domain, and mapping out dependencies. By doing so, teams can make informed decisions about where to start and how to prioritize the transition steps.</p><p><strong>Patterns for Decomposition</strong><br>Newman introduces several evolutionary patterns for decomposing monoliths into microservices. Each pattern addresses specific challenges and offers a structured approach to breaking down monolithic systems.</p><p><strong>1- Strangler Fig Pattern</strong><br>Inspired by the <a href="https://en.wikipedia.org/wiki/Strangler_fig">strangler fig tree</a>, this pattern involves gradually replacing parts of the monolith with microservices. New functionality is built as microservices, while existing components are incrementally replaced. This approach allows teams to deliver value continuously while slowly transforming the architecture.</p><figure><img alt="strangler fig pattern" src="https://cdn-images-1.medium.com/max/1024/1*Iil4E2y_Zae-x3SLt6DOrw.png" /></figure><p><strong>2- Branch by Abstraction</strong><br>This pattern involves creating an abstraction layer between the monolith and the new microservices. By introducing this layer, teams can decouple components and incrementally migrate functionality. It helps in managing dependencies and ensures that the system remains functional throughout the transition.</p><figure><img alt="branch by abstraction" src="https://cdn-images-1.medium.com/max/417/1*M2UtKEPekgt6hQuCzufvOg.png" /></figure><p><strong>3- Anticorruption Layer</strong><br>When integrating microservices with a monolithic system, inconsistencies in data models and interfaces can create challenges. The anticorruption layer acts as a mediator, translating and adapting between the two systems. This pattern helps maintain data integrity and prevents the monolith’s complexity from leaking into the microservices.</p><p><strong>Managing Data in a Microservices World</strong><br>One of the significant challenges in microservices architecture is data management. Newman discusses various strategies to handle data in a distributed system. He highlights the importance of maintaining data consistency and integrity while ensuring that services remain loosely coupled.</p><p><strong>1- Database per Service</strong><br>A key principle in microservices is that each service should have its own database. This approach ensures that services are independent and can evolve without affecting others. However, it also introduces complexities in managing transactions and maintaining consistency across services.</p><p><strong>2- Event Sourcing and CQRS</strong><br>Newman explores advanced techniques like Event Sourcing and Command Query Responsibility Segregation (CQRS). Event Sourcing involves storing changes as a series of events, allowing services to reconstruct the current state from these events. CQRS separates read and write operations, enabling different models for querying and updating data. These techniques can help manage data consistency and scalability in a microservices architecture.</p><p><strong>Embracing Change and Continuous Improvement</strong><br>Transitioning to microservices is not a one-time project but an ongoing journey. Newman stresses the importance of a culture that embraces change and continuous improvement. This includes investing in automation, monitoring, and robust testing practices.</p><figure><img alt="Embracing Change and Continuous Improvement" src="https://cdn-images-1.medium.com/max/1024/1*bTZGSOQLyejRgTEji1SDPA.png" /></figure><p><strong>1- Automation and DevOps</strong><br>Automation plays a crucial role in managing the complexity of microservices. Newman highlights the need for automated testing, continuous integration, and continuous deployment. These practices ensure that changes can be delivered quickly and reliably, reducing the risk of introducing errors.</p><p><strong>2- Monitoring and Observability</strong><br>In a microservices architecture, understanding the system’s health and performance is vital. Newman emphasizes the importance of monitoring and observability. By collecting and analyzing metrics, logs, and traces, teams can gain insights into the system’s behavior and identify issues before they impact users.</p><p><strong>Conclusion</strong><br>“Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith” by Sam Newman is an invaluable resource for any organization looking to embark on the journey to microservices. Newman’s pragmatic approach, grounded in real-world experience, offers actionable insights and strategies for navigating this complex transition.</p><p>By embracing evolutionary patterns, managing data effectively, and fostering a culture of continuous improvement, organizations can unlock the full potential of microservices. The journey may be challenging, but with the right guidance, it can lead to a more scalable, resilient, and agile software architecture.</p><p>If you’re considering or currently navigating the shift from monolith to microservices, Newman’s book is a must-read. It not only provides a roadmap for the transition but also equips you with the knowledge to tackle the inevitable challenges along the way.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=29dd41904de0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codable/transforming-monoliths-to-microservices-insights-from-sam-newman-29dd41904de0">Transforming Monoliths to Microservices: Insights from Sam Newman</a> was originally published in <a href="https://medium.com/codable">Codable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Navigating the Future of IT with a Multi-Cloud Strategy]]></title>
            <link>https://medium.com/codable/navigating-the-future-of-it-with-a-multi-cloud-strategy-31b35566b8cf?source=rss----d2b12a6bf306---4</link>
            <guid isPermaLink="false">https://medium.com/p/31b35566b8cf</guid>
            <category><![CDATA[multi-cloud-strategy]]></category>
            <category><![CDATA[cloud]]></category>
            <dc:creator><![CDATA[Ilkem Erol]]></dc:creator>
            <pubDate>Wed, 20 Nov 2024 11:32:29 GMT</pubDate>
            <atom:updated>2024-11-20T11:32:29.498Z</atom:updated>
            <content:encoded><![CDATA[<p>In today’s digital landscape, businesses are constantly looking for ways to enhance efficiency, agility, and resilience. One of the strategies gaining prominence is the adoption of a multi-cloud approach. Instead of relying solely on a single cloud provider, a multi-cloud strategy leverages services from multiple vendors. This approach offers flexibility, reduces risks, and provides businesses with the tools to innovate more effectively. However, implementing a multi-cloud strategy comes with its own set of challenges. In this article, we’ll explore the benefits, challenges, and best practices for adopting a multi-cloud strategy.</p><h3><strong>What is a Multi-Cloud Strategy?</strong></h3><p>A multi-cloud strategy refers to the practice of using cloud services from multiple providers, such as Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), and others, to meet different business needs. This differs from a hybrid cloud strategy, which typically combines private and public clouds. In a multi-cloud setup, an organization may choose to use AWS for its storage needs, Azure for its artificial intelligence tools, and GCP for its data analytics services.</p><p>The key appeal of this approach is the ability to avoid vendor lock-in, ensuring businesses can select the best tools from each provider based on their specific requirements.</p><h3><strong>Benefits of a Multi-Cloud Strategy</strong></h3><ol><li>Avoiding Vendor Lock-In: Relying on a single cloud provider can limit flexibility and innovation. Multi-cloud allows businesses to pick and choose services that are best suited to their needs without being tied to one provider. This also provides leverage when negotiating pricing and service terms.</li><li>Enhanced Resilience and Redundancy: Distributing workloads across multiple cloud platforms ensures that if one service provider faces downtime, others can maintain business continuity. This enhances system resilience, minimizing the impact of service outages.</li><li>Optimization of Costs: Different cloud providers offer unique pricing models. A multi-cloud strategy allows businesses to allocate resources in the most cost-efficient way by selecting the best pricing options across various platforms.</li><li>Flexibility and Innovation: Every cloud platform excels in different areas. AWS might offer superior storage solutions, while Azure might have better integration with enterprise tools. By using multiple clouds, companies can leverage the best-in-class solutions for each aspect of their operations.</li><li>Geographic Reach: Some cloud providers may have a stronger presence in certain regions. With a multi-cloud approach, organizations can optimize their infrastructure and services to meet local compliance regulations and latency requirements.</li></ol><h3><strong>Challenges of a Multi-Cloud Strategy</strong></h3><p>While the benefits of a multi-cloud approach are clear, implementing this strategy comes with challenges that businesses need to address.</p><ol><li>Complexity in Management: Managing multiple cloud environments can be complex. Each provider has its own APIs, interfaces, and management tools. This can increase the operational overhead and require specialized skills in different cloud platforms.</li><li>Security Risks: A multi-cloud environment can expose an organization to additional security risks. With data spread across multiple providers, businesses need to ensure consistent security policies, identity management, and encryption standards across all platforms.</li><li>Increased Costs: While a multi-cloud strategy can lead to cost savings, it can also lead to cost overruns if not managed carefully. Without proper governance, businesses might end up paying for redundant services or over-provisioning resources across multiple clouds.</li><li>Data Integration and Migration: Moving data between different cloud providers can be challenging due to varying data formats and protocols. Ensuring seamless integration between services hosted on different clouds requires careful planning and often involves the use of third-party tools.</li></ol><h3><strong>Best Practices for a Successful Multi-Cloud Strategy</strong></h3><ol><li>Centralized Monitoring and Management: Invest in tools that provide centralized monitoring and management across all cloud platforms. This helps streamline operations, improve visibility, and ensure consistent performance across environments.</li><li>Cloud-Native Applications: When building applications, adopt cloud-native development practices. Containerization, microservices, and serverless architectures are particularly well-suited to multi-cloud environments, as they allow for easier migration and scaling across platforms.</li><li>Strong Governance and Cost Management: Implement clear governance policies for provisioning, managing, and decommissioning cloud resources. Regularly monitor cloud usage to avoid sprawl and manage costs effectively.</li><li>Consistent Security Policies: Use a unified security approach across all platforms. This includes ensuring that access controls, encryption, and compliance standards are uniformly applied across each cloud provider.</li><li>Leverage Automation: Automation can simplify the management of multi-cloud environments. By automating tasks like resource scaling, backups, and patching, businesses can reduce operational complexity and ensure smoother performance.</li></ol><h3><strong>Conclusion</strong></h3><p>A multi-cloud strategy offers businesses a powerful way to increase flexibility, optimize costs, and reduce risk. However, successfully implementing this approach requires careful planning, robust management, and consistent security practices. As organizations continue to rely on cloud services for their digital transformation efforts, adopting a multi-cloud strategy may prove to be a critical advantage in staying competitive and resilient in a rapidly changing technological landscape.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=31b35566b8cf" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codable/navigating-the-future-of-it-with-a-multi-cloud-strategy-31b35566b8cf">Navigating the Future of IT with a Multi-Cloud Strategy</a> was originally published in <a href="https://medium.com/codable">Codable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Understanding Serverless Computing: A New Era for Cloud Development]]></title>
            <link>https://medium.com/codable/understanding-serverless-computing-a-new-era-for-cloud-development-81f3992e3c80?source=rss----d2b12a6bf306---4</link>
            <guid isPermaLink="false">https://medium.com/p/81f3992e3c80</guid>
            <category><![CDATA[severless]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <dc:creator><![CDATA[Ilkem Erol]]></dc:creator>
            <pubDate>Wed, 20 Nov 2024 11:31:59 GMT</pubDate>
            <atom:updated>2024-11-20T11:31:59.010Z</atom:updated>
            <content:encoded><![CDATA[<p>Serverless computing is revolutionizing the way developers build and deploy applications. With this approach, cloud providers handle the infrastructure, allowing developers to focus solely on writing code. This shift is a significant departure from traditional server-based models and is quickly becoming a cornerstone of modern cloud architecture.</p><p>In this article, we will dive into what serverless computing is, its benefits, and its practical applications.</p><h3><strong>What is Serverless Computing?</strong></h3><p>Despite its name, “serverless” doesn’t mean there are no servers involved. Instead, it refers to the fact that developers don’t need to manage or provision any servers. In a traditional cloud model, developers must configure and manage servers to run their applications, whereas serverless computing abstracts this responsibility entirely.</p><p>Serverless computing is powered by Function-as-a-Service (FaaS) platforms like AWS Lambda, Google Cloud Functions, and Azure Functions. In these platforms, you write individual functions that are triggered by events, such as HTTP requests or database updates, and the cloud provider automatically scales the underlying infrastructure to handle these requests.</p><h3><strong>Key Characteristics of Serverless</strong></h3><ol><li>No Server Management: Cloud providers manage the infrastructure, so developers don’t need to worry about server maintenance, patching, or scaling.</li><li>Scalability: Serverless functions automatically scale based on demand. Whether you have one user or one million, the system adjusts dynamically to meet the demand.</li><li>Pay-as-You-Go Pricing: You only pay for the resources your application uses, down to the millisecond of execution time, which makes serverless computing highly cost-effective.</li><li>Event-Driven Architecture: Serverless architectures respond to specific events, such as an API call, file upload, or a database trigger. This allows for highly responsive and flexible applications.</li></ol><h3><strong>The Benefits of Serverless Computing</strong></h3><ol><li>Cost Efficiency<br>One of the most attractive features of serverless computing is its pricing model. With traditional cloud computing, you pay for a server instance, even if it’s idle most of the time. In contrast, with serverless, you only pay for the exact execution time of your functions. This can lead to substantial cost savings, particularly for applications with variable traffic.</li><li>Scalability Without Complexity<br>Scaling an application to meet fluctuating demand can be challenging in a traditional server-based environment. With serverless computing, scalability happens automatically. There’s no need for developers to configure scaling rules or worry about over-provisioning resources. The cloud provider manages all of this behind the scenes.</li><li>Faster Time to Market<br>Since developers don’t need to worry about infrastructure management, they can focus entirely on writing code. This speeds up the development process, allowing teams to iterate faster and bring products to market quicker. Additionally, the serverless approach allows teams to adopt a microservices architecture, which can streamline development and enable more agile workflows.</li><li>Focus on Core Business Logic<br>Serverless computing abstracts away much of the operational burden, allowing developers to focus on building features and improving user experience rather than managing infrastructure. This focus on business logic and innovation is a key driver of productivity gains in serverless environments.</li></ol><h3><strong>Use Cases for Serverless Computing</strong></h3><ol><li>Web Applications<br>Serverless is well-suited for web applications, particularly those with unpredictable traffic patterns. For example, a news website might experience a surge in traffic during a breaking news event. With serverless, the application can scale instantly to accommodate millions of users without any intervention from developers.</li><li>APIs and Microservices<br>Serverless architectures work seamlessly with APIs and microservices, where small, independent functions handle specific tasks. This is especially useful for projects built using a microservices approach, where each service operates independently, making serverless computing an ideal match.</li><li>Data Processing<br>Serverless platforms are often used for data processing tasks, such as batch jobs, ETL (extract, transform, load) operations, and real-time data analysis. These processes can be triggered by events, such as a new file being uploaded to a storage bucket, and can scale to handle large volumes of data efficiently.</li><li>IoT Backends<br>With the rise of IoT (Internet of Things) devices, serverless computing is a great choice for handling backend processing. These devices generate massive amounts of data, and serverless systems can respond to incoming data streams without needing a constantly running server.</li></ol><h3><strong>Challenges of Serverless Computing</strong></h3><p>While serverless offers many advantages, it’s not without its challenges. Cold starts — when a function is invoked after being idle for a while — can lead to higher latency. There are also limitations around execution time and memory, making serverless unsuitable for certain types of long-running or resource-intensive tasks.</p><p>Additionally, the shift to event-driven architectures may require significant refactoring of existing codebases, which could be a barrier for teams with legacy applications.</p><h3><strong>Conclusion</strong></h3><p>Serverless computing is a game-changer in the world of cloud development. Its ability to eliminate infrastructure management, provide automatic scalability, and offer cost-efficient pricing makes it an attractive option for many use cases, from web apps to data processing.</p><p>However, like any technology, it’s essential to understand both its advantages and limitations. As serverless continues to evolve, it’s poised to become a core pillar of cloud architecture in the years to come.</p><p>By leveraging serverless platforms, developers can focus more on innovation and less on operations, ultimately delivering better experiences to users faster. Whether you’re building a simple API or a complex IoT backend, serverless computing can help you get there with minimal infrastructure overhead.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=81f3992e3c80" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codable/understanding-serverless-computing-a-new-era-for-cloud-development-81f3992e3c80">Understanding Serverless Computing: A New Era for Cloud Development</a> was originally published in <a href="https://medium.com/codable">Codable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unlocking Financial Efficiency in the Cloud Era: FinOps]]></title>
            <link>https://medium.com/codable/unlocking-financial-efficiency-in-the-cloud-era-2052c3ad718f?source=rss----d2b12a6bf306---4</link>
            <guid isPermaLink="false">https://medium.com/p/2052c3ad718f</guid>
            <category><![CDATA[finops]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[cost-optimization]]></category>
            <category><![CDATA[cloud]]></category>
            <dc:creator><![CDATA[Ilkem Erol]]></dc:creator>
            <pubDate>Wed, 05 Jun 2024 12:51:06 GMT</pubDate>
            <atom:updated>2024-06-05T13:19:51.759Z</atom:updated>
            <content:encoded><![CDATA[<p><strong><em>Note</em></strong><em>: This article is the first part of a three part series. The next part is </em><a href="https://medium.com/codable/cost-optimisation-checklist-for-aws-part-1-2-92a0ea17da00"><em>here</em></a><em>.</em></p><p>In the ever-evolving landscape of cloud computing, businesses are reaping unprecedented benefits from the flexibility, scalability, and innovation that cloud services provide. However, with these advantages comes a significant challenge: managing cloud costs effectively. Enter FinOps, a transformative practice designed to bridge the gap between finance, operations, and technology. In this article, we’ll explore what FinOps is, why it’s essential, and how organizations can implement it to optimize their cloud investments.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ImfwTmPvKWoD3KKuRnM8aQ.png" /></figure><h3><strong>What is FinOps?</strong></h3><p>FinOps, short for Financial Operations, is a practice that combines financial management principles with the operational efficiencies of DevOps. At its core, FinOps is about creating a culture of accountability and collaboration between engineering, finance, and business teams to manage cloud spend effectively. It involves continuous monitoring, analyzing, and optimizing cloud usage to ensure that every dollar spent brings maximum value.</p><h3>The Phases of FinOps</h3><p>FinOps implementation is typically broken down into three distinct phases, each building upon the other to create a cohesive and effective strategy:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8w1j0Ztaw5e-XWoasrJNkQ.png" /></figure><p><em>Inform</em></p><p>This phase is about achieving visibility and transparency into cloud usage and costs. It involves setting up the necessary tools and processes to collect data and generate reports. Key activities include tracking cloud spend, establishing cost allocation and tagging strategies, and creating dashboards for real-time insights.</p><p><em>Optimize</em></p><p>With visibility in place, the next phase focuses on cost optimization. This includes identifying inefficiencies, such as underutilized resources or redundant services, and implementing strategies to reduce waste. Activities in this phase might include rightsizing instances, scheduling non-essential resources to shut down during off-hours, and leveraging discounts and reserved instances.</p><p><em>Operate</em></p><p>The final phase is about operationalizing FinOps practices and embedding them into the organization’s culture. This includes continuous monitoring and improvement, regular reviews of cloud costs and usage, and fostering a culture of accountability. Key activities include setting up governance policies, conducting cost audits, and ensuring all teams are aligned with FinOps principles.</p><h3>The Core Principles of FinOps</h3><p><strong>FinOps is built on three core principles</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/756/1*9RV9ISAWo8bk1aLis5FplQ.png" /></figure><p>1.Collaboration: FinOps requires a collaborative effort across finance, operations, and technology teams. This ensures that financial decisions are made with a full understanding of the technical requirements and implications.</p><p>2.Ownership: Engineering and development teams are given ownership of their cloud usage and costs, encouraging them to take responsibility for optimizing their spend.</p><p>3.Continuous Improvement: FinOps is not a one-time effort but an ongoing process. It involves continuous monitoring, analysis, and optimization to ensure that cloud investments are always aligned with business goals.</p><h3>Why is FinOps Important?</h3><p>The shift to cloud computing has brought unprecedented flexibility and scalability. However, it also introduces complexity in managing costs. Traditional budgeting methods are often ill-equipped to handle the dynamic nature of cloud spending. Here’s why FinOps is essential:</p><p><em>Cost Control: FinOps helps prevent cloud overspend by identifying and mitigating inefficiencies.</em></p><p><em>Agility: It supports rapid innovation by providing teams with the financial insights needed to make quick, data-driven decisions.</em></p><p><em>Accountability: By making costs visible and attributable to specific teams or projects, FinOps ensures that everyone is accountable for their cloud usage and spending.</em></p><h3>Implementing FinOps in Your Organization</h3><p>Adopting FinOps requires a shift in mindset and processes. Here are some steps to get started:</p><p><strong>1.Establish a FinOps Team</strong>: Form a cross-functional team with representatives from finance, engineering, and business units. This team will be responsible for driving FinOps initiatives and ensuring collaboration across departments.</p><p><strong>2.Set Clear Goals</strong>: Define what success looks like for your FinOps practice. This could include specific cost-saving targets, efficiency improvements, or other KPIs.</p><p><strong>3.Leverage Tools and Automation</strong>: Use FinOps tools to gain insights into cloud usage and costs. Automation can help streamline processes such as cost allocation, budget alerts, and optimization recommendations.</p><p><strong>4.Educate and Empower Teams:</strong> Provide training and resources to help teams understand the importance of FinOps and how they can contribute to cost-efficiency. Empower them with the tools and data they need to make informed decisions.</p><p><strong>5.Continuous Improvement:</strong> FinOps is not a one-time project but an ongoing practice. Regularly review and refine your processes, metrics, and goals to adapt to changing business needs and cloud environments.</p><h3>Real-World Impact of FinOps</h3><p>Many organizations have successfully implemented FinOps to achieve significant cost savings and operational efficiencies. For instance, media company **A** reduced their cloud spend by 25% in the first year of adopting FinOps. By continuously monitoring their usage and implementing automated cost-optimization strategies, they were able to eliminate waste and invest more in innovation.</p><p>Tech giant **B** used FinOps to gain better visibility into their cloud costs across various departments. This transparency enabled them to allocate budgets more accurately and hold teams accountable for their spending, leading to a more efficient and predictable financial model.</p><h3>Conclusion</h3><p>As cloud adoption continues to grow, so does the need for effective financial management. FinOps offers a robust framework to manage cloud costs, drive efficiency, and foster a culture of accountability. By unifying finance and DevOps, FinOps ensures that cloud spending is aligned with business goals and maximizes the value of your cloud investment.</p><p>If your organization is looking to optimize its cloud strategy, consider embracing FinOps. It’s not just about cutting costs — it’s about making smarter, data-driven decisions that support your business’s growth and innovation.</p><p><strong><em>Note</em></strong><em>: This article is the first part of a three part series. The next part is </em><a href="https://medium.com/codable/cost-optimisation-checklist-for-aws-part-1-2-92a0ea17da00"><em>here</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2052c3ad718f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codable/unlocking-financial-efficiency-in-the-cloud-era-2052c3ad718f">Unlocking Financial Efficiency in the Cloud Era: FinOps</a> was originally published in <a href="https://medium.com/codable">Codable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cost optimisation checklist for AWS — Part 2/2]]></title>
            <link>https://medium.com/codable/cost-optimisation-checklist-for-aws-part-2-2-3244ed12c3db?source=rss----d2b12a6bf306---4</link>
            <guid isPermaLink="false">https://medium.com/p/3244ed12c3db</guid>
            <category><![CDATA[tutorial]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[finops]]></category>
            <category><![CDATA[cost-optimization]]></category>
            <category><![CDATA[introduction]]></category>
            <dc:creator><![CDATA[Ali Basakil]]></dc:creator>
            <pubDate>Tue, 04 Jun 2024 20:53:02 GMT</pubDate>
            <atom:updated>2024-06-05T13:11:47.216Z</atom:updated>
            <content:encoded><![CDATA[<h3>Cost optimisation checklist for AWS — Part 2/2</h3><p><strong><em>Note</em></strong><em>: This is the last part of a three part series. The first part is </em><a href="https://medium.com/codable/unlocking-financial-efficiency-in-the-cloud-era-2052c3ad718f"><em>here</em></a><em>, and the previous part is </em><a href="https://medium.com/codable/cost-optimisation-checklist-for-aws-part-1-2-92a0ea17da00"><em>here</em></a><em>.</em></p><h3>04- Compute</h3><h3>🗹 Right-size your resources/services and utilize auto-scaling whenever available:</h3><p>These two basic topics are strongly coupled and form the basic architectural principle for cloud, so I won’t include an explanation for them (you can find a lot in aws <a href="https://docs.aws.amazon.com/cost-management/latest/userguide/ce-rightsizing.html">docs </a>and <a href="https://docs.aws.amazon.com/whitepapers/latest/cost-optimization-right-sizing/tips-for-right-sizing-your-workloads.html">whitepapers</a>). But one thing I should remind, is that, (application) <a href="https://docs.aws.amazon.com/autoscaling/application/userguide/getting-started.html">auto scaling</a> is available beyond EC2 (Fargate, Lambda), even beyond compute (RDS, Search …). Also, don’t forget to check our “<a href="https://medium.com/codable/cost-optimisation-checklist-for-aws-part-1-2-92a0ea17da00">Tools to observe your cloud expenditure</a>” chapter to find opportunities for right-sizing.</p><p>Ease: 3/5: The setups are ingrained into architecture, most of the time.</p><p>Effect: 5/5: You’ll definitely be missing a lot if you’re not auto scaling and/or right sizing your resources. So, this is one of the MUST DOs.</p><h3>🗹 Use (Compute) Savings Plans:</h3><p>EC2 has the <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-reserved-instances.html">reserved instances</a> option, which can save 30%-40% for one year commitments and 50%-70% for 3 year commitments. It is definitely a huge gain if you know you will need those instances. If you specify also the <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/reserved-instances-scope.html#reserved-instances-regional-zonal-differences">zones </a>the instances will be created in, those instances will literally be reserved for you (capacity reservations), meaning you’ll most definitely will be assigned that instance whenever you need (as long as you are consuming/using that plan). So, you can utilize/use newer instance types (processor, network ..etc) with zonal plans, which are more (cost-wise) efficient than older ones. If your reserved instance totals cost more than $500 K, you get more and more volume discounts, step-by-step. If you do not need your reserved instances anymore, you can sell them on the <a href="https://aws.amazon.com/marketplace">marketplace</a>.</p><p><a href="https://docs.aws.amazon.com/savingsplans/latest/userguide/what-is-savings-plans.html">Compute Savings Plans</a> are available for all compute resources, including not only EC2, but Fargate and Lambda, as well. Compute Savings Plans do not have capacity reservations, by default (they can be enabled manually), but the (cost) gains are very similar to reserved instances. Compute Saving Plans are also more flexible and customizable than Reserved Instances but cannot be put on <a href="https://aws.amazon.com/marketplace">marketplace</a>, as of now.</p><p>Savings Plan pages have a purchase recommendations page, which you can base your plans:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*7-JslBTvwSXXk7sY" /></figure><p>You should monitor your <a href="https://aws.amazon.com/blogs/aws-cloud-financial-management/getting-started-with-aws-savings-plans/">coverage </a>for saving plans (and also reserved instances); coverage shows how many of your (candidate) resources are covered by your plans:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/748/0*vt_9hxzC8pU1-r5F" /></figure><p>You should also check <a href="https://aws.amazon.com/blogs/aws/aws-cost-explorer-update-reserved-instance-utilization-report/">utilization </a>reports for your savings plans (and also reserved instances); utilization shows the percentage of your reservations you are using:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/754/0*9QTNiYxp8onuOewU" /></figure><p>You can also create <a href="https://docs.aws.amazon.com/savingsplans/latest/userguide/sp-overview.html#sp-alert">alarms </a>for coverage and utilization and get notified whenever your usage drops below a predefined value.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/991/0*vhQuAE56yER4AWch" /></figure><p>Ease: 4/5: It is easy to enable these, but planning effectively requires time and not everyone is ready to plan for commitment.</p><p>Effect: 5/5: If planned with care, this is one of the MUST DOs, for long term commitment.</p><h3>🗹 Use Spot Fleets:</h3><p>Compute Savings Plan can be a good choice for long term commitments but what about intermittent compute needs (like report generation, data science pipelines, … etc) ? You can use <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html">spot instances</a> for these and similar purposes. For fargate it is called <a href="https://aws.amazon.com/blogs/aws/aws-fargate-spot-now-generally-available/">fargate spot</a>. You can set a price for the instance type you want, whenever the current spot price drops below your price, you acquire that instance. You can view pricing history for different zones and instance properties:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*dm8dYCTPFW1E2d0W" /></figure><p>The drawback of spot instances is that, they can be (terminated) and taken away from you whenever AWS needs them. This may seem intimidating, but actually less than 5% of Spot instances are terminated in any given month; so they are (in practice) fairly reliable. You can form machine pools for your daytime workloads, called <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet.html">spot-fleets</a>, combining savings plan (or reserved) instances and spot instances. This way, your always-on instances take your (ceil) idle load and spot instances kick in when there’s spike/increase in load. This actually is becoming the go to <a href="https://aws.amazon.com/blogs/containers/autoscaling-eks-on-fargate-with-custom-metrics/">architecture</a> even for kubernetes workloads, be it EC2 or Fargate. This way, you get the full cost benefit of long-term commitment and short-term workload provisioning.</p><p>Ease: 3/5: It requires a bit of work.</p><p>Effect: 5/5: If planned with care, this is also one of the MUST DOs.</p><h3>Network:</h3><h3>🗹 Use CloudFront:</h3><p><a href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html">CloudFront’s </a>main use case is content delivery at the edge. If you have lots of cachable (eg: static, get requests, …etc) content in your services, it will help produce low latency and high performance responses to your users. This caching comes at a price but <a href="https://aws.amazon.com/blogs/networking-and-content-delivery/cost-optimizing-your-aws-architectures-by-utilizing-amazon-cloudfront-features/">reduces your compute and network costs</a>, even sometimes by a heavy tradeoff margin.</p><p>If you’re using AWS WAF with CloudFront (and you’ll mostly be), you can also purchase a <a href="https://aws.amazon.com/about-aws/whats-new/2021/02/introducing-amazon-cloudfront-security-savings-bundle/">Savings Bundle</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*N7ueLlsYiRQ6P6im" /></figure><p>Ease: 2/5: It is that not easy to setup and manage.</p><p>Effect: 3/5: If planned with care, can result in a fair amount of cost reduction.</p><h3>🗹 Choose network components wisely:</h3><p>It’s better to check how <a href="https://aws.amazon.com/ec2/pricing/on-demand/#Data_Transfer">AWS network costs occur,</a> before making any decisions. Some network interplay may require additional <a href="https://aws.amazon.com/blogs/architecture/overview-of-data-transfer-costs-for-common-architectures/">components</a>, like VPN, transit gateway, private-link, …etc. Most of them come with an always-on cost, accumulated in a timely manner, and a pay-as-you-go cost, accumulated whenever network packets pass through. There may be more than one possible (alternative) component for your needs. For example; gateway endpoints (which are only available for S3 and DynamoDB, for now,) are free but interface endpoints have both types of costs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/874/0*VIaA5eCFI5b6YRlg" /></figure><p>As another example, internet gateway does not incur any cost (except net-in and out), itself, but NAT Gateway has both types of costs:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*P6L_dVt69n6_kQda" /></figure><p>Ease: 1/5: It is that not easy to setup, manage and keep track.</p><p>Effect: 3/5: If you do not keep track, you may face with a lot of extra network costs.</p><h3>Summary</h3><p>The complete checklist, with ease and effect scores, is summarized in the below table:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/775/1*sAMGNuWaSm4KUFu9egQw1A.png" /><figcaption>Checklist summary</figcaption></figure><h3>References:</h3><ul><li><a href="https://learn.finops.org">https://learn.finops.org</a></li><li>AWS FinOps Simplified: Eliminate cloud waste through practical FinOps, by Peter Chung</li><li><a href="https://docs.aws.amazon.com">https://docs.aws.amazon.com</a></li><li><a href="https://aws.amazon.com/whitepapers">https://aws.amazon.com/whitepapers</a></li><li>Cloud FinOps: Collaborative, Real-Time Cloud Financial Management, by J. R. Storment, Mike Fuller.</li></ul><p><strong><em>Note</em></strong><em>: This is the last part of a three part series. The first part is </em><a href="https://medium.com/codable/unlocking-financial-efficiency-in-the-cloud-era-2052c3ad718f"><em>here</em></a><em>, and the previous part is </em><a href="https://medium.com/codable/cost-optimisation-checklist-for-aws-part-1-2-92a0ea17da00"><em>here</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3244ed12c3db" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codable/cost-optimisation-checklist-for-aws-part-2-2-3244ed12c3db">Cost optimisation checklist for AWS — Part 2/2</a> was originally published in <a href="https://medium.com/codable">Codable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cost optimisation checklist for AWS — Part 1/2]]></title>
            <link>https://medium.com/codable/cost-optimisation-checklist-for-aws-part-1-2-92a0ea17da00?source=rss----d2b12a6bf306---4</link>
            <guid isPermaLink="false">https://medium.com/p/92a0ea17da00</guid>
            <category><![CDATA[finops]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[checklist]]></category>
            <category><![CDATA[cost-optimization]]></category>
            <dc:creator><![CDATA[Ali Basakil]]></dc:creator>
            <pubDate>Tue, 04 Jun 2024 20:38:24 GMT</pubDate>
            <atom:updated>2024-06-05T13:09:45.437Z</atom:updated>
            <content:encoded><![CDATA[<h3>Cost optimisation checklist for AWS — Part 1/2</h3><p><strong><em>Note</em></strong><em>: This is the second part of a three part series. The first part is </em><a href="https://medium.com/codable/unlocking-financial-efficiency-in-the-cloud-era-2052c3ad718f"><em>here</em></a><em>, and the next part is </em><a href="https://medium.com/codable/cost-optimisation-checklist-for-aws-part-2-2-3244ed12c3db"><em>here</em></a><em>.</em></p><p>AWS entered our lives many years ago and made them a lot easier. It started with simple services, like object storage and virtual machines, then a lot of managed services are put in service. But these all come at a cost (pun intended), and with a little more attention and a bit of work, you can reduce a fair amount of your cloud bills. This article series intend to give you a checklist for quick and simple advices to do that, in an organized manner. I tried to be brief and concise, so there are hyperlinks to detailed documentation links and examples, wherever applicable.</p><p>“Cost optimisation checklist for AWS” comprises the last two parts of the three part <a href="https://medium.com/codable/unlocking-financial-efficiency-in-the-cloud-era-2052c3ad718f">FinOps series</a> and contains five sections. First section, “Tools to observe your cloud expenditure” introduces AWS’s own tools that help you to understand your expenditure so that you can act on avoidable ones with the tools you learn in the following sections. Second section lists general items. Third section explains cost reduction tips on storage and db related services. Fourth section shows tips on compute related services. Finally, the last section tries to make you understand your network related costs and adds a summary part.</p><h3>01 — Tools to observe your cloud expenditure:</h3><p>This chapter is all about the “Inform” phase of FinOps. Premature optimisation is a trap to avoid, so we should better gather information.</p><h3>🗹 Use Cost Explorer &amp; Reports:</h3><p><a href="https://docs.aws.amazon.com/cost-management/latest/userguide/ce-what-is.html">Cost explorer</a> is the main resource to find where excess costs are occurring in your account. After you <a href="https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html">enable</a> it, you can view current expenditures and forecasts, both using graphs and detailed reports.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*YNFCXEFo8Q6zok0d" /></figure><p>Ease: 3/5 : Dashboard style general reporting is easy to understand but you may have to dive deep into reports to make fine grained decisions.</p><p>Effect: 2/5: First few visits may reveal big gains but after applying other items (in this list), you will feel you don’t need that much any more.</p><h3>🗹 Use Budget alarms:</h3><p>You can <a href="https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-create.html">add </a>cost budgets (and alarms), which inform you if your current costs are above a set threshold. Budget alarms can also be used to track (and fire alarms for future) cost estimations, in addition to actual costs. Below image shows the steps to create cost bucgets, and in the subsequent steps, budget alarms.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*_1oUed4PFyMfO06d" /></figure><p>Ease: 4/5: It is very easy to set a few budget alarms</p><p>Effect: 1/5: Alarms do not cause/show a direct gain but can be anchor to your spending, if you’ve mistakenly enabled something.</p><h3>🗹 Use (cost allocation) tags</h3><p>Adding (cost related) tags to resources makes it easy to group and track related costs.You can then use cost explorer and see your reports grouped by those tags.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*mW51to7UbAc8tn6r" /></figure><p>Ease: 2/5: It is not that easy to set rulesets and usage restrictions for cost allocation tags.</p><p>Effect: 2/5: This does not directly reduce your spendings but gives a better view of them.</p><h3>🗹 Use (Cost section of) Trusted Advisor:</h3><p><a href="https://docs.aws.amazon.com/awssupport/latest/user/trusted-advisor.html">Trusted Advisor</a> gives advices for a handful of sections and <a href="https://docs.aws.amazon.com/awssupport/latest/user/get-started-with-aws-trusted-advisor.html#view-check-categories">cost section</a> is one of these. It can be an easy visit, before you dive into more advanced tools.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*53J1548knUVdS1G_" /></figure><p>Ease: 5/5: It is very easy to enable it.</p><p>Effect: 3/5: It can actually give pretty good advices.</p><h3>🗹 Watch metrics &amp; logs:</h3><p><a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html">CloudWatch Metrics</a> give information about resource utilization and can direct you to unexpected resource usage. <a href="https://docs.aws.amazon.com/prescriptive-guidance/latest/logging-monitoring-for-application-owners/cloudwatch.html">Application logs</a> and access logs may give information when unexpected costs occur. As an example; your load balancer may be under complicated DDoS or bot attack and you can detect this via tracing <a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html">ELB access logs</a>, <a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html">ELB</a> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html">compute metrics</a>. You can even create metric or <a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Alarm-On-Logs.html">log alarms</a>, if you see a pattern.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/818/0*TVv-e-TYr_ApNGBv" /></figure><p>Ease: 1/5: Metrics and logs are readily available for some services but it can be hard to extract useful information out of them. It usually needs time and experience to do it efficiently.</p><p>Effect: 3/5: It can detect many areas where others fail.</p><h3>🗹 Use Storage Lens:</h3><p><a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_basics_metrics_recommendations.html">S3 Storage Lens</a> can be used to get an overview of S3 usage, current and historical.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Tgv4x1ujQp2jgrJx" /></figure><p>Interrupted multipart uploads can cause unnecessary S3 storage costs. You can scroll down to “<a href="https://aws.amazon.com/blogs/aws-cloud-financial-management/discovering-and-deleting-incomplete-multipart-uploads-to-lower-amazon-s3-costs/">Top N overview</a>” in the storage lens dashboard window and find “Incomplete MPU Bytes” which depicts the amount of incomplete multipart uploads, as bytes. But there is a better solution to this: You can <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html">configure an S3 bucket lifecycle policy</a> to remove old incomplete MPUs automatically.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/538/0*_I5bWQCyO3cC8H6i" /></figure><p>Ease: 3/5: It has a useful dashboard but going into details can be tiresome.</p><p>Effect: 2/5: It is service specific and has a limited focus.</p><h3>02 — General</h3><h3>🗹 Use AWS Organisations:</h3><p>In addition to making it easy to manage and organize your accounts and resources, using AWS Organizations can also have a direct effect of reduced costs, for some resources. S3 is an example. The more objects you store in S3, your unit pricing drops, step by step.</p><p>Below shows sample steppings:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/589/1*SD3nmZPy9nIQ53HdZZ1H0g.png" /></figure><p>If you combine all (or most) of your accounts in AWS Organisations and utilize consolidated billing, AWS behaves all your resource usage and expenditures as if they are coming from a single account, so your costs hit reduced pricing steps earlier. Below is an example calculated for storing 100GB (on the average) in 10 accounts:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/782/1*OQBIaPcU6L1hhJbZ2U8YSg.png" /></figure><p>Total cost, without consolidated billing, is 50000*0.023 + 50000*0.022 = $2250 per account, so <strong>$22500</strong> for 10 accounts.</p><p>If consolidated billing is used, it will be 50000*0.023+450000*0.022+500000*0.021 = <strong>$21550</strong> for 10 accounts, which is $1000 lower than sans consolidated billing.</p><p>AWS Organisations have also other cost related benefits, such as sharing reserved instances and saving plans across accounts, so you may get more benefits from other items by enabling and setting up AWS Organisations.</p><p>Ease: 2/5: It’s main purpose is not about cost and It is may be difficult to setup, if you’ve not done before.</p><p>Effect: 1/5: Has a limited cost reduction rate.</p><h3>🗹 Work with an AWS Partner:</h3><p>AWS has a partnership program, with more than two thousand companies already enrolled in. If you work with an <a href="https://aws.amazon.com/partners/services-tiers/">advanced or premium tier service partner</a>, you will most probably be entitled to discounts, amount changing according to your use case. You can find a partner <a href="https://partners.amazonaws.com/search/partners">here</a>.</p><p>Ease: 5/5: You won’t be doing much.</p><p>Effect: 2/5</p><h3>03- Storage and DB</h3><h3>🗹 Use S3 storage classes and lifecycle policies:</h3><p>S3 has different storage classes that have different storage costs and access costs. They are inversely related (classes having lower storage prices have higher access prices). Rarely accessed data can be moved to Glacier storage classes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Xi_NeSajGXNjYY5X" /></figure><p>There is also a new class, called intelligent tiering, which automatically moves between tiers (except Glacier classes, afaik). It can also be used, if it seems tedious to observe and switch tiers. But in this case, S3 lifecycle policies can also be utilized:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/815/0*vpJEuf3ODUVb-WcI" /></figure><p>Note that, each tier switch, manual or by policy, costs around $0.01 for a thousand requests (objects).</p><p>Ease: 4/5: Setting up lifecycle policies is not that difficult. Intelligent tiering also automates some of the work..</p><p>Effect: 3/5: You can achieve quite a lot of gains if you are storing lots of large objects..</p><h3>🗹 Use Reserved Instances for datastore services:</h3><p>“Compute Savings Plan” is the preferred path to go for compute services in AWS but Reserved Instances is still the choice for <a href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithReservedDBInstances.html">RDS</a>, <a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ri.html">OpenSearch </a>and the services like (since there’s no compute savings option for them, yet). Keep in mind that, reserving intra-region instances has more advantages, like using them as stand-by replicas and being able to be more specific for instance types (since AZs will already be selected). It is also advised to enable auto-expand for all instances.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/619/0*wZJTIr4KfNx0q9X1" /></figure><p>Ease: 3/5</p><p>Effect: 4/5: Reserved instances usually have high returns, especially with high utilization.</p><h3>🗹 Use OpenSearch ultra-warm nodes:</h3><p>In addition to using <a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ri.html">reserved instances</a> for OpenSearch nodes, you can also enable <a href="https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ultrawarm.html">ultra-warm storage</a> (which utilize S3), wherever applicable. Note that ultra-warm nodes can only be used for read-only indexes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/553/0*5IajGpnBIo79SPSJ" /></figure><p>Ease: 2/5: Monitoring and weigthing the effectiveness may be difficult.</p><p>Effect: 2/5: Has limited use cases..</p><h3>🗹 Use DynamoDB capacity modes and reserved capacity:</h3><p>If you are using DynamoDB, you’ll already be using one of the <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/capacity-mode.html">capacity modes</a>.Default is the <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/on-demand-capacity-mode.html">on-demand</a> mode.You can switch to provisioned capacity and provision read + write units after viewing ConsumedReadCapacityUnits and ConsumedWriteCapacityUnits DynamoDB metrics. A better way is to enable (provisioned capacity) autoscaling:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*NdYngSSwOEZmrRhu" /></figure><p>Below is an active monitoring of how auto-scaling works. If you define a larger target utilization, you pay less but you risk hitting the capacity on usage spikes (eg: check ~12 UTC at the graph):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*uZ18UxRzBMguhmfP" /></figure><p>Ease: 4/5: Not that difficult to enable and monitor provisioned capacity, and auto scaling reduces the risks.</p><p>Effect: 3/5: Definitely provides some cost gains.</p><h3>🗹 Use EBS Snapshot Archives and EBS Recycle Bin:</h3><p>You will probably be storing EBS snapshots, if you are working with EC2 instances a lot, on production. It is one of the easiest methods of backing up instances and a way of creating golden AMIs.</p><p>These backups can be <a href="https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-archive.html">archieved </a>in a region after a while (eg: 3 months) and sent to the requesting region(s) whenever required. <a href="https://docs.aws.amazon.com/ebs/latest/userguide/recycle-bin-working-with-snaps.html">EBS Recyle bin</a> provides a way to send these archives to trash (eg: after a year), with an option to recover, for a limited time period. You can also <a href="https://aws.amazon.com/blogs/aws/new-recycle-bin-for-ebs-snapshots/">define retention rules</a> for archives and recycle bin, to automate these processes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*FnOPIkrD1GN0SxGc" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/765/0*NYg8n3rGUTdeFo1w" /></figure><p>Ease: 4/5: Setting up rules and archives is easy.</p><p>Effect: 2/5: You can achieve a bit of gain, to an extend, if you are keeping a lot of images.</p><h3>🗹 Use EFS storage classes:</h3><p>EFS has <a href="https://docs.aws.amazon.com/efs/latest/ug/availability-durability.html#storage-classes">storage classes</a>, similar to S3. EFS also have intelligent tiering and lifecycle policies:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*P-drHYthargxB_6y" /></figure><p>Ease: 4/5: Setting up lifecycle policies is not that difficult. Intelligent tiering also automates some of the work.</p><p>Effect: 2/5: You can achieve quite a lot of gains if you are storing lots of large objects but EFS is not as widespread as S3.</p><p><strong><em>Note</em></strong><em>: This is the second part of a three part series. The first part is </em><a href="https://medium.com/codable/unlocking-financial-efficiency-in-the-cloud-era-2052c3ad718f"><em>here</em></a><em>, and the next part is </em><a href="https://medium.com/codable/cost-optimisation-checklist-for-aws-part-2-2-3244ed12c3db"><em>here</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=92a0ea17da00" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codable/cost-optimisation-checklist-for-aws-part-1-2-92a0ea17da00">Cost optimisation checklist for AWS — Part 1/2</a> was originally published in <a href="https://medium.com/codable">Codable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[BIOBSS: A biological signal processing and feature extraction library]]></title>
            <link>https://medium.com/codable/biobss-a-biological-signal-processing-and-feature-extraction-library-137f9b082634?source=rss----d2b12a6bf306---4</link>
            <guid isPermaLink="false">https://medium.com/p/137f9b082634</guid>
            <dc:creator><![CDATA[İpek Karakuş]]></dc:creator>
            <pubDate>Fri, 03 Feb 2023 16:36:16 GMT</pubDate>
            <atom:updated>2023-02-03T16:36:16.682Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*o6VnQDUnDCwCu6IO" /><figcaption>Photo by <a href="https://unsplash.com/@rubaitulazad?utm_source=medium&amp;utm_medium=referral">Rubaitul Azad</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p><strong>Github:</strong> <a href="https://github.com/obss/BIOBSS">https://github.com/obss/BIOBSS</a></p><h4><strong>What is BIOBSS used for?</strong></h4><p>Wearable sensors are becoming more and more popular these days, and with that, comes the need to process the signals these sensors collect. To help with this, several open-source tools and packages have been developed, and BIOBSS is a relatively new one among them, developed by<a href="https://obss.tech/en/"> OBSS</a> R&amp;D team.</p><p>BIOBSS is a signal processing and feature extraction library that can process electrocardiography (ECG), photoplethysmography (PPG), electrodermal activity (EDA), and 3-axis acceleration (ACC) signals. With BIOBSS, you can create end-to-end pipelines by adding the necessary processes from BIOBSS or other Python packages.</p><p>Here are the things you can do with BIOBSS:</p><ul><li>Applying basic preprocessing steps (*)</li><li>Assessing the quality of PPG and ECG signals</li><li>Extracting features from ECG, PPG, EDA, and ACC signals</li><li>Performing Heart Rate Variability (HRV) analysis using PPG and ECG signals</li><li>Extracting respiratory signals from PPG or ECG signals and estimating respiratory rate (*)</li><li>Calculating activity indices from ACC signals</li><li>Creating and saving pipelines</li></ul><p>(*): Not all methods were implemented from scratch but imported from existing packages</p><p>In simple words, BIOBSS is a tool that can help you have a deeper look and insight into the data your wearable sensor collects by processing and analyzing it.</p><h4>What sets BIOBSS apart from similar packages?</h4><p>BIOBSS has some functionalities that set it apart from its peers. Below, you can see a table that compares existing packages with BIOBSS and highlights its unique functionalities.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NZHLvk0fMtBmonlS2GaOIw.jpeg" /><figcaption><strong>Modified from</strong> <em>Föll, Simon, et al. “FLIRT: A feature generation toolkit for wearable data.” Computer Methods and Programs in Biomedicine 212 (2021): 106461.</em></figcaption></figure><p>Here are the key features that make BIOBSS stand out:</p><p><strong>1)</strong> One of the biggest advantage of BIOBSS is its ability to create end-to-end pipelines for signal processing and feature extraction. This means, you can use the functions independently or string them together to create a custom pipeline that fits your specific needs. Other Python packages (e.g. Neurokit2) may have the option to splice functions together, but BIOBSS’s well-structured pipeline module makes it easy to define input/output signals and add processes. Additionally, BIOBSS’s pipeline module has the flexibility of incorporating processes from both BIOBSS’s own modules and other external Python packages that may better suit your needs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wRLKka6aL3bFNGfl7rrqJQ.jpeg" /><figcaption>A generic pipeline</figcaption></figure><p><strong>2)</strong> With BIOBSS, you can extract commonly used features from ECG, PPG, EDA and ACC signals. To the best of our knowledge, BIOBSS is the only package to calculate PPG features. It also has modules for fiducial point detection and feature extraction of VPG (first derivative of PPG) and APG (second derivative of PPG) signals.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/865/1*MgiUQyY5y-cv74rHXXZx5A.jpeg" /><figcaption>Types of features which can be calculated using BIOBSS</figcaption></figure><p><strong>3)</strong> BIOBSS can calculate commonly used activity metrics from ACC signals by processing raw acceleration signals, properly, for each index. While other Python packages may calculate specific activity metrics, BIOBSS has the advantage of preprocessing the raw signal properly and returning multiple metrics calculated for various datasets (preprocessing alternatives) at one time.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8JSwKg4DOnkzYL88ByGT5g.png" /><figcaption>Activity metrics which can be calculated using BIOBSS (Source: <a href="https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0261718">https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0261718</a>)</figcaption></figure><p><strong>4)</strong> BIOBSS enables you to evaluate the quality of ECG and PPG signals by utilizing morphological filtering. You can apply rule-based steps and a template matching method either separately or together. While the signal quality assessment module requires further development, it is still a useful tool for those who want to understand the standards a high-quality signal should meet.</p><p><strong>How to install and import BIOBSS?</strong></p><p>You can install BIOBSS via pip:</p><pre>pip install biobss</pre><p>or build from source,</p><pre>git clone https://github.com/obss/biobss.git<br>cd BIOBSS<br>python setup.py install</pre><p>To import BIOBSS:</p><pre>import biobss</pre><h4><strong>How to use BIOBSS?</strong></h4><p>We created tutorial notebooks for specific signal processing and feature extraction scenarios. You can have a look at them and start using BIOBSS for your needs.</p><ul><li>For tutorial notebooks :</li></ul><p><a href="https://github.com/obss/BIOBSS/tree/main/examples">https://github.com/obss/BIOBSS/tree/main/examples</a></p><p>To learn more about BIOBSS, you can also visit the official documentation page:</p><p><a href="https://biobss.readthedocs.io/en/latest/">https://biobss.readthedocs.io/en/latest/</a></p><h4><strong>Final words</strong></h4><p>BIOBSS is a versatile package that can help you process signals from wearable sensors in a variety of ways. Whether you’re looking to extract features, create pipelines, or assess signal quality; BIOBSS has the tools you need to get the job done. It is important to note that, BIOBSS is still under development and we are working to improve existing functionalities and add new features to it.</p><p>Stay tuned!</p><p><strong>Acknowledgement: </strong>Thanks to <a href="https://medium.com/u/7dae35be6957">Devrim Çavuşoğlu</a> and <a href="https://medium.com/u/fcdfa0768908">Cagatay Tasci</a> for their valuable feedback.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=137f9b082634" width="1" height="1" alt=""><hr><p><a href="https://medium.com/codable/biobss-a-biological-signal-processing-and-feature-extraction-library-137f9b082634">BIOBSS: A biological signal processing and feature extraction library</a> was originally published in <a href="https://medium.com/codable">Codable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>