<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Software Development, Test Automation, and DevOps for Fast-Growing Companies on Dennis Martinez | Helping Tech Teams Ship Rails Code Confidently</title><link>https://dennmart.com/</link><description>Recent content in Software Development, Test Automation, and DevOps for Fast-Growing Companies on Dennis Martinez | Helping Tech Teams Ship Rails Code Confidently</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://dennmart.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Should You Fix AI-Generated Code or Rebuild It?</title><link>https://dennmart.com/articles/should-you-fix-ai-generated-code-or-rebuild-it/</link><pubDate>Mon, 03 Aug 2026 21:21:05 +0900</pubDate><guid>https://dennmart.com/articles/should-you-fix-ai-generated-code-or-rebuild-it/</guid><description>&lt;p&gt;There&amp;rsquo;s a good chance your organization is running code in your production environment right now that nobody on your engineering team wrote. AI-generated code is finding its way into codebases from every direction, and plenty of it ships without an engineer ever looking at it.&lt;/p&gt;
&lt;p&gt;A company in the media space I’ve been helping recently contacted me about a Rails application that had grown substantially over the past six months. Their application has a custom-made administration section that serves internal team members. Tired of waiting for someone in the 4-person engineering team to have enough bandwidth to handle feature requests, the non-technical team members from departments like marketing and management learned how to use &lt;a href="https://claude.com/product/claude-code"&gt;Claude Code&lt;/a&gt; and began developing what they needed and submitting new functionality on a weekly basis.&lt;/p&gt;</description></item><item><title>Secure Kamal Deployments With Tailscale SSH</title><link>https://dennmart.com/articles/secure-kamal-deployments-with-tailscale-ssh/</link><pubDate>Mon, 08 Jun 2026 16:50:47 +0900</pubDate><guid>https://dennmart.com/articles/secure-kamal-deployments-with-tailscale-ssh/</guid><description>&lt;p&gt;Deploying your applications using platforms such as Heroku can help you get moving quickly at the start. However, as your application grows over time, you might be unpleasantly surprised at how quickly costs can ramp up. These days, we have plenty of options to choose from that are just as easy to deploy on while giving complete control over the infrastructure. Using tools like &lt;a href="https://kamal-deploy.org/"&gt;Kamal&lt;/a&gt;, teams can set up a powerful server that costs less per month compared to Heroku.&lt;/p&gt;</description></item><item><title>Leaving Heroku: Which Provider Should You Choose?</title><link>https://dennmart.com/articles/leaving-heroku-which-provider-should-you-choose/</link><pubDate>Wed, 21 Jan 2026 20:00:00 +0900</pubDate><guid>https://dennmart.com/articles/leaving-heroku-which-provider-should-you-choose/</guid><description>&lt;p&gt;For years, &lt;a href="https://www.heroku.com/"&gt;Heroku&lt;/a&gt; has been one of the best ways to deploy your web applications. It completely removes the friction of managing infrastructure, which was a huge pain in the days before cloud computing and easy-to-deploy tools were widely adopted. Instead of struggling with server setup and configuration, developers could focus on building new features and leave the &amp;ldquo;dirty work&amp;rdquo; to Heroku. Even though the benefits came at a cost, we were happy to pay for it since there weren&amp;rsquo;t many simpler alternatives at the time. However, things have changed with Heroku&amp;rsquo;s value proposition.&lt;/p&gt;</description></item><item><title>Using Kamal's Local Registry for Simpler Deployments</title><link>https://dennmart.com/articles/using-kamal-local-registry-for-simpler-deployments/</link><pubDate>Thu, 30 Oct 2025 11:40:47 +0900</pubDate><guid>https://dennmart.com/articles/using-kamal-local-registry-for-simpler-deployments/</guid><description>&lt;p&gt;Kamal is a great tool for deploying web applications to the server of your preference, and it&amp;rsquo;s an excellent choice to ship web projects, especially side projects. However, it does have its shortcomings for people who want to begin using it for the first time. One of the main barriers to adopting Kamal is that it would require you to have access to a remote Docker container registry.&lt;/p&gt;
&lt;p&gt;When deploying your app using Kamal, it builds the image from the Dockerfile in your repository, pushes it to the remote container registry, and then pulls that image into the server where you&amp;rsquo;re deploying. While services like GitHub, GitLab, and Amazon Web Services all offer container registries, each requires configuration, permissions setup, and sometimes additional costs.&lt;/p&gt;</description></item><item><title>Review Apps With Kamal (Part 6) - Docker Cache and PR Comments</title><link>https://dennmart.com/articles/review-apps-with-kamal-part-6-docker-cache-and-pr-comments/</link><pubDate>Wed, 11 Jun 2025 17:47:01 +0900</pubDate><guid>https://dennmart.com/articles/review-apps-with-kamal-part-6-docker-cache-and-pr-comments/</guid><description>&lt;p&gt;Throughout this series of articles, we&amp;rsquo;ve gone through the entire process of setting up a review application workflow for web apps using Kamal, from setting up our cloud infrastructure to getting our application fully deployed and ready for testing.&lt;/p&gt;
&lt;div class="sidenote relative rounded-xl border border-accent/30 bg-dark-800/50 p-6 not-prose my-8"&gt;
 &lt;div class="absolute -top-3 left-6 px-3 py-1 rounded-full bg-accent/20 border border-accent/30"&gt;
 &lt;p class="text-sm font-semibold text-accent uppercase tracking-wide"&gt;
 Get up to date with the series
 &lt;/p&gt;
 &lt;/div&gt;
 &lt;div class="text-base text-gray-300 leading-relaxed space-y-3 mt-2"&gt;
