<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Nočnica Mellifera</title>
    <description>The latest articles on Forem by Nočnica Mellifera (@nocnica).</description>
    <link>https://forem.com/nocnica</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F162459%2F8d0dc115-8aac-4a0f-8bc0-7e7c597aef12.jpg</url>
      <title>Forem: Nočnica Mellifera</title>
      <link>https://forem.com/nocnica</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nocnica"/>
    <language>en</language>
    <item>
      <title>Filling Out Forms with Playwright: Choosing Between `fill()` and `pressSequentially()`</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Tue, 30 Sep 2025 16:58:17 +0000</pubDate>
      <link>https://forem.com/nocnica/filling-out-forms-with-playwright-choosing-between-fill-and-presssequentially-3m4d</link>
      <guid>https://forem.com/nocnica/filling-out-forms-with-playwright-choosing-between-fill-and-presssequentially-3m4d</guid>
      <description>&lt;p&gt;Filling out forms is one of the most common tasks in web automation and testing. When using Playwright, you have two primary methods for entering text into input fields: &lt;code&gt;.fill()&lt;/code&gt; and &lt;code&gt;.pressSequentially()&lt;/code&gt;. While both accomplish the same basic goal, choosing the right method can significantly impact the stability, realism, and effectiveness of your tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Default Choice: &lt;code&gt;locator.fill()&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;For most scenarios, &lt;code&gt;locator.fill()&lt;/code&gt; should be your go-to method. It's fast, efficient, and simulates what happens when a user pastes text into a field.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use &lt;code&gt;fill()&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple text inputs without dynamic behavior&lt;/li&gt;
&lt;li&gt;When you need to quickly populate form fields&lt;/li&gt;
&lt;li&gt;For basic form submissions where typing simulation isn't critical
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Simple and efficient for most cases&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;locator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;testuser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;locator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user@example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  When to Switch to &lt;code&gt;pressSequentially()&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The community discussion reveals several specific scenarios where &lt;code&gt;pressSequentially()&lt;/code&gt; becomes necessary:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Testing Auto-complete and Search Suggestions
&lt;/h3&gt;

&lt;p&gt;If you're searching for "Doug Bowser" and want to test the intermediate suggestions that appear as you type "D", "Do", "Dou", etc., &lt;code&gt;fill()&lt;/code&gt; won't trigger these incremental updates.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Triggers search suggestions at each keystroke&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;locator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#search&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;pressSequentially&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Doug Bowser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Triggering Field Validations
&lt;/h3&gt;

&lt;p&gt;Some forms validate input as users type. If you need to test this real-time validation behavior, &lt;code&gt;pressSequentially()&lt;/code&gt; allows you to simulate the actual typing process that triggers these validations.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Making Automation Less Detectable
&lt;/h3&gt;

&lt;p&gt;When scraping or performing long-running automation tasks, instantaneous text entry can be a telltale sign of bot activity. &lt;code&gt;pressSequentially()&lt;/code&gt; with appropriate delays can help mimic human typing patterns.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// More human-like typing behavior&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;locator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;pressSequentially&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello, this is a longer message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt; &lt;span class="c1"&gt;// milliseconds between keystrokes&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You could even randomize these delay times for multiple form fills.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Testing Learning Applications
&lt;/h3&gt;

&lt;p&gt;For applications that grade typing velocity and accuracy, or any scenario where the timing and sequence of keystrokes matter, &lt;code&gt;pressSequentially()&lt;/code&gt; is clearly the right choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Recommendations
&lt;/h2&gt;

&lt;p&gt;Based on the community consensus:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with &lt;code&gt;fill()&lt;/code&gt;&lt;/strong&gt; - It's faster and sufficient for most cases&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Switch to &lt;code&gt;pressSequentially()&lt;/code&gt; when you need:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To trigger intermediate API calls or UI updates&lt;/li&gt;
&lt;li&gt;To test real-time validation&lt;/li&gt;
&lt;li&gt;More realistic user behavior simulation&lt;/li&gt;
&lt;li&gt;To avoid detection in scraping scenarios&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use the delay option&lt;/strong&gt; to control typing speed when realism matters:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;locator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;pressSequentially&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;While &lt;code&gt;fill()&lt;/code&gt; will handle most of your form-filling needs efficiently, &lt;code&gt;pressSequentially()&lt;/code&gt; is your tool for scenarios requiring realistic typing behavior. The key is understanding your application's behavior and choosing the method that best matches how real users interact with your forms. Whether you're testing search suggestions, form validations, or simply trying to make your automation more human-like, having both methods in your Playwright toolkit ensures you can handle any form-filling scenario effectively.&lt;/p&gt;

</description>
      <category>playwright</category>
    </item>
    <item>
      <title>The Sub-prime Crisis of Notifications</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Thu, 15 Sep 2022 15:51:29 +0000</pubDate>
      <link>https://forem.com/courier/the-sub-prime-crisis-of-notifications-280n</link>
      <guid>https://forem.com/courier/the-sub-prime-crisis-of-notifications-280n</guid>
      <description>&lt;p&gt;Or, how we’re destroying users’ trust, and how to get it back. Check out the first post in this series as well: &lt;em&gt;&lt;a href="https://www.courier.com/blog/building-ux-outside-of-app/"&gt;Building a Great UX Outside of Your App&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;There is a direct connection between all the unnecessary notifications you get on your phone and the sub-prime financial crisis of 2008. The connection is human behavior in a large and anonymous marketplace where bad behavior is rarely punished.&lt;/p&gt;

&lt;p&gt;In a recent &lt;a href="https://news.ycombinator.com/item?id=32692884"&gt;Hackernews post&lt;/a&gt;, I posited the same connection: that apps that send notifications are facing a systemic collapse where users will be so overwhelmed with mass notifications that most of them will opt out entirely. One user responded with a great synopsis of the problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Unfortunately if it drives engagement of 2 people at the expense of becoming annoying to one person the app developers will keep over-using notifications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’d add one further sad corollary to this observation: as long as other app developers are over-using notifications, it’s irrational for you the app developer not to. As you compete for attention on users’ devices, you will fall behind your competitors if you don’t emit a few notifications a day. So even though your individual action hurts the user experience overall, it can be irrational for you to avoid doing so.&lt;/p&gt;

&lt;p&gt;As any fan of financial crises can tell you, the subprime bubble, where lenders created AAA-rated securities out of extremely shaky mortgage lending, was not an evil scheme dreamed up by nihilists. Rather, it was the act of rational people acting in their own best interests. As long as other banks were selling junk securities at high markups, it wasn’t rational for one bank to stop, even when they knew the system couldn’t go on forever. As former Citigroup CEO Chuck Prince infamously said, “as long as the music is playing, you have to keep dancing.”&lt;/p&gt;

&lt;h2&gt;
  
  
  What the crash would look like
&lt;/h2&gt;

&lt;p&gt;Any time I start a discussion on Reddit or Hackernews about what users want in notifications, most commenters say that they want out of notifications entirely. It was only three years ago that most users got ‘do not disturb’ mode on their phones, and more and more users are deciding to stay in Do Not Disturb &lt;em&gt;forever&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Can notifications ‘crash’ the same way that the mortgage market did? Absolutely. The sequence looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Increased awareness of unnecessary notifications&lt;/li&gt;
&lt;li&gt;Government regulators request that OS producers limit unnecessary notifications&lt;/li&gt;
&lt;li&gt;All notifications become tightly restricted&lt;/li&gt;
&lt;li&gt;Contacting users via push notifications becomes unreliable &lt;/li&gt;
&lt;li&gt;Application developers no longer invest the time in timely notifications&lt;/li&gt;
&lt;li&gt;With users no longer expecting notifications, developers are forced to go back to email and SMS to contact users at all&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Prisoner’s Dilemma
&lt;/h2&gt;

&lt;p&gt;John Cassidy in his illuminating book &lt;em&gt;&lt;a href="https://us.macmillan.com/books/9781429990691/howmarketsfail"&gt;How Markets Fail&lt;/a&gt;&lt;/em&gt; explains that this pattern is in fact a version of the prisoner’s dilemma. The multiple actors in the market aren’t able to coordinate and they end up choosing options that are individually beneficial, but collectively negative.&lt;/p&gt;

&lt;p&gt;The sub-prime crisis nearly crashed the global economy and we still live in its shadow. In the world of notifications: every OS release on our phones further limits how apps can notify us, is a similar crisis coming in the market for user attention?&lt;/p&gt;