&lt;p&gt;If you want to read the entire series before diving into this article, check out the entire set of previous articles before finishing the series here:&lt;/p&gt;</description></item><item><title>Review Apps With Kamal (Part 5) - Using Hooks to Check Setup</title><link>https://dennmart.com/articles/review-apps-with-kamal-part-5-using-hooks-to-check-setup/</link><pubDate>Tue, 13 May 2025 15:09:23 +0900</pubDate><guid>https://dennmart.com/articles/review-apps-with-kamal-part-5-using-hooks-to-check-setup/</guid><description>&lt;p&gt;Things are shaping up nicely as we roll along in this series on using Kamal to spin up review applications when opening new pull requests. We have a GitHub Actions workflow that creates new servers on the cloud, sets up a destination for these review apps, and automates the deployment process to get a new web application instance up and running on a unique domain name. This entire sequence already works great for letting teams begin testing pull requests when using Kamal for deployments, but we still have some lingering issues to address.&lt;/p&gt;</description></item><item><title>Review Apps With Kamal (Part 4): Instant URLs for Our Apps</title><link>https://dennmart.com/articles/review-apps-with-kamal-part-4-instant-urls-for-our-apps/</link><pubDate>Mon, 14 Apr 2025 16:39:24 +0900</pubDate><guid>https://dennmart.com/articles/review-apps-with-kamal-part-4-instant-urls-for-our-apps/</guid><description>&lt;p&gt;Throughout this series, we&amp;rsquo;ve set up an automated system to create temporary environments and deploy web applications for review purposes, similar to Heroku&amp;rsquo;s review apps functionality. The first step consisted of &lt;a href="https://dennmart.com/articles/review-apps-with-kamal-part-1-provisioning-servers/"&gt;using Terraform to spin up new servers on the cloud when opening a pull request on GitHub&lt;/a&gt;, then we &lt;a href="https://dennmart.com/articles/review-apps-with-kamal-part-2-configuring-destinations/"&gt;set up Kamal to use a new destination for deploying apps to those review environments&lt;/a&gt;. In the last article of this series, we finished &lt;a href="https://dennmart.com/articles/review-apps-with-kamal-part-3-automating-deployments/"&gt;automating the process of using Kamal to deploy a web application to the new infrastructure&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Review Apps With Kamal (Part 3): Automating Deployments</title><link>https://dennmart.com/articles/review-apps-with-kamal-part-3-automating-deployments/</link><pubDate>Mon, 24 Mar 2025 16:07:18 +0900</pubDate><guid>https://dennmart.com/articles/review-apps-with-kamal-part-3-automating-deployments/</guid><description>&lt;p&gt;In this series, we&amp;rsquo;re going through the process of recreating a workflow similar to Heroku&amp;rsquo;s review apps for web applications using &lt;a href="https://kamal-deploy.org/"&gt;Kamal&lt;/a&gt; for deployments. &lt;a href="https://dennmart.com/articles/review-apps-with-kamal-part-1-provisioning-servers/"&gt;The first article&lt;/a&gt; covered using Terraform to create the infrastructure for your apps through GitHub Actions, and &lt;a href="https://dennmart.com/articles/review-apps-with-kamal-part-2-configuring-destinations/"&gt;the follow-up&lt;/a&gt; discussed how to use Kamal destinations to configure deployments to different environments. These two articles cover the foundation for our Kamal-powered review apps.&lt;/p&gt;
&lt;p&gt;After creating new servers and configuring Kamal for the new environments, the next step is automatically performing deployments when opening or updating a pull request. Here is where everything begins to come together to have a usable system using your own infrastructure that you and your team can use to validate new functionality or bug fixes before merging into your main branch.&lt;/p&gt;</description></item><item><title>Review Apps With Kamal (Part 2): Configuring Kamal Destinations</title><link>https://dennmart.com/articles/review-apps-with-kamal-part-2-configuring-destinations/</link><pubDate>Thu, 27 Feb 2025 12:04:08 +0900</pubDate><guid>https://dennmart.com/articles/review-apps-with-kamal-part-2-configuring-destinations/</guid><description>&lt;p&gt;In my previous article, I began setting up a web application that uses Kamal for deployments to create a review app. The intent for setting up this system is so that any time you or someone on your team opens a new pull or merge request, you&amp;rsquo;ll have an instance of your application running for verification purposes.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dennmart.com/articles/review-apps-with-kamal-part-1-provisioning-servers/"&gt;The first part of this series&lt;/a&gt; shows how you can use tools like Terraform and GitHub Actions to spin up new servers when opening a pull request and clean things up once finished. In this article, I&amp;rsquo;ll continue with that setup and begin setting up Kamal to allow deployments to different environments. In future articles, I&amp;rsquo;ll use this setup to deploy an application to the newly-provisioned infrastructure automatically and have a usable environment ready for testing.&lt;/p&gt;</description></item><item><title>Review Apps With Kamal (Part 1): Provisioning Servers</title><link>https://dennmart.com/articles/review-apps-with-kamal-part-1-provisioning-servers/</link><pubDate>Fri, 10 Jan 2025 16:18:35 +0900</pubDate><guid>https://dennmart.com/articles/review-apps-with-kamal-part-1-provisioning-servers/</guid><description>&lt;p&gt;I&amp;rsquo;m a huge fan of &lt;a href="https://kamal-deploy.org/"&gt;Kamal&lt;/a&gt; for deploying my web applications. I love that it gives me more control over how and where I host my web apps, letting me choose more powerful cloud server providers at a cheaper cost without sacrificing ease of use. I&amp;rsquo;ve been updating my personal projects to use Kamal for deployments, and I couldn&amp;rsquo;t be happier with how smooth it&amp;rsquo;s been for me to migrate to better hardware for less money.&lt;/p&gt;</description></item><item><title>High Availability PostgreSQL Replication With Kamal</title><link>https://dennmart.com/articles/high-availability-postgresql-replication-with-kamal/</link><pubDate>Fri, 20 Dec 2024 12:05:50 +0900</pubDate><guid>https://dennmart.com/articles/high-availability-postgresql-replication-with-kamal/</guid><description>&lt;p&gt;One of the downsides of using &lt;a href="https://kamal-deploy.org/"&gt;Kamal&lt;/a&gt; for deploying your web applications, compared to using a platform as a service like Heroku, is that you&amp;rsquo;re now fully responsible for the safety of your application&amp;rsquo;s data. That means you&amp;rsquo;ll need to set up processes that&amp;rsquo;ll help you get back up and running without data loss if something were to happen to your running database—and believe me, disaster can strike at any time.&lt;/p&gt;</description></item><item><title>Kamal 2: What's New and How to Easily Upgrade Your Apps</title><link>https://dennmart.com/articles/kamal-2-whats-new-and-how-to-easily-upgrade-your-apps/</link><pubDate>Mon, 02 Dec 2024 17:20:30 +0900</pubDate><guid>https://dennmart.com/articles/kamal-2-whats-new-and-how-to-easily-upgrade-your-apps/</guid><description>&lt;p&gt;&lt;a href="https://37signals.com/"&gt;37signals&lt;/a&gt;, the team behind &lt;a href="https://kamal-deploy.org/"&gt;Kamal&lt;/a&gt;, released &lt;a href="https://dev.37signals.com/kamal-2/"&gt;Kamal v2.0&lt;/a&gt; during the 2024 Rails World conference in September 2024. This release has a lot of improvements that resolve many common complaints about the tool, and it should make your deployments go much smoother than before.&lt;/p&gt;
&lt;h2 id="main-changes-in-kamal-20"&gt;Main Changes in Kamal 2.0&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s talk about some of the main changes included in this release. Check out &lt;a href="https://kamal-deploy.org/docs/"&gt;Kamal&amp;rsquo;s documentation&lt;/a&gt; for more details about all the new updates.&lt;/p&gt;
&lt;h3 id="goodbye-traefikhello-kamal-proxy"&gt;Goodbye, Traefik—Hello, Kamal Proxy&lt;/h3&gt;
&lt;p&gt;The most significant change in Kamal 2.0 is the elimination of &lt;a href="https://traefik.io/traefik/"&gt;Traefik&lt;/a&gt; as the default proxy service for your deployed application. Instead, Kamal now uses a new proxy server called &lt;a href="https://github.com/basecamp/kamal-proxy"&gt;Kamal Proxy&lt;/a&gt;, built from scratch by the team at 37signals.&lt;/p&gt;</description></item><item><title>Secure Your Kamal App Deployments With Let's Encrypt</title><link>https://dennmart.com/articles/secure-your-kamal-app-deployments-with-lets-encrypt/</link><pubDate>Wed, 07 Aug 2024 15:44:46 +0900</pubDate><guid>https://dennmart.com/articles/secure-your-kamal-app-deployments-with-lets-encrypt/</guid><description>&lt;div class="relative rounded-xl border border-amber-500/30 bg-dark-800/50 p-6 not-prose my-8"&gt;
 &lt;div class="absolute -top-3 left-6 px-3 py-1 rounded-full bg-amber-500/20 border border-amber-500/30"&gt;
 &lt;p class="text-sm font-semibold text-amber-400 uppercase tracking-wide"&gt;
 Deprecated
 &lt;/p&gt;
 &lt;/div&gt;

 &lt;div class="text-base text-gray-300 leading-relaxed mt-2"&gt;
 
This article covers generating SSL certificates when using Kamal 1.x. The latest versions of Kamal 2.0 and above use a different proxy service that generates SSL certificates for your domains using Let's Encrypt. Refer to the &lt;a href="https://kamal-deploy.org/docs/configuration/proxy/" target="_blank" rel="noopener noreferrer"&gt;Kamal 2.0 proxy documentation&lt;/a&gt; for details on how to set up SSL certificates for applications deployed with newer versions of Kamal.

 &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://dennmart.com/articles/deploy-your-rails-applications-the-easy-way-with-kamal/"&gt;Deploying web applications using Kamal&lt;/a&gt; is pretty easy once you&amp;rsquo;ve chosen your preferred infrastructure and packaged your app into a Docker image. All it takes is a single command, and your application will be up and running on your chosen servers with little effort. Unfortunately, Kamal still doesn&amp;rsquo;t handle everything you need to set up a modern web application.&lt;/p&gt;</description></item><item><title>Dead Simple Load Testing at Scale on Lambda or Fargate</title><link>https://dennmart.com/articles/dead-simple-load-testing-at-scale-on-lambda-or-fargate/</link><pubDate>Wed, 31 Jul 2024 16:38:31 +0900</pubDate><guid>https://dennmart.com/articles/dead-simple-load-testing-at-scale-on-lambda-or-fargate/</guid><description>&lt;p&gt;Checking the performance and resiliency of your web applications is not an optional step in the software development process these days. Users want what they&amp;rsquo;re looking for fast, and if your site doesn&amp;rsquo;t load quickly enough for them, they&amp;rsquo;ll leave and likely never return. If you want to keep them around, you&amp;rsquo;ll need to make sure your site is speedy and responsive.&lt;/p&gt;