&lt;h2&gt;
  
  
  How we break free
&lt;/h2&gt;

&lt;p&gt;A dire situation, surely, but we can do something about it: collaboration. The prisoner’s dilemma doesn’t work nearly as well if the prisoners can communicate and see each other’s choices. In the case of notifications, all that’s required is that we the creators of applications agree to some simple principles for trustworthy notifications.&lt;/p&gt;

&lt;p&gt;This move is not without precedent. Multiple industries decided on voluntary pledges of quality and trustworthiness rather than deal with public ire, choosing self-regulation over government regulation. Perhaps you remember this seal from the childhood newsstand:&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/z7iqk1q8njt4/2nsPqQwBpHIueEHCVrtoQl/82d7f10962cbd1731f1ee55036cc23e0/crisis-1.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/z7iqk1q8njt4/2nsPqQwBpHIueEHCVrtoQl/82d7f10962cbd1731f1ee55036cc23e0/crisis-1.png" alt="crisis-1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next to Captain America’s adventures and even Grant Morrison’s Swamp Thing, the Comics Code Authority seal was stamped on the cover of comic books for over 40 years. And perhaps you saw another sign of voluntary self-regulation in an air-conditioned theater this weekend:&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/z7iqk1q8njt4/1W7YN13dcLNuTHnGnir9Vv/433631f477614ba9671a680587009def/crisis-2.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/z7iqk1q8njt4/1W7YN13dcLNuTHnGnir9Vv/433631f477614ba9671a680587009def/crisis-2.png" alt="crisis-2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Neither of these ratings and advisory boards are without their detractors, and as Comic book fans aged and concerns about violent comics diminished, the comics code has disappeared. However, these do show that a lack of public trust can be addressed by an industry-wide standard.&lt;/p&gt;

&lt;h2&gt;
  
  
  A pledge for better notifications
&lt;/h2&gt;

&lt;p&gt;Folks, I don’t want to be corny, but I do want us to get better. Here we get to the crux: I want us to agree to do better. Here are the principles that can guide better notifications.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;One caveat here: this pledge is not about dark patterns or dishonesty. Tricking the user into spending money unintentionally should be covered by generalized ethics, this is about good design principles for developers who want to build trustworthy tools.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Be timely
&lt;/h3&gt;

&lt;p&gt;We often feel bombarded with notifications, so a requirement that they come faster can seem counter-intuitive. But it’s critical that you identify when and with what precision your users expect to be informed. A notification that your web service is down needs to come sooner than the first angry call from a user. And a notification about breaking news needs to come before you say something mean about Queen Elizabeth on Slack. &lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/z7iqk1q8njt4/CskUDdiZMdgRl1RvZpzhi/3bf58dc29d3f3195aebd59a53df193d6/crisis-3.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/z7iqk1q8njt4/CskUDdiZMdgRl1RvZpzhi/3bf58dc29d3f3195aebd59a53df193d6/crisis-3.png" alt="crisis-3"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;When the Steam Deck inspired a purchasing frenzy, many users complained they got inaccurate notifications, like this classic epoch failure for a user in the UK&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Timeliness also means not notifying too quickly. Notifications about how many people liked a cat picture don’t need to arrive at 2:00 AM, they can wait til morning. &lt;/p&gt;

&lt;p&gt;The required accuracy of notifications will vary a lot depending on your use case. A scheduling tool like Calendly will need its notifications to arrive on the exact minute we need them to arrive at a meeting on time. A more fun social app probably only needs to send notifications accurately within 30 minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/z7iqk1q8njt4/3jiPBK4MyEafiuSly0RPta/7f567998e084a0a5966b1e8036873f0b/crisis-4.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/z7iqk1q8njt4/3jiPBK4MyEafiuSly0RPta/7f567998e084a0a5966b1e8036873f0b/crisis-4.png" alt="crisis-4"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;This failure by YouTube may reflect a shift in usage patterns: where previously new and interesting videos didn’t need up-to-the-minute notifications, now users get breaking news and important premieres on YouTube.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Be targeted
&lt;/h3&gt;

&lt;p&gt;We may not want our applications to know everything about us, but targeting is a critical part of good notifications. If I ordered Pizza Hut for lunch, I don’t want them notifying me of dinner specials. Look at this not-ideal experience for a user of Accuweather that warned him of thunderstorms…3,000 miles from his current location:&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/z7iqk1q8njt4/3EZ0BStlnMusDD464RsorU/43052cf882848ee5430b53cc13944d12/crisis-5.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/z7iqk1q8njt4/3EZ0BStlnMusDD464RsorU/43052cf882848ee5430b53cc13944d12/crisis-5.png" alt="crisis-5"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The cut-off text makes the situation worse: it’s easy to assume this is happening in your town!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some things we’d ideally target in our notifications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Geography&lt;/li&gt;
&lt;li&gt;Time Zone&lt;/li&gt;
&lt;li&gt;User’s access level within our service&lt;/li&gt;
&lt;li&gt;Where they are in the user journey&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Be brief
&lt;/h3&gt;

&lt;p&gt;In the example above from accuweather.com, a slightly wordy notification meant the user didn’t see the area affected by the alert. This is one example of a larger problem: a failure to be brief and to-the-point with notification messages.&lt;/p&gt;

&lt;p&gt;Since notifications are often shortened when viewed on different devices, be sure to put the most important information first. Journalists would call this the ‘inverted pyramid’ but I prefer to think of it as a special case of little-endian transmission: the least important information should come last.&lt;/p&gt;

&lt;p&gt;A special case of the requirement to be brief is digests: ask yourself if your notifications are more meaningful in a group or one-at-a-time. Notifications of individual ‘likes’ on a post is a great candidate for a digest, as is a long conversation thread.&lt;/p&gt;

&lt;p&gt;Ideally since you’re following rule 2 and therefore know the user’s timezone, you can dynamically generate digests when notifications would be sent in the middle of the night for the user.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Offer (the right amount of) control
&lt;/h3&gt;

&lt;p&gt;Finally there’s control. If I posted every bad example of user preferences for notifications this article would resemble 2000’s Flickr. But:&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/z7iqk1q8njt4/7k9Yb2Js0xw1tAAvczkx9T/c71c080f37ae7249d22ff251d830428e/crisis-6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/z7iqk1q8njt4/7k9Yb2Js0xw1tAAvczkx9T/c71c080f37ae7249d22ff251d830428e/crisis-6.jpg" alt="crisis-6"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A classic example is Starbucks’ which, for a time, would only tell you order status if you also accepted spam&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So we want to offer users real fine-grained controls. But it is possible to get too fine-grained&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/z7iqk1q8njt4/AtDdpPBn2oT7fJTbbZEZI/fe645350138a19d7e5f892d3dc098c07/crisis-7.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/z7iqk1q8njt4/AtDdpPBn2oT7fJTbbZEZI/fe645350138a19d7e5f892d3dc098c07/crisis-7.png" alt="crisis-7"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;If you zoom in, this is every notification setting for Google Maps&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The solution when you have too many settings is to offer some grouping, so that users can turn off whole categories.&lt;br&gt;
What unifies these needs?&lt;br&gt;
The common thread between all of these requirements is that they all require technical lift. Timeliness, targeting, brevity (with digests), and user preferences all require that we go above and beyond with our notifications service. A simple bulk send email kicked off by a cron job can’t deliver these features without some very sophisticated and un-maintainable regex. The solution then is to have a notifications service that can offer these features in a lightweight experience for our product team.&lt;/p&gt;

&lt;p&gt;In the last article of this series, we’ll cover how you can build a great notification experience &lt;em&gt;without&lt;/em&gt; using Courier.&lt;/p&gt;

</description>
      <category>ux</category>
      <category>userexperience</category>
      <category>product</category>
    </item>
    <item>
      <title>Building a Great UX Outside of your App</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Wed, 07 Sep 2022 15:58:38 +0000</pubDate>
      <link>https://forem.com/courier/building-a-great-ux-outside-of-your-app-3f16</link>
      <guid>https://forem.com/courier/building-a-great-ux-outside-of-your-app-3f16</guid>
      <description>&lt;p&gt;Recently I had a chance to talk to &lt;a href="https://devopsdays.org/events/2022-minneapolis/welcome/"&gt;DevOps&lt;br&gt;