&lt;p&gt;My favorite testing tool to check the performance of my web apps is &lt;a href="https://artillery.io/"&gt;Artillery&lt;/a&gt;, an open-source load testing tool with everything you need to check how much load your site can withstand without breaking down. Using Artillery to create and execute load tests that go through common flows on your web APIs is straightforward, helping you spot obvious performance issues that you can fix quickly.&lt;/p&gt;</description></item><item><title>Hassle-Free Automated PostgreSQL Backups for Kamal Apps</title><link>https://dennmart.com/articles/hassle-free-automated-postgresql-backups-for-kamal-apps/</link><pubDate>Sat, 06 Jul 2024 15:09:51 +0900</pubDate><guid>https://dennmart.com/articles/hassle-free-automated-postgresql-backups-for-kamal-apps/</guid><description>&lt;p&gt;Kamal makes deploying web applications to your preferred infrastructure a breeze. With a single command, you can run a fully functional app on any server you choose, making it an excellent alternative to pricier platforms like Heroku. However, it has its tradeoffs, mainly that you need to manage a lot of the maintenance work yourself.&lt;/p&gt;
&lt;p&gt;One of the essential things you&amp;rsquo;ll need to handle yourself when using Kamal is backups, particularly database backups. Kamal will help you spin up and manage relational database servers easily, but you&amp;rsquo;re responsible for the data stored in those servers. That means you&amp;rsquo;ll need to set up systems to perform backups and quickly restore them when necessary.&lt;/p&gt;</description></item><item><title>Deploy Secure Load Balancers on Hetzner Cloud With Terraform</title><link>https://dennmart.com/articles/deploy-secure-load-balancers-on-hetzner-cloud-with-terraform/</link><pubDate>Wed, 12 Jun 2024 18:15:00 +0900</pubDate><guid>https://dennmart.com/articles/deploy-secure-load-balancers-on-hetzner-cloud-with-terraform/</guid><description>&lt;p&gt;In my previous article, &lt;a href="https://dennmart.com/articles/get-started-with-hetzner-cloud-and-terraform-for-easy-deployments/"&gt;&lt;em&gt;Get Started With Hetzner Cloud and Terraform for Easy Deployments&lt;/em&gt;&lt;/a&gt;, I showed how simple it is to use Terraform to manage a firewall, private network, and server on Hetzner Cloud for deploying web applications. For the example used in the article, I provisioned a single server to host a Ruby on Rails web application.&lt;/p&gt;
&lt;p&gt;The single-server approach works well for smaller sites that don&amp;rsquo;t have a ton of traffic. These days, you can get pretty far on one server before you need to add more to handle the load. But what if you already have a web application that you need to scale across multiple servers? For that, you&amp;rsquo;ll need a load balancer.&lt;/p&gt;</description></item><item><title>Get Started With Hetzner Cloud and Terraform for Easy Deployments</title><link>https://dennmart.com/articles/get-started-with-hetzner-cloud-and-terraform-for-easy-deployments/</link><pubDate>Fri, 17 May 2024 15:56:38 +0900</pubDate><guid>https://dennmart.com/articles/get-started-with-hetzner-cloud-and-terraform-for-easy-deployments/</guid><description>&lt;p&gt;&lt;em&gt;Prefer to watch a screencast instead? Check out the video at the end of this article.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;These days, it&amp;rsquo;s super-easy to spin up a server on the cloud and have it available in under a minute. Less than 20 years ago, provisioning a new server meant installing physical hardware, setting up networks, and configuring all the software you needed, and it would require a few weeks to complete. Now, you can instantly sign up to any available cloud provider like AWS, DigitalOcean, or Hetzner Cloud and click on a few buttons to have a fully functional server ready for your applications.&lt;/p&gt;</description></item><item><title>Automating Rubocop Into Your Rails Development Workflow</title><link>https://dennmart.com/articles/automating-rubocop-into-your-rails-development-workflow/</link><pubDate>Mon, 15 Apr 2024 16:08:56 +0900</pubDate><guid>https://dennmart.com/articles/automating-rubocop-into-your-rails-development-workflow/</guid><description>&lt;p&gt;&lt;em&gt;Go to the end of this article if you prefer to watch a video instead.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Do you have a Ruby on Rails application using Rubocop? If so, you know how beneficial static code analysis tools can be in keeping your codebase clean and organized. In my personal experience, I&amp;rsquo;ve seen how static code analysis tools like Rubocop can transform not only your codebase but also your engineering organization.&lt;/p&gt;
&lt;p&gt;I recently worked on a Rails project where a less-experienced developer took up most of a senior engineer&amp;rsquo;s time during code reviews due to inconsistencies and subtle bugs. Once I helped introduce Rubocop into the fold, the developer&amp;rsquo;s code became cleaner and more organized, leading to shorter review times. Even better, static code analysis became a teacher, teaching her better ways of writing code and automatically improving her skills.&lt;/p&gt;</description></item><item><title>Setting Up Rubocop for Legacy Ruby on Rails Projects</title><link>https://dennmart.com/articles/setting-up-rubocop-for-legacy-ruby-on-rails-projects/</link><pubDate>Tue, 02 Apr 2024 14:55:28 +0900</pubDate><guid>https://dennmart.com/articles/setting-up-rubocop-for-legacy-ruby-on-rails-projects/</guid><description>&lt;p&gt;&lt;em&gt;Prefer to watch a video instead? Check out the video version of this article on YouTube at the end of this article.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Every developer has a preferred style of coding. Some people prefer spaces for indentation, while others swear by tabs. Some like to include trailing commas at the end of a multi-line array, while others don&amp;rsquo;t want to add anything. Regardless of your coding style, these preferences can create inconsistent codebases that mask subtle bugs and make your applications challenging to maintain over time. This problem is especially true with dynamic programming languages like Ruby, where you don&amp;rsquo;t have a compiler or preprocessor by default to inform you of these issues. That&amp;rsquo;s where &lt;strong&gt;static code analysis&lt;/strong&gt; tools come into play.&lt;/p&gt;</description></item><item><title>Revitalize Your Old Codebase Easily With Static Code Analysis</title><link>https://dennmart.com/articles/revitalize-your-old-codebase-easily-with-static-code-analysis/</link><pubDate>Sat, 02 Mar 2024 22:09:59 +0900</pubDate><guid>https://dennmart.com/articles/revitalize-your-old-codebase-easily-with-static-code-analysis/</guid><description>&lt;p&gt;&lt;em&gt;&amp;ldquo;Hey Dennis, I saw your pull request to add static code analysis to our app. Why should we add yet another tool and additional steps to our dev and build process?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I received this Slack message from one of the tech leads of a project I recently joined. The project, a relatively large monolithic Ruby on Rails application, had been in service for nearly a decade—an eternity in the web development industry—and was serving its customers well. But it also showed the signs of age that tend to happen after dozens of engineers of all skills had their hands in the codebase. New feature development slowed over time, more bugs crept to the surface, and the team didn&amp;rsquo;t feel productive.&lt;/p&gt;</description></item><item><title>20 Lessons Learned From 20 Years in Tech: Part 2</title><link>https://dennmart.com/articles/20-lessons-learned-from-20-years-in-tech-part-2/</link><pubDate>Thu, 18 Jan 2024 14:19:13 +0900</pubDate><guid>https://dennmart.com/articles/20-lessons-learned-from-20-years-in-tech-part-2/</guid><description>&lt;p&gt;Last week, I began writing about some of the lessons I&amp;rsquo;ve learned since I began working in tech back in 2004. Doing anything consistently for twenty years will undoubtedly create plenty of opportunities to learn new lessons that apply to one&amp;rsquo;s career and life. I wanted to share some of that hard-earned knowledge and experience with the world, hoping that others find some use for it. You might find something helpful for your own career or realize that you&amp;rsquo;re not alone in experiencing something that happened to you.&lt;/p&gt;</description></item><item><title>20 Lessons Learned From 20 Years in Tech: Part 1</title><link>https://dennmart.com/articles/20-lessons-learned-from-20-years-in-tech-part-1/</link><pubDate>Mon, 08 Jan 2024 17:01:47 +0900</pubDate><guid>https://dennmart.com/articles/20-lessons-learned-from-20-years-in-tech-part-1/</guid><description>&lt;p&gt;On January 26, 2004, I started my first job in tech. I graduated with a computer science degree one month prior and felt very fortunate to land work as quickly as I did. I lived in Puerto Rico, where tech jobs around software development were minimal at the time. I remember scouring the classified section in the local newspaper and finding very little that interested me. I don&amp;rsquo;t recall how I landed that first job or why I applied in the first place since it wasn&amp;rsquo;t for a software developer role, but I did feel grateful for the opportunity to get my foot in the door.&lt;/p&gt;</description></item><item><title>How Testers Help Developers Elevate Their Productivity</title><link>https://dennmart.com/articles/how-testers-help-developers-elevate-their-productivity/</link><pubDate>Wed, 20 Dec 2023 14:34:11 +0900</pubDate><guid>https://dennmart.com/articles/how-testers-help-developers-elevate-their-productivity/</guid><description>&lt;p&gt;&lt;em&gt;&amp;ldquo;Testers are slowing us down. We would be so much faster without them.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As a developer for my entire career, I&amp;rsquo;ve seen this exact comment or variations of it happen at many places I&amp;rsquo;ve worked in. Early in my career, I also echoed the sentiment. Unfortunately, it&amp;rsquo;s a common occurrence that development teams aren&amp;rsquo;t entirely in sync with the work done by the QA team, where we perceive testers as an obstacle to progress. As a result, there&amp;rsquo;s a constant stream of bickering and passive-aggressive arguments flowing through these companies.&lt;/p&gt;</description></item><item><title>How to Achieve Speed and Quality in Software Development</title><link>https://dennmart.com/articles/how-to-achieve-speed-and-quality-in-software-development/</link><pubDate>Mon, 04 Dec 2023 15:02:22 +0900</pubDate><guid>https://dennmart.com/articles/how-to-achieve-speed-and-quality-in-software-development/</guid><description>&lt;p&gt;The pace and expectations in software development have drastically escalated in recent times. Teams previously mapped out delivery cycles for most software products several months in advance. The Waterfall methodology was the prevalent approach for developing software, and countless organizations widely adopted it throughout different industries. For instance, development for the Microsoft Windows operating system took years before being shipped to the market. Even the incremental updates in the form of service packs took years to release.&lt;/p&gt;</description></item><item><title>The Important Role of Documentation in DevOps Success</title><link>https://dennmart.com/articles/the-important-role-of-documentation-in-devops-success/</link><pubDate>Wed, 22 Nov 2023 15:30:00 +0900</pubDate><guid>https://dennmart.com/articles/the-important-role-of-documentation-in-devops-success/</guid><description>&lt;p&gt;Throughout my career, I&amp;rsquo;ve noticed something among teams that struggle to deliver consistent results: a lack of clear documentation. It&amp;rsquo;s not the only issue plaguing these teams, but it definitely contributes to their woes. Often, these teams don&amp;rsquo;t spend much time on internal documentation, like how to quickly onboard new team members or the ins and outs of their application infrastructure. Sometimes, they lack publicly available documentation like help articles and answers to frequently asked customer questions. Whatever the reason, the absence of this information leads to disorganization and confusion across the organization.&lt;/p&gt;</description></item><item><title>Deploying Your Serverless Applications Easily With Terraform</title><link>https://dennmart.com/articles/deploying-your-serverless-applications-easily-with-terraform/</link><pubDate>Wed, 15 Nov 2023 16:13:39 +0900</pubDate><guid>https://dennmart.com/articles/deploying-your-serverless-applications-easily-with-terraform/</guid><description>&lt;p&gt;When building infrastructure for your applications, it&amp;rsquo;s hard to beat a tool like &lt;a href="https://www.terraform.io/"&gt;Terraform&lt;/a&gt;. Its declarative approach to defining your infrastructure as code makes managing your entire environment a breeze. As someone who frequently needed to provision servers and services manually in the past, I&amp;rsquo;m glad we can now quickly reproduce these systems without worrying about human error by using a handful of commands.&lt;/p&gt;
&lt;p&gt;Although Terraform&amp;rsquo;s primary use cases include setting up permissions, creating and configuring networks, and spinning up servers, we can also use it to manage serverless applications. Using the same approach we take for managing any other resource on the cloud, Terraform can handle all the different components to get a complete serverless application running on the cloud provider of your choosing.&lt;/p&gt;</description></item><item><title>Deploy Your Rails Applications the Easy Way With Kamal</title><link>https://dennmart.com/articles/deploy-your-rails-applications-the-easy-way-with-kamal/</link><pubDate>Mon, 16 Oct 2023 18:25:37 +0900</pubDate><guid>https://dennmart.com/articles/deploy-your-rails-applications-the-easy-way-with-kamal/</guid><description>&lt;div class="relative rounded-xl border border-amber-500/30 bg-dark-800/50 p-6 not-prose my-8"&gt;
 &lt;div class="absolute -top-3 left-6 px-3 py-1 rounded-full bg-amber-500/20 border border-amber-500/30"&gt;
 &lt;p class="text-sm font-semibold text-amber-400 uppercase tracking-wide"&gt;
 Deprecated
 &lt;/p&gt;
 &lt;/div&gt;

 &lt;div class="text-base text-gray-300 leading-relaxed mt-2"&gt;
 