Minneapolis&lt;/a&gt; about the &lt;a href="https://www.youtube.com/watch?v=C0nqIYxMPUI"&gt;true nature of user experience&lt;/a&gt;. The audience found this information to be particularly interesting, so I thought it would be helpful to share it with a wider audience. This post will be the first in a series of three posts that will discuss user experience beyond your app’s UI and how you can optimize it. &lt;/p&gt;

&lt;p&gt;So where is your user experience? More generally, where does your application happen? For those of us who work in SaaS, the answer is simple: the application occurs inside the application interface. Whether we’re selling business tools or teaching Spanish, the application happens when our users access the UI.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/z7iqk1q8njt4/7fjNtDXh4kd1X705WbeUMI/1c56d888e770e3c9cd1f5b5c88e8ac0d/image1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/z7iqk1q8njt4/7fjNtDXh4kd1X705WbeUMI/1c56d888e770e3c9cd1f5b5c88e8ac0d/image1.jpg" alt="image1"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Your UX is inside your application… right?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When we talk about our users having a good experience, that much-vaunted UX, the things we’re tweaking will be inside this application. We have several specialists who worry about user experience. Whether that’s UX thinking about existing users or data and product people making sure the experience for new users is frictionless.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/z7iqk1q8njt4/2rwQGF8vmim0Zm0H1j0Tmn/d0c5031862d85d08998fe012b7740054/image2.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/z7iqk1q8njt4/2rwQGF8vmim0Zm0H1j0Tmn/d0c5031862d85d08998fe012b7740054/image2.png" alt="UX wireframes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don’t mean to trivialize this process: it’s much more than tweaking colors and moving buttons by a pixel. Those tasked with UX often have to ask the most basic questions: what do our users want, and what’s the best way to give it to them? This matters because however cool our technology is behind the scenes, if the user doesn’t have a good experience with it, they’re unlikely to return.&lt;/p&gt;

&lt;p&gt;This article argues that there’s a more important user experience than the one inside your app. In fact, your app has a whole interface that has more impact on your users, that touches them more deeply than your application interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  It’s your notifications
&lt;/h2&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/z7iqk1q8njt4/9UViH6p0qPhaiKC69gflN/d87cc815b893a46664348d1876a63be4/image3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/z7iqk1q8njt4/9UViH6p0qPhaiKC69gflN/d87cc815b893a46664348d1876a63be4/image3.jpg" alt="iphone notifications"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;This is where your notifications really happen.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Many of our favorite apps largely interact with us through notifications, the examples are everywhere. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tools for observability and security most frequently have all our interaction starting with notifications. After all, we're probably not checking our APM tools until we know something is wrong. &lt;/li&gt;
&lt;li&gt;For social media applications, the best moment we experience with them is seeing that X number of people loved our post. &lt;/li&gt;
&lt;li&gt;And for communication and collaboration applications the notifications should have most of the information that people want you to see.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In fact, I’d argue that for many of our most valued tools and services, most of our interface, for good or ill, is through notifications. Notifications bring you into the application. They provide reassurance, warnings, anxiety, or annoying notifications about sales of pizza. Notifications are your application. &lt;/p&gt;

&lt;p&gt;I mention all this because I believe that your UX is in danger. Primarily, the experience of notifications has been ceded to teams outside of the product team. Instead of our product team controlling notifications, it’s the operations or marketing/growth teams that control most of the notifications we send.&lt;/p&gt;

&lt;p&gt;Let me show you far we have strayed from g-d’s light:&lt;/p&gt;

&lt;h2&gt;
  
  
  The tale of the signup campaign
&lt;/h2&gt;

&lt;p&gt;The time after a user creates an account is critical for any SaaS tool. Even when users sign up and immediately start using the product, there will be features or extended use cases that we, the developers, want them to try.&lt;/p&gt;

&lt;p&gt;Put yourself in the shoes of a product team that’s trying to improve the rate at which new sign ups become committed users. In (almost) all product teams, we’ll realize that we want to get in touch with users after they sign up to encourage them to keep going with our product.&lt;/p&gt;

&lt;p&gt;The platform doubtlessly sends a signup confirmation, and we start by tweaking that. We get our new copy and links to the operations team, or platform dev, and they change the post-signup email. But soon, we want more. First off: we don’t really want to email users the instant they sign up, we’d like to wait at least a few hours, to let the platform feel a bit familiar first. Then we’d like to follow up after a few days, and a few days after that.&lt;/p&gt;

&lt;p&gt;Even better, we, the product team, would like to customize these messages a bit, depending on their team size, what license they have, etc. &lt;br&gt;
The operations team, who implement all outbound notifications, is rightfully a bit frustrated by this. They’re used to solving bugs and feature requests for the platform, not tweaking an email. Scheduling? Audience customization? This sounds like a job for….&lt;/p&gt;

&lt;h2&gt;
  
  
  The CRM, where for a time it was good
&lt;/h2&gt;

&lt;p&gt;With all the need for custom targeting, a good first solution is to have a signup get sent as an event to a Customer Relationship Management (CRM) tool like Salesforce. From there, it’s easy to start a ‘signup campaign.’ Since the CRM should know things like the org size and license level of the user, the messages can be nicely customized.&lt;/p&gt;

&lt;p&gt;And for a time, it was good. However, trouble starts when we go one step further with targeting and customization.&lt;/p&gt;

&lt;p&gt;You see, our signup campaign encourages users to use certain features, like say Reports Export. We want to tell the users about the feature, demo it for them, walk them through the concept. “Please” our emails beg, “export your reports, with the Reports Export.”&lt;/p&gt;

&lt;p&gt;This message will seem super weird if the user has already used Reports Export. So we, the product team, go to whomever runs the CRM and say ‘can we cancel this email if they’ve used Reports Export.’ Of course, the CRM doesn’t know that. So we end up back with platform engineering, asking them to send an event to the CRM when someone first uses Reports Export. &lt;/p&gt;

&lt;p&gt;The ‘quick and dirty’ solution of CRM wasn’t a durable solution to our problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  The problem is a ceding of territory
&lt;/h3&gt;

&lt;p&gt;The inherent problem in the scenario above is a ceding of territory by the product team. If the product team wanted to move a button, or change the order of a toolbar, it wouldn’t make sense for the marketing team to say ‘no.’ But when we want to send a correctly targeted sign-up campaign, our reliance on our CRM means Marketing has to say ‘no’ to a better user experience.&lt;/p&gt;

&lt;p&gt;Similarly, we wouldn’t let ops or platform engineering keep us from adding a helpful tooltip, but we are letting them keep us from sending a helpful email to the right users.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we can do to solve the problem
&lt;/h2&gt;

&lt;p&gt;The problem here is a lack of tooling, either external or internal. Every new notification stream requires engineering time, and that means  technical limitations keep us from delivering the experience our users deserve.&lt;/p&gt;

&lt;p&gt;Whether it’s by using Courier or an internal spike to create a messaging microservice, you want to develop a robust set of features that make it easy to send multiple notification types direct from your platform.&lt;/p&gt;

</description>
      <category>ux</category>
      <category>notification</category>
      <category>productdesign</category>
      <category>api</category>
    </item>
    <item>
      <title>Effortless MongoDB Atlas With Opta</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Tue, 30 Nov 2021 04:12:12 +0000</pubDate>
      <link>https://forem.com/nocnica/effortless-mongodb-atlas-with-opta-mkf</link>
      <guid>https://forem.com/nocnica/effortless-mongodb-atlas-with-opta-mkf</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EOJh7eeG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vu64m6o3p2lo0t60tzf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EOJh7eeG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vu64m6o3p2lo0t60tzf6.png" alt="Opta and Mongodb" width="759" height="98"&gt;&lt;/a&gt;&lt;br&gt;