This article covers Kamal 1.x, which is now deprecated. While some of the configuration settings still apply to Kamal 2.0 and above, a lot of the functionality mentioned in this article no longer applies. Please refer to the &lt;a href="https://kamal-deploy.org/docs/" target="_blank" rel="noopener noreferrer"&gt;Kamal documentation&lt;/a&gt; for the most up-to-date information.

 &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Prefer to watch a screencast instead? Check out the video at the end of this article.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>The Hidden Benefit of Bringing Freelancers Into Your Teams</title><link>https://dennmart.com/articles/the-hidden-benefit-of-bringing-freelancers-into-your-teams/</link><pubDate>Mon, 09 Oct 2023 14:19:46 +0900</pubDate><guid>https://dennmart.com/articles/the-hidden-benefit-of-bringing-freelancers-into-your-teams/</guid><description>&lt;p&gt;Many organizations think hiring a freelancer, whether a software developer, a tester, or a DevOps engineer, is only about producing a tangible outcome. You need to complete a project or a task, and the freelancer comes in to work on it for a fee. It seems like a simple interaction, right? There&amp;rsquo;s a job to be done, so you want someone—ideally an expert—to handle it for you.&lt;/p&gt;
&lt;p&gt;However, hiring freelancers from this viewpoint overlooks some critical aspects that they bring to the table. Of course, a hired freelancer will do the work that you ask, but that&amp;rsquo;s like buying an expensive sports car and only using it to go to the supermarket that&amp;rsquo;s five minutes away. You&amp;rsquo;re not making the most out of the exchange.&lt;/p&gt;</description></item><item><title>Distributing Docker Images for Rails Apps With GitHub Actions</title><link>https://dennmart.com/articles/distributing-docker-images-for-rails-apps-with-github-actions/</link><pubDate>Tue, 03 Oct 2023 14:17:58 +0900</pubDate><guid>https://dennmart.com/articles/distributing-docker-images-for-rails-apps-with-github-actions/</guid><description>&lt;p&gt;As someone who&amp;rsquo;s been working with Ruby on Rails applications for 15 years and counting, it&amp;rsquo;s been amazing to see how it remains relevant in web development today. It&amp;rsquo;s always exciting to see a new major version come around the horizon and see what new things are coming down the pipeline to continue helping developers build stable and solid web applications quickly.&lt;/p&gt;
&lt;p&gt;The upcoming release of Rails is just around the corner, with &lt;a href="https://rubyonrails.org/2023/10/1/Rails-Rails-7-1-enters-the-release-candidate-phase"&gt;the announcement of the release candidate for Rails 7.1 this week&lt;/a&gt;. This new version contains many valuable and exciting updates, like better helpers for authentication, improvements in asynchronous database querying, and support for the new darling of the JavaScript world, &lt;a href="https://bun.sh/"&gt;Bun&lt;/a&gt;. These enhancements keep making Rails better and an excellent choice for anyone looking to build a web application quickly in 2023 and beyond.&lt;/p&gt;</description></item><item><title>Hiring a Freelance DevOps Engineer: What You Need to Know</title><link>https://dennmart.com/articles/hiring-a-freelance-devops-engineer-what-you-need-to-know/</link><pubDate>Mon, 18 Sep 2023 17:40:00 +0900</pubDate><guid>https://dennmart.com/articles/hiring-a-freelance-devops-engineer-what-you-need-to-know/</guid><description>&lt;p&gt;When a tech-based organization begins to grow successfully, it&amp;rsquo;ll eventually find itself looking at ways to scale and improve its existing processes. You might be looking at migrating to a cloud infrastructure that better suits your current and future needs. You may need to bolster your automation to help your team quickly get through the more mundane parts of their workday. Your company must streamline development and deployment procedures to deliver faster than your competitors.&lt;/p&gt;</description></item><item><title>Private File Downloads From S3 With Lambda &amp; API Gateway</title><link>https://dennmart.com/articles/private-file-downloads-from-s3-with-lambda-and-api-gateway/</link><pubDate>Tue, 05 Sep 2023 17:06:07 +0900</pubDate><guid>https://dennmart.com/articles/private-file-downloads-from-s3-with-lambda-and-api-gateway/</guid><description>&lt;p&gt;A client I worked with recently had an automated system that generated a proprietary file within AWS and stored it in a private Amazon S3 bucket. Their team generates this file daily and uses it as part of a distributed application consisting of dozens of servers outside the AWS ecosystem. They wanted other systems outside their organization to access the file. However, they also wanted to avoid the hassles of setting up IAM users or policies for their existing and future systems. The client also wanted a simple authentication mechanism and an audit trail to keep track of download requests.&lt;/p&gt;</description></item><item><title>Simple Yet Powerful Ways to Shrink Your AWS Expenses</title><link>https://dennmart.com/articles/simple-yet-powerful-ways-to-shrink-your-aws-expenses/</link><pubDate>Sun, 30 Jul 2023 18:45:39 +0900</pubDate><guid>https://dennmart.com/articles/simple-yet-powerful-ways-to-shrink-your-aws-expenses/</guid><description>&lt;p&gt;&lt;a href="https://aws.amazon.com/"&gt;Amazon Web Services (AWS)&lt;/a&gt; is the world&amp;rsquo;s largest cloud service platform, widely adopted in organizations of all shapes and sizes across the web. It&amp;rsquo;s become a staple for many tech companies thanks to its wide variety of products, from storage, databases, machine learning, and countless other services. Since its launch in 2006, they&amp;rsquo;ve helped over one million businesses like yours achieve things that were cost-prohibitive or nearly impossible to implement from scratch.&lt;/p&gt;</description></item><item><title>Building Lean Docker Images for Rails Apps</title><link>https://dennmart.com/articles/building-lean-docker-images-for-rails-apps/</link><pubDate>Thu, 18 May 2023 18:49:58 +0900</pubDate><guid>https://dennmart.com/articles/building-lean-docker-images-for-rails-apps/</guid><description>&lt;p&gt;One of my favorite tools I use nearly daily is Docker. From helping me experiment, develop, test, and deploy my applications, it&amp;rsquo;s an indispensable part of what helps me do my work faster.&lt;/p&gt;
&lt;p&gt;Much of my work with clients revolves around Ruby on Rails applications. In most instances, these are smaller startups with limited resources at hand. Beyond the scope I&amp;rsquo;ve been given as my project, part of my job is to ensure that the team can work as effectively as possible with these Rails apps, and Docker plays a massive role in helping me achieve that goal.&lt;/p&gt;</description></item><item><title>Deploy Hugo Sites With Terraform and GitHub Actions (Part 2)</title><link>https://dennmart.com/articles/deploy-hugo-sites-with-terraform-and-github-actions-part-2/</link><pubDate>Mon, 24 Apr 2023 09:54:00 +0900</pubDate><guid>https://dennmart.com/articles/deploy-hugo-sites-with-terraform-and-github-actions-part-2/</guid><description>&lt;p&gt;&lt;a href="https://dennmart.com/articles/deploy-hugo-sites-with-terraform-and-github-actions-part-1/"&gt;In the first part of this series&lt;/a&gt;, we introduced the concept of using Hugo to build a static website and automating updates to an Amazon S3 bucket using GitHub Actions. In that article, we went through the details of setting up the necessary permissions on AWS to allow GitHub Actions to access the Amazon S3 bucket that will host our static website. For improved security, we&amp;rsquo;re using GitHub&amp;rsquo;s OpenID Connect provider as our preferred method of authentication.&lt;/p&gt;</description></item><item><title>Deploy Hugo Sites With Terraform and GitHub Actions (Part 1)</title><link>https://dennmart.com/articles/deploy-hugo-sites-with-terraform-and-github-actions-part-1/</link><pubDate>Thu, 06 Apr 2023 11:29:33 +0900</pubDate><guid>https://dennmart.com/articles/deploy-hugo-sites-with-terraform-and-github-actions-part-1/</guid><description>&lt;p&gt;In a recent article, I wrote about &lt;a href="https://dennmart.com/articles/create-an-s3-bucket-for-website-hosting-with-terraform/"&gt;how to set up an Amazon S3 bucket to host a static website using Terraform&lt;/a&gt;. Using Amazon S3 for static website hosting provides numerous benefits, from pricing to scalability. It&amp;rsquo;s an excellent choice if your organization already uses Amazon AWS since it integrates nicely with many other services.&lt;/p&gt;
&lt;p&gt;One thing that the previous article didn&amp;rsquo;t discuss is how to get your static website in your Amazon S3 bucket. If you have a small site with few files you won&amp;rsquo;t modify frequently, you can make your edits and log in to the AWS console to upload the files directly into your bucket. You can also use the AWS Command Line Interface to copy the files without leaving your console. That would work well for most cases with infrequent updates.&lt;/p&gt;</description></item><item><title>Create an S3 Bucket for Website Hosting With Terraform</title><link>https://dennmart.com/articles/create-an-s3-bucket-for-website-hosting-with-terraform/</link><pubDate>Mon, 20 Feb 2023 12:46:41 +0900</pubDate><guid>https://dennmart.com/articles/create-an-s3-bucket-for-website-hosting-with-terraform/</guid><description>&lt;p&gt;Nothing is more ubiquitous in the world of cloud computing services than &lt;a href="https://aws.amazon.com/s3/"&gt;Amazon S3&lt;/a&gt;. Many organizations use S3 to store their data, from tiny startups to massive organizations. Thanks to its ease of use, scalability, and (in most cases) dirt-cheap pricing, S3 has become the top cloud storage solution in the world.&lt;/p&gt;
&lt;p&gt;Most companies use S3 to store and serve media like images and videos quickly and cheaply. Some places take advantage of the different storage classes like &lt;a href="https://aws.amazon.com/s3/storage-classes/glacier/"&gt;Glacier&lt;/a&gt; for durable long-term archiving of essential documents. You can also leverage other AWS security tools like &lt;a href="https://aws.amazon.com/macie/"&gt;Macie&lt;/a&gt; to alert you of potentially sensitive data exposure automatically. S3 also helps with security by encrypting your data at rest and in transit, recently including &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html"&gt;encryption by default&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>