*Originally posted on &lt;a href="https://blog.runx.dev/effortless-mongodb-atlas-with-opta-eeb1ef0c5902"&gt;Run[x]&lt;/a&gt; Blog&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Do you use MongoDB Atlas in your application stack? This post shows you how to use Opta to spin up a MongoDB Atlas database and link it to your application.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://docs.opta.dev/"&gt;Opta&lt;/a&gt; lets you do infrastructure-as-code where you work with High-level constructs instead of getting lost in low level cloud configuration.&lt;br&gt;
&lt;a href="https://docs.atlas.mongodb.com/"&gt;MongoDB Atlas&lt;/a&gt; simplifies deploying and managing your MongoDB databases while offering the versatility you need to build resilient and performant global applications on the cloud providers of your choice.&lt;br&gt;
Put together, Opta and MongoDB Atlas abstract away the complexity of deploying your applications and MongoDB databases in a production-ready cloud infrastructure. Together, they will smoothen development experience and improve your product’s feature velocity and reliability.&lt;br&gt;
This blog shows you how to implement a movie search application with Atlas Search and deploy it using Opta. It is based on this &lt;a href="https://www.mongodb.com/developer/how-to/build-movie-search-application/"&gt;blog post&lt;/a&gt;; but with some notable differences:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Opta handles the creation of the MongoDB Atlas cluster and database, passing its credentials into the application’s code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instead of MongoDB Realm, this example uses a simple Flask API backend and deploys it on to a Kubernetes cluster; don’t worry — you won’t have to spin up the Kubernetes cluster yourself, Opta will do it for you in the cloud of your choice or even your local machine!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Atlas is currently supported in Local and AWS Opta environments. Feel free to open a Github issue if you would like to see support in GCP or Azure.&lt;/p&gt;

&lt;p&gt;All the code used in this example is &lt;a href="https://github.com/run-x/opta-examples"&gt;available from here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;Install the open-source Opta cli tool by following the &lt;a href="https://docs.opta.dev/installation/"&gt;Opta installation instructions&lt;/a&gt;. If you are new to MongoDB Atlas you can sign up &lt;a href="https://www.mongodb.com/try?utm_source=runx_opta&amp;amp;utm_campaign=pla&amp;amp;utm_method=referral"&gt;here&lt;/a&gt;. The search application described in this blog can be implemented with the MongoDB Atlas free-tier.&lt;/p&gt;

&lt;p&gt;(Git) clone the Opta examples &lt;a href="https://github.com/run-x/opta-examples"&gt;repository&lt;/a&gt; and use the Opta files in the opta-atlas-mongo-search sub-directory as a starting point. You will need your AWS and MongoDB &lt;a href="https://docs.atlas.mongodb.com/tutorial/manage-programmatic-access/"&gt;Atlas API credentials&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;You do not need to configure the IP address in the MongoDB Atlas API key, Opta will do that for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepping the Opta Environment
&lt;/h2&gt;

&lt;p&gt;After you have downloaded these keys from the AWS and Atlas GUIs, set them as environment variables in the terminal shell where you plan to run Opta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Atlas Mongo
&lt;/h2&gt;

&lt;p&gt;export MONGODB_ATLAS_PUBLIC_KEY=”fakeefghij”&lt;br&gt;
export MONGODB_ATLAS_PRIVATE_KEY=”FAKE015e-4503–4f95-f129–543d4e58bsdg”&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS
&lt;/h2&gt;

&lt;p&gt;export AWS_ACCESS_KEY_ID=FAKEFTRFFSDQAZA&lt;br&gt;
export AWS_SECRET_ACCESS_KEY=FAKEksfja234sadfbjsdfgsdfg34SAD34fd&lt;br&gt;
Next, we create the Opta environment with the AWS EKS Kubernetes cluster, as documented &lt;a href="https://docs.opta.dev/getting-started/aws/"&gt;here&lt;/a&gt;. You can also refer to the environment example yaml file in the git repository.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: If you are only trying this out on your local machine, append the — local flag to all the opta commands so that a local Kubernetes cluster is spun up on your machine rather than the AWS EKS cluster. For local runs as well, the MongoDB Atlas Cluster will still be spun up in the cloud.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying the Application with Opta
&lt;/h2&gt;

&lt;p&gt;Once we have the Kubernetes cluster, we can create the MongoDB application by running opta apply on the &lt;em&gt;opta-mongodb-atlas-search/opta/atlasmongoservice.yaml&lt;/em&gt; file. Remember to set your &lt;em&gt;mongo_atlas_project_id&lt;/em&gt; in this file before running Opta.&lt;/p&gt;

&lt;p&gt;First, lets create the docker image that contains our application code:&lt;/p&gt;

&lt;p&gt;in the opta-examples directory cloned from Github (&lt;a href="https://github.com/run-x/opta-examples.git"&gt;https://github.com/run-x/opta-examples.git&lt;/a&gt;)&lt;br&gt;
docker build -t mongoapp:latest ./opta-atlas-mongo-search&lt;br&gt;
Then,&lt;/p&gt;

&lt;h2&gt;
  
  
  For aws
&lt;/h2&gt;

&lt;p&gt;opta deploy — image=mongoapp:latest -c opta-examples/opta-atlas-mongo-search/opta/atlasmongoservice.yaml&lt;/p&gt;

&lt;h2&gt;
  
  
  OR, For local
&lt;/h2&gt;

&lt;p&gt;opta deploy — image=mongoapp:latest — local -c opta-examples/opta-atlas-mongo-search/opta/atlasmongoservice.yaml&lt;br&gt;
After a few minutes, the application will be running against the new MongoDB Atlas cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample Data and Atlas Search Index Setup
&lt;/h2&gt;

&lt;p&gt;Before you can use the application, &lt;a href="https://www.mongodb.com/developer/how-to/build-movie-search-application/#step-1.-spin-up-atlas-cluster-and-load-movie-data"&gt;follow steps 1 and 2&lt;/a&gt; in the original MongoDB tutorial in order to load the sample data and set up the search index in the Atlas database (Although you don’t have to create the cluster, Opta will perform that step). After you have created the MongoDB Atlas search index, wait for a few minutes before going to the next step as the index is built in MongoDB Atlas. Opta will also set correct firewall rules inside MongoDB Atlas so that your application’s IP address(s) can connect to the database.&lt;br&gt;
Once you are done, run &lt;em&gt;opta output&lt;/em&gt; to get the AWS ELB endpoint url and point your browser to the address (or to &lt;em&gt;&lt;a href="http://localhost:8080/"&gt;http://localhost:8080/&lt;/a&gt;&lt;/em&gt; in case you are using Opta Local); You should now be able to search the movie database like in the screenshot below.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fl934R14--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86tpgb6cbz5gehma9ueh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fl934R14--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86tpgb6cbz5gehma9ueh.png" alt="Movie Search Sample Screenshot" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Movie Search Sample Screenshot
&lt;/h2&gt;

&lt;p&gt;If you want, you can use Opta to &lt;a href="https://docs.opta.dev/tutorials/ingress/"&gt;add TLS&lt;/a&gt; to serve the application over HTTPS on your domain!&lt;/p&gt;

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

&lt;p&gt;And there you have it, a web application (Flask API+SPA) using MongoDB Atlas deployed in minutes with Opta.&lt;br&gt;
We were able to deploy the application to a SOC-2 compliant AWS EKS Kubernetes cluster and spin up an Atlas database that automatically connected into our Flask application. All with a couple of simple Opta infrastructure-as-code yaml files and without diving into the nitty-gritties of low-level terraform AWS constructs. Spend less time wrestling with your infrastructure and more time with your application!&lt;/p&gt;

</description>
      <category>opta</category>
      <category>runx</category>
      <category>mongodb</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>I can't believe you're not adding observability</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Wed, 27 Oct 2021 23:29:08 +0000</pubDate>
      <link>https://forem.com/newrelic/i-cant-believe-youre-not-adding-observability-1fah</link>
      <guid>https://forem.com/newrelic/i-cant-believe-youre-not-adding-observability-1fah</guid>
      <description>&lt;p&gt;&lt;em&gt;cover image by &lt;a href="https://www.flickr.com/photos/141665267@N08/27491358331/" rel="noopener noreferrer"&gt;uppsa uppsa&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I want to talk to you about observability, the art of understanding errors and performance of your technology stack by implementing monitoring and some kind of tool to view that monitoring.&lt;/p&gt;

&lt;p&gt;Listen, if you're making money as an engineer in the tech industry, you're doing a good job. Functional? Object-oriented? Microservices? One big scary monolith? &lt;/p&gt;

&lt;p&gt;If what you do is paying for groceries and keeping a roof over your head then it's good code, good architecture, and you have nothing to apologize for.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphl5ezf20jt1drgmdrp5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphl5ezf20jt1drgmdrp5.jpg" alt="a monolith"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;if this thing pays the bills it's good technology&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So when I say 'I can't believe you're not doing observability' it's not about whether your technology is good in any absolute, Manichean sense. I completely understand how observability can seem like a reach goal, a nice-to-have, something that might be useful in other shops but not here, always moved to the next sprint.&lt;/p&gt;

&lt;h3&gt;
  
  
  But I don't know how you're not &lt;em&gt;stressed out all the time&lt;/em&gt; without observability.
&lt;/h3&gt;

&lt;p&gt;Like, what happens when the site goes down late at night? I've been on teams without any kind of standardized monitoring so I know what happens: the best operations person you have gets woken up. If she's unavailable or can't figure it out then &lt;em&gt;everybody&lt;/em&gt; gets woken up until someone finds the problem from scouring logs, reverting changes, or testing the system by brute force.&lt;/p&gt;

&lt;p&gt;And I've also been in teams where performance trends were invisible, so it was impossible to explain to our PM's why we needed 2 weeks to handle tech debt.&lt;/p&gt;

&lt;p&gt;So I think observability is something everyone should be doing. DevOps in its purest form. A concern shared across all technical roles and appreciated by management.&lt;/p&gt;

&lt;p&gt;I cannot bring you to this promised land of restful nights and pretty charts, but I can show you how to get there. New Relic can monitor dozens of services using a free tier account, and our free conference next week can show you how to monitor everything from front-end React to Kubernetes clusters.&lt;/p&gt;

&lt;p&gt;Register for &lt;a href="https://hopin.com/events/data-nerd-days-2-0?utm_source=Dev.to&amp;amp;utm_campaign=Community" rel="noopener noreferrer"&gt;Data Nerd Days November 3rd&lt;/a&gt;, I'll be talking about monitoring serverless. As of the time of writing this article, the next few hundred registrants will get sweatshirts.&lt;/p&gt;

&lt;p&gt;If you don't use New Relic use another tool, but for all love do add some observability to your stack soon.&lt;/p&gt;

</description>
      <category>observability</category>
      <category>kubernetes</category>
      <category>newrelic</category>
      <category>devops</category>
    </item>
    <item>
      <title>K8s Pods: Image tags vs. Digest</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Wed, 27 Oct 2021 17:41:03 +0000</pubDate>
      <link>https://forem.com/run-x/k8s-pods-image-tags-vs-digest-376b</link>
      <guid>https://forem.com/run-x/k8s-pods-image-tags-vs-digest-376b</guid>
      <description>&lt;p&gt;Image tags are a common source of frustration with the management of Kubernetes pods. How many times have I seen a question like this&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I am unable to see my changes, even though I am using the referencing the image using the Correct Tag.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or even worse:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I haven't changed the Referenced for the Image, but its behavior changed&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These are normal problems to face do the basic design of Docker's image management.&lt;/p&gt;

&lt;p&gt;But before diving in, let's see thee terminology that we'll be talking about.&lt;/p&gt;

&lt;h3&gt;
  
  
  Image Tag
&lt;/h3&gt;

&lt;p&gt;Human understandable reference to an Image used to convey information about that variant. An image can be tagged with multiple tags and can be referenced using any.&lt;/p&gt;

&lt;p&gt;Properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mutable&lt;/li&gt;
&lt;li&gt;Unique (i.e., the same tag can be used on multiple Images and will reference the last image that was tagged)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Image Digest
&lt;/h3&gt;

&lt;p&gt;Hash reference to an Image.&lt;/p&gt;

&lt;p&gt;Properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Immutable&lt;/li&gt;
&lt;li&gt;Created when pushing an Image to the Repository for the first time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  General Practice
&lt;/h3&gt;

&lt;p&gt;Programmers tend to reference the Images using the Image tags, for the obvious reason of getting a better readability, but in doing so, an important blind spot is missed: an image &lt;strong&gt;I1&lt;/strong&gt; referenced at time &lt;strong&gt;T1&lt;/strong&gt;, may refer to image &lt;strong&gt;I2&lt;/strong&gt; at time &lt;strong&gt;T2&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;This generally happens when the Programmer is referring to generic tags such as &lt;strong&gt;latest&lt;/strong&gt;, or can happen due to &lt;strong&gt;&lt;a href="https://www.whitesourcesoftware.com/free-developer-tools/blog/overcoming-dockers-mutable-image-tags/"&gt;Human error&lt;/a&gt;&lt;/strong&gt;, when you end up tagging Image with an &lt;strong&gt;already used Tag&lt;/strong&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Use Cases
&lt;/h3&gt;

&lt;p&gt;Using &lt;strong&gt;latest&lt;/strong&gt; to point to latest version always. Some other self-explanatory tags like &lt;strong&gt;qa / dev / prod&lt;/strong&gt;, &lt;strong&gt;versioning tags&lt;/strong&gt; like &lt;strong&gt;x.y.x&lt;/strong&gt; for maintaining versions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Non-deterministic Deployment
&lt;/h3&gt;

&lt;p&gt;When using Image tags for referencing the Image, there is no guarantee that the Tag would refer to the expected Image, because of &lt;strong&gt;Tag Mutability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Another defect with the non-deterministic deployment is some infrastructure tools which are dependent on the &lt;strong&gt;Stage Changes&lt;/strong&gt;, will not be able to detect the changes when using generic tags and no versioning, or if due to a human error of mutating the tags.&lt;/p&gt;

&lt;p&gt;In order to avoid Non-Deterministic deployment, we should use Immutable Image Identifier &lt;strong&gt;Image Digest&lt;/strong&gt; should be used. But this way, we lose the Human readability. In order to have &lt;strong&gt;Human Readability&lt;/strong&gt;, as well as &lt;strong&gt;Deterministic Deployment&lt;/strong&gt;, we can refer to the Image using both Image Tag and Image Digest. Docker gives us the capability to integrate both and refer to the Image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Image Reference: &amp;lt;image_name&amp;gt;:&amp;lt;image_tag&amp;gt;@&amp;lt;image_digest&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Deployment Image with Tag vs Digest&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Different ways of referencing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Accessing a resource from a collection of similar resources is always easy when there is a versioning attached to it. It helps users to have a better control the specific resource that they are using. This is useful when versioning attached to the resources is immutable. But at times, situations arise where one wants to have even more readability, for ex., using the latest version ever of the resource every time or raising a small patch so that it reflects in the version. In such cases, we would require the tags to be mutable.&lt;/p&gt;

&lt;p&gt;This is the usability around which the K8s Pods were build. Having mutable tags gives the ability to have named versions, something which makes a lot of sense because things are kept easier on the pipelines, like take the &lt;strong&gt;latest&lt;/strong&gt; image, use the &lt;strong&gt;dev&lt;/strong&gt; image, or maybe when a fix is so small that it doesn’t require a version update.&lt;/p&gt;

&lt;p&gt;So, now that the versions, a.k.a., tags, are mutable. So, does that mean that is nothing immutable that can be used to get the same Image again and again. This is where the Digest comes into the picture. This is a hash key that is created based on what all base images are used for constructing the image and this is unique for every different image. Digest can be used to reference the same image again and again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now let’s get into some techie stuff&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why are tags important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tags are human understandable reference to an Image used to convey information about that variant. An image can be tagged with multiple tags and can be referenced using any. Importantly, a &lt;em&gt;tag can be changed to different images&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Non-deterministic Deployment?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When using Image tags for referencing the Image, there is no guarantee that the Tag would refer to the expected Image, because of &lt;strong&gt;Tag Mutability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This drawback is for the Infrastructure Tools, which depend on &lt;strong&gt;State Changes&lt;/strong&gt;, as the tools will not be able to find the difference in the state, if the Tag refers to a different image or not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, how do we make this deterministic?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In order to get the best of both the worlds, that is human understandable reference as well as deterministic deployments, there needs to be a &lt;strong&gt;Dynamic Mapping&lt;/strong&gt; between &lt;strong&gt;Image Tag&lt;/strong&gt; and &lt;strong&gt;Image Digest&lt;/strong&gt; which can be used when deploying images. While pushing to a repository, we can tag the image and then once the digest is created, use that to deploy the images.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How can OPTA help?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Opta?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Opta is a platform for running containerised workloads in the cloud. It abstracts away the complexity of networking, IAM, K8s, and various other components - giving you a clean cloud agnostic interface to deploy and run your containers. It’s all configuration driven so you always get a repeatable copy of your infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does Opta help?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Deploy option of Opta with an image tag input would automatically create the Dynamic Mapping between the Image uploaded to the Repository and use the Image digest to deploy the Image.&lt;/p&gt;

&lt;p&gt;For more information on how to use Opta, use this: &lt;a href="https://docs.opta.dev/getting-started/"&gt;https://docs.opta.dev/getting-started/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>k8s</category>
      <category>pods</category>
      <category>devops</category>
    </item>
    <item>
      <title>[Video] Running your cloud locally: Opta's Open source Infrastructure as Code</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Mon, 11 Oct 2021 18:56:15 +0000</pubDate>
      <link>https://forem.com/run-x/video-running-your-cloud-locally-opta-s-open-source-infrastructure-as-code-1f91</link>
      <guid>https://forem.com/run-x/video-running-your-cloud-locally-opta-s-open-source-infrastructure-as-code-1f91</guid>
      <description>&lt;p&gt;Opta is a way to get started deploying services in the cloud without having to understand the nitty-gritty of permissions and connection settings between components.&lt;/p&gt;

&lt;p&gt;In this quick video, Sachin demonstrates how you can run Opta locally before you deploy to AWS.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/xKIxolcVvTs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The goal with Opta Local is to let you preview how your application code is running from your laptop without having to deploy to the cloud for every code change&lt;/p&gt;

</description>
      <category>aws</category>
      <category>deployment</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Can we build a better Terraform? The story of Opta</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Wed, 29 Sep 2021 12:39:12 +0000</pubDate>
      <link>https://forem.com/run-x/can-we-build-a-better-terraform-the-story-of-opta-288l</link>
      <guid>https://forem.com/run-x/can-we-build-a-better-terraform-the-story-of-opta-288l</guid>
      <description>&lt;p&gt;&lt;em&gt;cover image by By Daein Ballard -  &lt;a href="https://commons.wikimedia.org/w/index.php?curid=5068482"&gt;CC BY-SA 3.0&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
Managing to distributed systems is... difficult. You can find guides and recommendations everywhere that say if you don't have to do a distributed workload you shouldn't.&lt;/p&gt;

&lt;p&gt;An article from last year by yours truly argued that &lt;a href="https://increment.com/containers/primer-on-containerization/"&gt;containers and container orchestration&lt;/a&gt; have very different futures: It makes sense that almost everyone will be working with containers in the future, but it's not as clear that container orchestration knowledge will be de rigueur.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1358307866961084422-274" src="https://platform.twitter.com/embed/Tweet.html?id=1358307866961084422"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1358307866961084422-274');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1358307866961084422&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;As we've faced this complexity of modern distributed workloads a number of companies have tried to make this work easier. These tools tend to fall into three categories:&lt;/p&gt;

&lt;h2&gt;
  
  
  "We have an okay tool, but hire us and we'll deliver your whole cloud"
&lt;/h2&gt;

&lt;p&gt;When tools are sold with strict SLA's and mandatory professional services, you're often &lt;em&gt;really&lt;/em&gt; purchasing Kubernetes expertise rather than great software&lt;/p&gt;

&lt;h2&gt;
  
  
  "Our Tool is Free! (for 90 days)"
&lt;/h2&gt;

&lt;p&gt;Often a partially-open-source-tool that inevitably requires some Software-as-a-Service component to really work, a number of tools will lock you into their platform, never give you all the tools, &lt;em&gt;and&lt;/em&gt; rarely offer you any support if things go wrong&lt;/p&gt;

&lt;h2&gt;
  
  
  Actual Open Source
&lt;/h2&gt;

&lt;p&gt;These are teams releasing tools as Open Source Software that can be used, start to finish, on your own. Multiple teams see the growth potential in Kubernetes and other distributed workloads and just want to grow with the industry. They offer professional services or hosted servers in addition to free tools, but you can do the whole thing start to finish yourself.&lt;/p&gt;

&lt;p&gt;While this third option sounds a lot better for the user, it can still hit pitfalls. The industry standard Terraform is currently &lt;a href="https://www.theregister.com/2021/09/07/hashicorp_pause/"&gt;struggling to keep up with community PRs&lt;/a&gt; and is in danger of falling behind users needs.&lt;/p&gt;

&lt;p&gt;This isn't a new story: Large-ish companies can struggle to justify the cost of maintaining an open source tool, and once  they grow to that medium size it's hard to find the time to maintain a tool everyone wants but no one has time to update.&lt;/p&gt;

&lt;h1&gt;
  
  
  Trying to build a better Terraform
&lt;/h1&gt;

&lt;p&gt;Enter RunX, a small team focused on trying to build a fully modern tool for deploying distributed workloads. We're a small team of just 8, laser focused on reducing toil for cloud engineers. &lt;a href="https://techcrunch.com/2021/09/28/runx-announces-4-1m-seed-to-simplify-cloud-infrastructure-deployment-for-developers/"&gt;We just raised 4 million in funding&lt;/a&gt;, and we'd love you to try out &lt;a href="https://github.com/run-x/opta"&gt;Opta, the easier way to deploy.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>aws</category>
    </item>
    <item>
      <title>Can Kubernetes Save You Money?</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Fri, 24 Sep 2021 16:52:49 +0000</pubDate>
      <link>https://forem.com/run-x/can-kubernetes-save-you-money-584j</link>
      <guid>https://forem.com/run-x/can-kubernetes-save-you-money-584j</guid>
      <description>&lt;p&gt;&lt;em&gt;cover image: detail from Hieronymus Bosch - Death and the Miser&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Kubernetes is not known as a particularly economic option. If you're migrating to a distributed architecture from a simple virtual machine, you're likely to see an increase in hosting costs and hours spent on setup at first. &lt;/p&gt;

&lt;p&gt;A recent article on our RunX blog talked about how you can &lt;a href="https://blog.runx.dev/how-to-save-60-cost-by-migrating-from-heroku-to-opta-on-aws-2df53bbb7e2a"&gt;save money using Opta&lt;/a&gt; to deploy the same project to AWS you previously would have hosted on Heroku.&lt;/p&gt;

&lt;p&gt;I'm curious if you've seen overall cost savings by switching to Kubernetes, either from an older distributed compute tool or a monolithic architecture.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>discuss</category>
      <category>healthydebate</category>
    </item>
    <item>
      <title>Tesla Bot is a great example of how NOT to develop a product</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Wed, 22 Sep 2021 19:02:16 +0000</pubDate>
      <link>https://forem.com/run-x/tesla-bot-is-a-great-example-of-how-not-to-develop-a-product-4i5i</link>
      <guid>https://forem.com/run-x/tesla-bot-is-a-great-example-of-how-not-to-develop-a-product-4i5i</guid>
      <description>&lt;p&gt;&lt;em&gt;Image by u/Kruzat, available via &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode"&gt;Creative Commons Attribution-ShareAlike 4.0 International License&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As I’m sure many of you have already seen, Elon Musk has announced Tesla Bot, a humanoid robot intended to&lt;a href="https://www.forbes.com/sites/johnkoetsier/2021/08/20/tesla-bot-elon-musk-reveals-humanoid-tesla-robot-which-is-apparently-not-a-joke/"&gt;“automate repetitive tasks”&lt;/a&gt;. The CEO announced Tesla Bot not with a working prototype or even a partial proof-of-concept, but with a dancer dressed in a modified morphe suit who &lt;a href="https://www.cnbc.com/2021/08/19/elon-musk-teases-tesla-bot-humanoid-robot-for-repetitive-tasks.html"&gt;“gyrated wildly on stage”&lt;/a&gt; before the presentation. The robot has a vague timetable, with Musk claiming a prototype will be out sometime next year, and an ambitious set of (at this point hypothetical) specifications: the ability to not only understand and interpret voice commands, but carry out tasks ranging from factory assembly to grocery shopping. Musk has announced that a universal basic income will be necessary to support the people unemployed by his imagined product.&lt;/p&gt;

&lt;p&gt;While claims of this magnitude are pretty rare, the bones of the scenario are pretty universal: the boss overpromises on a product that the actual development team knows will be impossible to roll out by the deadline. So what do you do when your boss overcommits your team to building, say, a fully-autonomous robot that can work at Amazon in one year?&lt;/p&gt;

&lt;p&gt;Allison Green of Ask A Manager has &lt;a href="https://www.askamanager.org/2020/08/how-to-disagree-with-your-boss.html"&gt;advice&lt;/a&gt; for pushing back on a boss’s decision. “A good boss does want to know when you disagree with something, especially if you feel strongly and especially if you have information or context she might not have considered,” Green says. She says to consider whether you have information that your boss doesn’t have that might make them reconsider, or when a course of action might have consequences that your boss isn’t aware of yet. Executive coach &lt;a href="https://tribunecontentagency.com/article/dealing-with-a-boss-who-overpromises/"&gt;Daneen Skube&lt;/a&gt; also says that you can put the onus on your boss to give you the roadmap to achieving what they’ve come up with. “Don’t let your boss get away with platitudes and grand concepts,” she says. “Keep looking confused as you query him about how to implement his noble goals.”&lt;/p&gt;

&lt;p&gt;Green and Skube agree that if your boss decides to keep overpromising, your chances of dissuading them are limited, and you should consider the importance of the issue to you. If you work at a company, for example, that has a &lt;a href="https://gizmodo.com/elon-musks-boring-company-cancels-los-angeles-tunnel-fo-1830707724"&gt;history&lt;/a&gt; of &lt;a href="https://www.cnbc.com/2018/09/24/tesla-solar-roof-tiles-where-are-they.html"&gt;pushing&lt;/a&gt; &lt;a href="https://www.foxnews.com/auto/elon-musk-explains-tesla-cybertruck-window-fail"&gt;nonviable products&lt;/a&gt;, within that company culture it might not be possible as an individual to “manage up” by correcting your boss--especially if your boss is &lt;a href="https://www.theguardian.com/technology/2018/jun/21/tesla-whistleblower-sabotage-elon-musk-gigafactory-martin-tripp"&gt;known&lt;/a&gt; to &lt;a href="https://www.bbc.com/news/world-us-canada-50695593"&gt;take criticism poorly&lt;/a&gt;. An individual who continues to vocally disagree after the boss has shut that disagreement down could come across as hostile, even if their concerns are valid and serious.&lt;/p&gt;

&lt;p&gt;When a boss is unlikely to respond well to one person pushing back, another choice is to push back as a group. Green has &lt;a href="https://www.askamanager.org/2018/02/how-to-speak-up-as-a-group-at-work.html"&gt;specific suggestions&lt;/a&gt; for how to handle that. She says the important thing is to make sure that you and the rest of your group are on the same page about it, and to address the boss together, rather than appointing a spokesperson. It’s also worth remembering that a particularly self-aggrandizing or hostile boss might try to divide and conquer--it might be worth practicing the conversation beforehand, with one of your coworkers playing the boss.&lt;/p&gt;

&lt;p&gt;And finally: if your company routinely overpromises and fails publicly, it might be worth looking for a new job. No amount of prestige is worth the headache of having a boss who chronically oversells and then makes it your problem when the product can’t live up to the hype.&lt;/p&gt;

</description>
      <category>career</category>
      <category>ai</category>
      <category>watercooler</category>
      <category>tesla</category>
    </item>
    <item>
      <title>Embrace Remote Work or Perish</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Thu, 16 Sep 2021 13:34:03 +0000</pubDate>
      <link>https://forem.com/run-x/embrace-remote-work-or-perish-3h1j</link>
      <guid>https://forem.com/run-x/embrace-remote-work-or-perish-3h1j</guid>
      <description>&lt;p&gt;&lt;em&gt;cover image by Matt.c.28 - Own work, CC BY-SA 4.0&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Recently our team at RunX was &lt;a href="https://www.mercurynews.com/2021/09/08/silicon-valley-finds-remote-work-is-easier-to-begin-than-end/"&gt;featured in a piece on remote work&lt;/a&gt; that has proven something of a rorschach test: in comments on the article and social media sites like LinkedIn, people have seen remote work as difficult, dangerous, a godsend, the future, or an effect of the pandemic that will soon be shaken off. &lt;/p&gt;

&lt;p&gt;I wanted to take the opportunity to talk about how RunX has succeeded by embracing remote work, and why other startups will need to let go of locality if they don’t want to limit their growth.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Limiting factor in cloud growth: people
&lt;/h1&gt;

&lt;p&gt;In 2018 I gave a few talks about the difficulties in hiring experts in containerization, which included the throwaway line: “talk to any CTO and they’ll tell you that it’s hard to hire qualified people, when’s the last time a CTO complained they couldn’t find enough RAM?”&lt;/p&gt;

&lt;p&gt;Sadly that little quip is a bit less timely given the current chip shortage, but even if you’ve been waiting six months for a GPU, the point still stands. Where once hardware purchasing could present a hard limit on your IT Operations growth, now the limiting factor is almost always the trouble of staffing and maintaining a team of skilled operations engineers.&lt;/p&gt;

&lt;p&gt;Wait, what does any of this have to do with remote work?&lt;br&gt;
I know this has been a hard year and a half for all of us. And for some of us, part of the pain of this time, along with the constant fear and knowledge that western liberal democracies don’t care about the welfare of their citizens, being cooped up in our homes wasn’t always fun. But for those of us lucky enough to still have jobs, and homes, remote work has meant a major upgrade to a previous commute heavy existence.&lt;/p&gt;

&lt;p&gt;As our children return to school we’re able to spend an extra hour with them every single day. And our trips to school can happen with any parent now that we don’t have to get to a downtown office. &lt;/p&gt;

&lt;p&gt;Days where you have two meetings, one at 8 am and the second at 3pm, can be spent in relative leisure rather than furtively reloading twitter at your desk. And if a day has more than 8 hours of work stuffed into it, well at least you’re home to have dinner with your family.&lt;/p&gt;

&lt;p&gt;But as the pandemic stretches into its second year, people’s lives are shifting more fundamentally. People are re-locating to homes that more suit their daily lives. More than one of my own co-workers has gone from semi-urban wasteland to bucolic bliss, complete with solar panels and a goat herd. Others are living closer to family, while still others are planning multi-year global tours. &lt;/p&gt;

&lt;p&gt;As numerous large tech companies prepare to ramp up their long-silent offices, they have little to offer in compensation for these lost benefits beyond K-cups and artisan burritos. Major players like Apple and Facebook have shown more willingness to force their employees to commute. Their confidence stems possibly from the knowledge that, paying the highest salaries in the industry, their employees will need to take a pay cut to leave.&lt;/p&gt;

&lt;h1&gt;
  
  
  Go Big and Go Home
&lt;/h1&gt;

&lt;p&gt;Now perhaps you see the connection between remote work and the difficulty of hiring and keeping good people. If you are incapable of paying half a million dollars for every engineer as the FAANG companies do, you will be hard pressed to keep them if you insist they fight for domestic real estate in the bay area.&lt;/p&gt;

&lt;p&gt;But the most successful teams won’t just say ‘remote OK’ and leave it at that. I’m working next on a piece about how remote teams differentiate themselves. In the meantime, comment down below with what benefits you expect in a remote team.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>healthydebate</category>
      <category>remote</category>
      <category>career</category>
    </item>
    <item>
      <title>How to Deploy Wordpress to Kubernetes on AWS</title>
      <dc:creator>Nočnica Mellifera</dc:creator>
      <pubDate>Tue, 14 Sep 2021 14:04:27 +0000</pubDate>
      <link>https://forem.com/run-x/how-to-deploy-wordpress-to-kubernetes-on-aws-o5p</link>
      <guid>https://forem.com/run-x/how-to-deploy-wordpress-to-kubernetes-on-aws-o5p</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;The first time someone suggested adding Wordpress to the &lt;a href="https://github.com/run-x/awesome-kubernetes" rel="noopener noreferrer"&gt;Awesome Kubernetes&lt;/a&gt; list, I was surprised! I didn't think of Wordpress as something that needed a distributed workload tool. So many readers mentioned it that I put together this brief tutorial.&lt;/p&gt;

&lt;p&gt;This article analyzes available paths for migrating a WordPress website to AWS, and the architecture components for AWS-hosted WordPress. This instruction to covers how &lt;a href="https://github.com/run-x/opta" rel="noopener noreferrer"&gt;Opta&lt;/a&gt; can be used to provide shared storage on the AWS EKS platform for a WordPress CMS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview of WordPress
&lt;/h2&gt;

&lt;p&gt;WordPress is a simple (CMS) content management system, a process of posting articles and media to a website. WordPress was born as a blogging platform but has grown to support the creation of all kinds of websites. It is free and open-source. It was launched in 2003. It has mainly two basic elements that are the front end and the back end. WordPress provides a spontaneous user interface for this purpose for show text, images, and other media to the web. Anything users see on the website has been uploaded to the webserver. As of 2021, more than 42% of the top 10 million websites are running WordPress.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alternatives for WordPress on AWS
&lt;/h2&gt;

&lt;p&gt;WordPress has been developed to combine CMS competence that integrates with modern elastic, scalable, and cloud-native architecture. The WordPress group has attempted to develop modules that enable the creations of WordPress sites that exploit AWS Cloud contributions.&lt;/p&gt;

&lt;p&gt;AWS provides a large-scale cloud platform that improves performance, control, scalability, and reliability for WordPress websites. The Amazon web services Elastic Kubernetes Service grant the company to build, manage and scale Kubernetes clusters on AWS cloud or local tools.&lt;/p&gt;

&lt;p&gt;There are the following options in AWS when going for WordPress hosting as per utilization cases changes:&lt;br&gt;
&lt;strong&gt;a. AmazonEC2&lt;/strong&gt; -- The EC2 virtual machine system is the classic way to own your own virtualized server on AWS. But the smooth scaling and automated restarting of instances aren't included&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36hvgzyjel29efgqwanj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36hvgzyjel29efgqwanj.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;b. Amazon LightSail&lt;/strong&gt; -- It is simple to apply a single-instance virtual private server that abstracts all instances needed to run a simple workload or quick deployment. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fifirrlaibzua9xn16h70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fifirrlaibzua9xn16h70.png" alt="Picture2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image Source: &lt;a href="https://aws.amazon.com/blogs/" rel="noopener noreferrer"&gt;https://aws.amazon.com/blogs/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For small WordPress websites, it acts as a perfect starting point that can scale later with its growth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;c. AWS marketplace&lt;/strong&gt; --It includes different pre-configured WordPress images that can be deployed into AWS EC2 in quick time. That single-click deployments are tailored to unique work and come in an adjustable combination of packages and plugins for efficient use of computing resources.&lt;/p&gt;
&lt;h1&gt;
  
  
  WordPress Hosting Components
&lt;/h1&gt;

&lt;p&gt;While most WordPress organizations utilize speedy begins to enable automated arrangements dependent on best procedures, comprehend the parts that make up a working WordPress application in AWS cloud.&lt;br&gt;
WordPress app. requires components to perform four functionalities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static Host Content&lt;/li&gt;
&lt;li&gt;Dynamic host content&lt;/li&gt;
&lt;li&gt;Blog/site store content/data&lt;/li&gt;
&lt;li&gt;On the file system store uploaded files and images.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now there we will discuss how above each functionality can be managed for AWS. &lt;/p&gt;
&lt;h2&gt;
  
  
  Stateless Web Tier
&lt;/h2&gt;

&lt;p&gt;In a stateless web tier, the server does not keep any data from one request to the next. The user needs to do its work in a series of simple transactions, and the client has to keep track of what happens between requests. While sessions are maintained by cookies on the end-user’s web browsers, so the WordPress core is stateless.&lt;/p&gt;
&lt;h2&gt;
  
  
  Scaling Web Tier
&lt;/h2&gt;

&lt;p&gt;It is defined as having the capability to link resources to a system that increases its performance (decrease output times or increase throughput). The number of compute instances includes by AWS that can be used to evolve single-server applications into scalable architecture.&lt;br&gt;
There are about five main components included by scalable web tier to handle scaling for dynamic content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Machine Images (AMIs)&lt;/li&gt;
&lt;li&gt;Amazon EC2 Instances&lt;/li&gt;
&lt;li&gt;Load Balancing&lt;/li&gt;
&lt;li&gt;Automatic Scaling&lt;/li&gt;
&lt;li&gt;Health Checkup&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Shared Storage
&lt;/h2&gt;

&lt;p&gt;Mostly all WordPress Installation files, and client customizations should be handled in a shared platform as this eases the strain on web servers. Amazon web services having the Elastic File System (EFS) which gives a scalable, highly networked file system for different compute instances.&lt;br&gt;
Data Tier&lt;br&gt;
When the WordPress installation data files and setups are moved into a common Network File System (NFS), and static resources are being served on S3, stateful parts are hosted on WordPress Databases. Amazon Aurora is the top solution for running stateful workloads for AWS applications. Both MySQL and PostgreSQL are compatible with this stage. In Opta we will use PostgreSQL.&lt;/p&gt;
&lt;h1&gt;
  
  
  What is Opta?
&lt;/h1&gt;

&lt;p&gt;Opta is a stage for running containerized jobs in the cloud. It abstracts away the intricacy of networking, IAM, Kubernetes, and different parts - giving you a perfect cloud skeptic interface to deploy and run your containers. It's all arrangement or configuration driven so you generally get a repeatable duplicate of your foundation.&lt;/p&gt;
&lt;h2&gt;
  
  
  Setting up Opta
&lt;/h2&gt;

&lt;p&gt;Before starting with WordPress, we need to set up Opta. For this article, we will be used Opta.&lt;br&gt;
To set up Opta, install Opta by using the following command in a Linux distro like Ubuntu.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/bin/bash -c "$(curl -fsSL https://docs.opta.dev/install.sh)"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Set-up environment Creation&lt;br&gt;
An organization like AWS or Azure, we will set up an environment by executing the following commands:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;opta init env (AWS)&lt;/code&gt;&lt;br&gt;
Creating a file opta.yml to describe an environment that you will create. Using the below command and hit then a description of the environment will start showing and a cluster will be created.&lt;br&gt;
Cluster Creation&lt;br&gt;
Using the below command, we can create yml file that is responsible for the initial configuration for your environment and architecture setup.&lt;br&gt;
&lt;code&gt;cat opta.yml&lt;/code&gt;&lt;br&gt;
We have seen the first part we will mention about the AWS region and create account id through AWS console, now the second next part we will link modules through setting up Kubernetes or k8s cluster and created several nodes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aws&lt;/span&gt;
&lt;span class="na"&gt;org_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;XXXX&lt;/span&gt;
&lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;aws&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ca-central-1&lt;/span&gt; 
    &lt;span class="na"&gt;account_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;XXXXXXXXX254&lt;/span&gt;
&lt;span class="na"&gt;modules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;base&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;k8s-cluster&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;k8s-base&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that execute the command &lt;code&gt;opta apply&lt;/code&gt;&lt;br&gt;
When the above command gets executed, we will create an EKS cluster for you and configure VPC, networking, and different other infrastructure pieces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F653fnxkqayghjuank8lm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F653fnxkqayghjuank8lm.png" alt="Picture3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing WordPress on AWS using Opta
&lt;/h2&gt;

&lt;p&gt;Kubernetes empowers quick scaling of web applications utilizing on-request Horizontal Pod Autoscaling (HPA) approaches. An increment in workload pushes Kubernetes to plan extra reproductions utilizing extra PODs hosting comparative data content. Kubernetes also utilizes rollback arrangement systems to aid in seamless updates for content, client uploaded files. that is the reason a WordPress hosting application on the AWS Elastic Kubernetes Service improves to implementation of scalable, high accessibility websites.&lt;br&gt;
Now we will learn and understand how to provide shared storage to WordPress sites running on EKS which require access to shared volumes.&lt;/p&gt;

&lt;p&gt;Kubernetes Access Mode is a specification of a Persistent Volume that defines how it is mounted on a host. Various storage providers help various capabilities and the mode for each Persistent Volume is set to the specific combination of access modes it supports. &lt;br&gt;
There are four types of access mode supported by Kubernetes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read-only Memory&lt;/li&gt;
&lt;li&gt;Read WriteOnce&lt;/li&gt;
&lt;li&gt;Readwritemany&lt;/li&gt;
&lt;li&gt;ReadwriteoncePod &lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;In this article you have learned &lt;a href="https://www.runx.dev/" rel="noopener noreferrer"&gt;what opta is&lt;/a&gt; and how it is involved with deployment process, and this article explained from basic to the concept behind the deployment of WordPress on AWS using opta. If you have any trouble with the process please comment down below or &lt;a href="https://join.slack.com/t/opta-group/shared_invite/zt-r1p9k1iv-4MP1IMZCT9mwwwdJH0HRyA" rel="noopener noreferrer"&gt;join the opta slack&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>kubernetes</category>
      <category>opta</category>
      <category>aws</category>
    </item>
  </channel>
</rss>
