<?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>DEV Community: Gregg Meluski</title>
    <description>The latest articles on DEV Community by Gregg Meluski (@gmeluski).</description>
    <link>https://dev.to/gmeluski</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%2F21106%2Fab88dfec-4c7a-43c4-bad4-b656d2dced30.jpeg</url>
      <title>DEV Community: Gregg Meluski</title>
      <link>https://dev.to/gmeluski</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gmeluski"/>
    <language>en</language>
    <item>
      <title>Reverse Proxy Madness</title>
      <dc:creator>Gregg Meluski</dc:creator>
      <pubDate>Wed, 03 Apr 2019 01:25:00 +0000</pubDate>
      <link>https://dev.to/gmeluski/reverse-proxy-madness-lc1</link>
      <guid>https://dev.to/gmeluski/reverse-proxy-madness-lc1</guid>
      <description>&lt;p&gt;&lt;em&gt;This post was originally published at &lt;a href="https://meluski.com/"&gt;meluski.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Before we plumb my own confusing thoughts, let me first supply the sentence that made it really simple for me to understand exactly what a reverse proxy does (from &lt;a href="https://www.goodreads.com/book/show/15957451-mastering-nginx"&gt;"Mastering Nginx"&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A reverse proxy is a web server that terminates connections with clients and makes new ones to upstream servers on their behalf.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So freaking simple, right? If this is all you came for, please, quit reading this and move on to the book.&lt;/p&gt;

&lt;p&gt;What had stymied me for many years was pondering the idea, of, what part of a proxy does a reverse proxy reverse? From the standpoint of an ignorant consumer, a my client and a proxy server have a one to one relationship. I have an originating IP address that makes a request to the proxy IP which, in effect, stamps its own identity in lieu of my own before passing it on to the destination.&lt;/p&gt;

&lt;p&gt;Also freaking simple. And then I would start thinking about what reverses, and my mind would boggle.&lt;/p&gt;

&lt;p&gt;The idea that a proxy server can handle inbound requests from multiple clients is RARELY acknowledged without some substantial digging. Most of the immediately searchable literature is about using the proxy server as a client, instead of how the internals of the proxy server actually work - as in handling request from multiple unrelated clients and then rerouting them so it appears they all originated from the same IP address.&lt;/p&gt;

&lt;p&gt;I think part of the confusion is that conceptually, there are multiple, incomplete ways to look at the reversal when not considering the entire request cycle. After struggling with this for a while, I realized I was ignoring the response aspect of the relationship, because the reverse proxy does do its initial work when a request is inbound to the proxy server, same as a straightforward proxy.&lt;/p&gt;

&lt;p&gt;Then it kind of hit me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A proxy server makes a request look like it came from a different IP than the true source, and a reverse proxy makes it look like the response came from a different IP than the true source.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As such:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A proxy can be used to shield the identity of the actual requestor, a reverse proxy can be used to shield the identity of the actual destination.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Great. I get it now. And I hope this helps anyone who has also understand how the two are related. I'll leave you with some ASCII art, which helped me arrive at this conclusion:&lt;/p&gt;

&lt;h3&gt;
  
  
  Proxy
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[shield the source]
from multiple independent clients, allocate requests to a single specific IP
     ____
--&amp;gt; |    |
--&amp;gt; |    | ---&amp;gt;
--&amp;gt; |____|
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Reverse Proxy
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[shield the end points]
from a single client, conditionally allocate requests to specific IPs
      ____
     |    | ---&amp;gt; xxx.xxx.xxx.01
---&amp;gt; |    | ---&amp;gt; xxx.xxx.xxx.02
     |____| ---&amp;gt; xxx.xxx.xxx.03
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>career</category>
    </item>
    <item>
      <title>Mutated T-shapes</title>
      <dc:creator>Gregg Meluski</dc:creator>
      <pubDate>Wed, 13 Mar 2019 23:11:00 +0000</pubDate>
      <link>https://dev.to/gmeluski/mutated-t-shapes-58gd</link>
      <guid>https://dev.to/gmeluski/mutated-t-shapes-58gd</guid>
      <description>&lt;p&gt;&lt;em&gt;This post was originally published at &lt;a href="https://meluski.com/"&gt;meluski.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;One of the common career development tropes I've heard over the years is t-shaped skills, but I think it's an ineffectual representation of how people actually evolve in their career.  &lt;/p&gt;

&lt;p&gt;Primarily, this oversimplification serves to narrow the perception of the person significantly - framing a person's skills in a t-shape makes it sound like they are really excellent at one thing and marginally exceeding uselessness in everything else.&lt;/p&gt;

&lt;p&gt;From my own perspective, I have evolved interests in other disciplines that interact with my core role as a developer, such that over time what develops is more of a mutated t-shape. For example, my skills would look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;product | marketing | development | design | ux | sales
  x          x            x           x       x    x
  x          x            x           x
  x                       x                         
                          x
                          x
                          x
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The idea here is relatively simple - it’s not a straight T, it’s mutated. This graphic representation is far more descriptive of where a person stands. Any energy put into learning other disciplines is no longer reduced to a binary has it / doesn't have it when falling outside the core skill set. Someone who fiddled around on Photoshop no longer has the same depth of skill as a person who understands something about design principles. The mutated t-shape is the results of a person who has put efforts into fields to expand their field of knowledge.&lt;/p&gt;

&lt;p&gt;Being open to a mutated t-shape opens the door to zooming in or out of each column. Development could have its own set of skills, or you could step back and possibly encapsulate this skill set in terms of &lt;code&gt;Product&lt;/code&gt; and put it alongside other more general skills (perhaps with the excommunication of &lt;code&gt;sales&lt;/code&gt;, I would hesitate to categorize that as part of a traditional Product skill set).&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>career</category>
    </item>
    <item>
      <title>Exploring Microservices, Part One of [REDACTED]</title>
      <dc:creator>Gregg Meluski</dc:creator>
      <pubDate>Tue, 05 Feb 2019 00:59:00 +0000</pubDate>
      <link>https://dev.to/gmeluski/exploring-microservices-part-one-of-redacted-2lo1</link>
      <guid>https://dev.to/gmeluski/exploring-microservices-part-one-of-redacted-2lo1</guid>
      <description>&lt;p&gt;&lt;em&gt;This post was originally published at &lt;a href="https://meluski.com/engineering/reading-books/2019/02/05/exploring-microservices.html"&gt;meluski.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Meta work is fun, but it is the empty calorie of programming. &lt;/p&gt;

&lt;p&gt;Having spent a lifetime (i.e. six years) focusing on Javascript in my career roles, I was alarmed to realize that my already slippery knowledge of backend architecture was escaping my grasp at an ever-increasing rate. In the early days, out of necessity, I worked the entire stack of the website and subsequently managed to sleep through the dev-ops revolution. Scaling? When focusing on the client work, so many scaling issues are assignable to the nebulous backend team, regardless of whether they belong to a third party or your own company.&lt;/p&gt;

&lt;p&gt;But that's not how a GOOD engineer rolls. A good engineer understands things they depend upon but they don't contribute to daily. So this probably made me a somewhat bad engineer. A bad, bad, ignorant engineer.&lt;/p&gt;

&lt;p&gt;This realization led me to the brash, panicky deep dive which I tend to do when a gap in my armor is exposed. It's a dumb response when I think about it - impulsive and grasping. I do enjoy learning things, so that is the upside. Still, I think I need to be more comfortable about just not knowing things, I can't spend all my life buried in books... can I?&lt;/p&gt;

&lt;p&gt;This led me to a couple tomes, one called &lt;a href="https://www.goodreads.com/book/show/35755822-building-evolutionary-architectures"&gt;Building Evolutionary Architectures&lt;/a&gt; and another named &lt;a href="https://www.goodreads.com/book/show/22512931-building-microservices"&gt;Building Microservices&lt;/a&gt;. Nice, high-level books which focus on the concepts behind the technologies which tend to go whizzing past us so fast that if you take any time out, you're likely to be awash in nonsensical technology jargon. &lt;/p&gt;

&lt;p&gt;When I take the time to step back and properly think through things, I find myself desirous of understanding the technology in total - not just how to make it work, but the theory that makes it work. In retrospect, searching out these books is more aligned with the person I want to be instead of flop-sweating and bumbling my way through rickety implementations that fall apart at the first changeset.&lt;/p&gt;

&lt;p&gt;Both books cite Conway's Law in some places, and honestly, this is probably the driver which moves us away from the monoliths to which we had become accustomed in the previous decade. Monolithic command and control dynamics will always have a place in architecture design, but much like the HTML &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; they are evolving away from the accepted standard into a consciously chosen use case. As Neal Ford warns in &lt;em&gt;Building Evolutionary Architectures&lt;/em&gt; "Make sure your architecture matches the problem domain."&lt;/p&gt;

&lt;p&gt;So now we have gained a greater degree of the flexibility and dynamism that we see in our daily lives and workplaces. To meet that challenge as technologists, it seems, is the key. For myself, that means turning theory into action, which is why I turned up an EC2 instance at the first opportunity I saw for practical application. Web servers are the hamburger of the service-oriented architecture menu - steadfast and well known, if not always understood. Everyone offers a server or hosting package, right?&lt;/p&gt;

&lt;p&gt;It had been a while, and I hope to do something more than turn a server on and off (at the time of this writing, I had already gotten Nginx set up, so expect more on that). As someone who had worked with clients for a long time, this was a rare opportunity to do some damage in the AWS playground. I had some rare dalliances with Lambda a few years back, but as my company grew I found myself more siloed from basic functions which would require prowess with their services. &lt;/p&gt;

&lt;p&gt;As a side note, there was a recent time when I managed to create enormous data transfer charges by treating an S3 bucket as a mounted drive on my laptop. Let's just say that I check in on the Billing part of my AWS dashboard far more often these days.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>career</category>
      <category>aws</category>
    </item>
    <item>
      <title>Of Absorption and Intervals</title>
      <dc:creator>Gregg Meluski</dc:creator>
      <pubDate>Sun, 20 Jan 2019 22:23:00 +0000</pubDate>
      <link>https://dev.to/gmeluski/of-absorption-and-intervals-3p6k</link>
      <guid>https://dev.to/gmeluski/of-absorption-and-intervals-3p6k</guid>
      <description>&lt;p&gt;&lt;em&gt;This post was originally published at &lt;a href="https://meluski.com/engineering/2019/01/20/mental-breaks-and-intervals.html"&gt;meluski.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Programming problems tend to stick with you if you don't intentionally disassociate. They are a slightly (only slightly) more benign version of the antagonist from “It Follows”. They follow you in the shower, in your car, to the gym and back. And then if they touch you, you crumple into a lifeless quivering mass, whimpering and wondering why you didn’t read more programming books or go to that conference in Iceland last year (probably because you were too busy working on the previous programming problem to do something normal, like book a hotel room).&lt;/p&gt;

&lt;p&gt;I'm not sure whether it is something cultural or unique to my experience, but historically I have approached learning, personal growth and work through a brute force framework, a "sleep when I'm dead" mentality which, unsurprisingly, often left me cranky and moody. The only answer to learning something new was to pile it directly on top of my already overloaded brain with little regard for capacity or sanity.&lt;/p&gt;

&lt;p&gt;What finally got me is one of the core teachings of Barbara Oakley, which is that the brain needs to achieve a state of diffused thinking in order to learn something more completely. This was, for someone who constantly allowed himself to be mired in the details of their work (and in programming, there are always details), a revelation. &lt;/p&gt;

&lt;p&gt;Rest is the crucible of mental persistence, motivation, and endurance. We all need the energy to keep moving through the day and drive complex problems forward. Many  problems are deeper wells then they initially appear, and plumbing them becomes taxing. At a certain point, you have to wonder if continually driving forward with no breaks is actually less effective, time-wise, then throwing yourself ten or fifteen minutes to recover and think of something else, like dinner.&lt;/p&gt;

&lt;p&gt;Lately, I work in concentrations, intervals of twenty-five minutes (or more, because finding a clean stopping point is critical). I find that when I make a timer and shut my distraction windows (Slack and Messages) I am more able to work through sticky issues. That is how I structure my days now, even when planning the night before - I may give myself two hours of straight coding time, with the understanding there are going to be three to four twenty-five minute sessions, with downtime in between each.&lt;/p&gt;

&lt;p&gt;And there is where the real glue happens. When I take a break from work, it means I have to stop and do nothing, allow the mind to become unmoored. That doesn’t mean pumping my brain full of Twitter or the news. That means, sitting there and absorbing all the data and complexity I just pushed through my brain hole - particularly if I am doing challenging work, or trying to move through a new concept, technology or programming paradigm. When turning theory into practical application, the brain needs space to connect all the disparate things.&lt;/p&gt;

&lt;p&gt;What you have here is a bit of weight and counterweight. On the surface, all the work appears to be done in the blocks of pure work. This is what someone can wave in front of their peers and manager, link them to the commit list and allow them to be amazed at the throughput. &lt;/p&gt;

&lt;p&gt;I think there is just as much going on when you stop and would argue that it's actually more critical. Grinding through is workmanlike, it creates value by virtue of checking the boxes on the task list. Stopping work, absorbing and reflecting is when the compounding happens - when getting the shit done meets up with memory, conceptual knowledge and whatever else matters to what you're doing. This is where you might see a separation between people who do the same job for years and years and people who move on to more conceptual roles. That's just a theory, but not too wild a one, I think.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>Why I Warm Up (And Maybe You Should Too!)</title>
      <dc:creator>Gregg Meluski</dc:creator>
      <pubDate>Fri, 11 Jan 2019 00:57:00 +0000</pubDate>
      <link>https://dev.to/gmeluski/why-i-warm-up-and-maybe-you-should-too-3ci7</link>
      <guid>https://dev.to/gmeluski/why-i-warm-up-and-maybe-you-should-too-3ci7</guid>
      <description>&lt;p&gt;&lt;em&gt;This post was originally published at &lt;a href="https://meluski.com/engineering/2019/01/11/why-i-warm-up-and-maybe-you-should-as-well.html"&gt;meluski.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Over the past year, I got in the habit of running first thing in the morning. No stretch - just wake up, step outside and go run. It's weird. I ran cross-country in high school and every practice we would stretch for at least fifteen as a warm-up. It made the whole endeavor seem heavy and eventually made me not want to run any longer.&lt;/p&gt;

&lt;p&gt;Last year I read "Living With a Seal" and realized that the extremely fit man training the author didn't warm up before runs. At all. I could get my head around that. Now I try and run at least five times a week if I'm not surfing or swimming. It's not far, but it gets the day started.&lt;/p&gt;

&lt;p&gt;I would never warm up for work, a place I over which I have marginal control in terms of intensity and volume of work. In contrast, running without a warm-up still affords me control over the pace and allows me to apply my best judgment for when things are ready to ramp up. Coding can be mentally strenuous, and when coupled with all the other types of thinking that comes with a typical development role, you could be talking a lot of context switches and uninterrupted periods of mental strain. It actually seems kind of crazy to just jump into work with no pretext - you can very easily have a sudden, dramatic acceleration capable of veering in multiple directions. &lt;/p&gt;

&lt;p&gt;There was a nugget in "The Clean Coder" about doing fifteen minutes of warm-up and cool-down at the start and end of each day. And that resonated. So I started making time to warm-up with a coding exercise each day. &lt;/p&gt;

&lt;p&gt;I really like it, for a few reasons:&lt;/p&gt;

&lt;p&gt;At least one part of my day is focused on my programming skills. There have been days where I barely code a lick or think deeply about a programming problem. It used to be upsetting if I spent the day in meetings or didn't get to work on a problem. Coding is a familiar space for me and my brain, and it's where I'm likely to find a sense of flow and rhythm. My job doesn't owe that to me on a regular basis, so I can get my fill even if the day is about to rule out the possibility of making time to code.&lt;/p&gt;

&lt;p&gt;Warm-ups tend to be algorithmic problems, which keeps that mental muscle sharp. How many times am I challenging myself to think algorithmically in a typical week?  The answer is not many. &lt;/p&gt;

&lt;p&gt;Personally, I think there's a specific pleasure in doing deeper programming work and making the code as clean and efficient as possible. I realized I would only consciously sharpen my skills around algorithmic thinking if I was looking for a job or randomly chanced upon a class that piqued my interest. Isn't that silly? For a programmer, that's silly.&lt;/p&gt;

&lt;p&gt;Recently I have been wanting to learn Rust, and I had great intentions: I would browse code bases and compile stuff, I would read articles here and there, but I was stalling out on it. So I've decided to use Rust as my language of choice for my warm-ups. I use that time to learn the intricacies and foibles of a new language other than the one with which I am a bit too comfortable. Working with a different language helps hold a mirror to the things which I take for granted in Javascript. I appreciate that.&lt;/p&gt;

&lt;p&gt;Finally, something I think ties the previous points together on a higher level: Life should be about growth, and you can't always count on your job to challenge or grow you. There are going to be times when moving the project or company forward is more important than what you feel keen to work on. Having a small practice centered around the core premise of the job helps keep the momentum going through those times. Essentially, warms ups are a form of self-direction for a programmer, a skill worth developing in its own right.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>Just Write It Down</title>
      <dc:creator>Gregg Meluski</dc:creator>
      <pubDate>Thu, 27 Dec 2018 16:09:00 +0000</pubDate>
      <link>https://dev.to/gmeluski/just-write-it-down-5n8</link>
      <guid>https://dev.to/gmeluski/just-write-it-down-5n8</guid>
      <description>&lt;p&gt;&lt;em&gt;This post was originally published at &lt;a href="https://meluski.com/engineering/2018/12/27/just-write-it-down.html"&gt;meluski.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you want to know what brought me to the idea of creating one page product pitches, I would start with pain. More specifically it came down to choosing which form of pain I wanted to endure. Did I want the hot, burning intense pain of a missed requirement, gambling that we've somehow hit all our angles during the course of discussing our project requirements, or do I want the foggy, weird pain of backing out of my common routine and tacking on another preparatory step?&lt;/p&gt;

&lt;p&gt;It's tempting to barrel forward and take the risk that we've got it all figured out without documenting our thought process. And maybe it's not the current project that has the hiccup, maybe it's the next or the one after that. The team may be honing in on release when someone says "well, wait a minute, why didn't we do [insert brand new thought here]?".&lt;/p&gt;

&lt;p&gt;It seems like the proximity to shipping sends up a signal flare to tangential players in the project, the interested but busy, the partially invested. And due to their distance, they have a different perspective. And that can feel painful.&lt;/p&gt;

&lt;p&gt;But you WANT that perspective, because the more points of view in the pool of product conceptualization, the better the product outcome. And what's painful is what has been spent on the personal, mental, emotional and even physical levels (yes, being hunched over a keyboard is a physical investment). Sunk cost fallacy? Sure, but there is real attachment to things that have already been built. &lt;/p&gt;

&lt;p&gt;There's the significant pain of having to reconfigure the mental model of how this particular feature works. It takes time to unlearn, to incorporate new information into the existing design.&lt;/p&gt;

&lt;p&gt;So this foggy, weird pain of doing something new and different? Suddenly this is an acceptable trade off.&lt;/p&gt;

&lt;p&gt;This pain is really a manifest of my selfishness, my belief that my current workflow is acceptable. I write things down on a pad, it's chicken scratch. I write unit tests, but that's not easily circulated to non developers. I have check ins with my team, however those are verbal and ephemeral - but anyone who has missed a meeting has missed the information included in said meeting. &lt;/p&gt;

&lt;p&gt;Gee whiz, when it comes to the most basic, essential, and easily digested form of communication and explanation, my mind body and soul resists. &lt;/p&gt;

&lt;p&gt;In order to close the gap between the concept of a product doc and an actual implementation, there are a few additional hurdles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If I'm going to write a product document, where does it go? &lt;/li&gt;
&lt;li&gt;Are people going to read this? (aka am I shouting into the void, and if so, why am I wasting my time?)&lt;/li&gt;
&lt;li&gt;Is there some sort of structure to this, and what is it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For starters, I like to compose locally and privately. I don't know what it is, but there is a feeling that when I am dumping out my initial ideas and organizing them, I don't really want to feel as if someone can look over my shoulder, digitally or otherwise. So I like to at least start with a locally stored (or personal, cloud-based) version that I can use for both refining and future reference.&lt;/p&gt;

&lt;p&gt;I did stumble with how to make the document available for public consumption. An email with either the product document inlined or attached could be used as the thread to track comments on the product, but it does get hairy if people need to be looped in later. A shared Google Document will solve that issue and allow folks to do inline commenting in a bit more organized fashion. Personally, I feel any tool which enables circulation and an organized conversation will provide an acceptable outcome. &lt;/p&gt;

&lt;p&gt;I get so many things links and emails where I do quick scans and then forget. Maybe it's a signal to noise ratio thing - there's a lot of information going around in a company of any size, and sometimes the decision as to what is critical and what is deletable is a snap judgement. But there are certainly things that I care about, especially things that effect my own work. There's a lot to explore when it comes to keeping people informed without overwhelming them, but in this case I did the manual work of making a &lt;code&gt;People&lt;/code&gt; section in the document and thought through who might actually care about this project.&lt;/p&gt;

&lt;p&gt;I'd like to throw this thought in before proceeding - writing the document itself is informative for the writer, even if no one else reads it. &lt;/p&gt;

&lt;p&gt;For a document of this nature, having a templated structure can make it easy to get started the next time. After bouncing around some saved articles in Pocket and looking at some of my previous (failed) attempts at this approach, I landed on the following headings. This list is broad and there is potential overlap between topics, but in my opinion it is more efficient to eliminate and combine sections as I write than to have to create a section heading and reorganize. Hopefully this list helps anyone stumbling around the vagaries of product write ups:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Problem Definition
Wider Context
Goals
Scariest Assumptions
Unknowns / Issues
How Will This Be Tested?
Is There Effort / Approval Required From Other Teams?
How Will We Measure Success?
People
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;It's still too early for me to determine whether this is an effective organizational practice, especially since I was originally solving for the siloing that came with a recent technical reorganization. &lt;/p&gt;

&lt;p&gt;Time will tell? For now, I'm happy to reap the benefits of self-organization that come along with it.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Write Some Tests. For Your Health!</title>
      <dc:creator>Gregg Meluski</dc:creator>
      <pubDate>Tue, 04 Dec 2018 17:55:00 +0000</pubDate>
      <link>https://dev.to/gmeluski/write-some-tests-for-your-health-3k0j</link>
      <guid>https://dev.to/gmeluski/write-some-tests-for-your-health-3k0j</guid>
      <description>&lt;p&gt;Hi. I'm here to tell you something that you maybe don't want to hear. But that's my role as an opinionated person who happens to work in technology (or so I was raised to believe that having an opinion is good, but I think that's very context dependent). &lt;/p&gt;

&lt;p&gt;You should be writing tests. Oh my. I know, you've heard it all before, right? Often times it comes forth as some type of obligation to the greater good, or that this is just what good developers do. Who are these "good" developers? The pedantry! Who has time for this crap! &lt;/p&gt;

&lt;p&gt;Well most of all, you should do it for YOU. Because you want a saner professional existence, you want to build your technical chops, and you want your teammates to be able to understand what you contributed without having to get pinged to oblivion and back, each time explaining some facet of your understanding and implementation. Doesn't that sound great?&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand your codebase and chosen language
&lt;/h2&gt;

&lt;p&gt;This is a very practical driver for adopting a testing ethos.  Building out tests and getting the code to run has often forced me to dive into the technicalities of my work, and enabled me to approach intended outcomes from differing angles. It forces me to break up larger methods into smaller ones, and along the way I find myself comprehending the existing code base in a way I wouldn't by just jumping in and building on top of it. I notice that having a passing test enables me to refactor and reuse existing code with higher levels of certainty. If the test breaks, I can revert it, go back and figure out where I went wrong. &lt;/p&gt;

&lt;p&gt;A test enables the conceptualization of the end goal and creates space for utilization of existing language features. It holds the end goal in place and frees the writer to find out, hey, does the language natively support  in pursuit of our goal? If not, is there a library out there, or a pre-designed solution? &lt;/p&gt;

&lt;p&gt;Or maybe it's worth trying to integrate a framework feature I've been hearing about and have been meaning to explore. No matter what path is chosen, the test provides consistent feedback as to whether what's being attempted is moving the code closer to the goal. Even when it passes, the writer becomes free to try new things, see if it breaks the test, and explore how it creates that breakage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Externalize your inner thoughts and processes
&lt;/h2&gt;

&lt;p&gt;So great. There are tests, and we've made them pass. Dependent upon the testing framework, now your co workers can (easily?) read the tests to comprehend just what the heck this code is supposed to do. No test is going to bestow complete and total understanding, but the absence of a test deprives a third party of another avenue for contextualizing the code. That's valuable both in the PR stage and when adding a fix or feature to the code.&lt;/p&gt;

&lt;p&gt;By writing out the tests, you're also explaining your own logic to yourself and giving yourself an opportunity to revise. It's like a journal. But a work oriented, extremely technical journal. Writing out these tests will also tie into your general writing skills. If you can express yourself through the magic of test descriptions, then your general communication tool set is getting a kicker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Be more confident and, if possible, happy at work
&lt;/h2&gt;

&lt;p&gt;As someone who is more senior in a company, I will get thrown into a problem or an existing patch of code with which I have to build a sense of comprehension. Chances are other senior developers or code owners are busy with other projects, so this turns out to be a bit more stressful, as it's easy to break code you don't fully grasp. &lt;/p&gt;

&lt;p&gt;If someone has done me the service of building out the tests, I can run them, make a change and run again. If it breaks, I can easily revert. This really enables me to focus on the changes I need to make without trying to understand all the side effects - when the tests break then I know I have some exploring to do. &lt;/p&gt;

&lt;p&gt;If there are no tests, I can feel a lot better about this situation by harnessing the code as it exists, THEN making my changes. See? I'm less stressed already. &lt;/p&gt;

&lt;p&gt;When its a new problem, building out tests also helps create a mental scaffolding. The tests help build little chunks of understanding around what is happening, and offloads the mental juggling that often comes with designing the logic. When something is properly harnessed, suddenly it no longer needs to reside in the brain, which is now free to think of other things. Most of the time this is going to be more coding concepts, but better to be reading, understanding and externalizing concepts for later reference as opposed to the wearying process of trying to keep it all in your brain. &lt;/p&gt;

&lt;p&gt;There you have it. So write some tests. Or don't. Because really, it's about helping yourself in the long run!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://meluski.com/engineering/2018/12/04/do-some-tests.html"&gt;meluski.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>testing</category>
    </item>
    <item>
      <title>Stay Alive</title>
      <dc:creator>Gregg Meluski</dc:creator>
      <pubDate>Mon, 26 Nov 2018 19:54:36 +0000</pubDate>
      <link>https://dev.to/gmeluski/stay-alive-iaj</link>
      <guid>https://dev.to/gmeluski/stay-alive-iaj</guid>
      <description>&lt;p&gt;I read somewhere that as you go up levels in your organization, the balance of what you control and what you cannot gathers more in the "what you cannot" part of the equation. Becoming an engineering manager, for me, became an example of favor of this idiom. For this particular position, I had to be more in touch with outside influences than I ever had before.&lt;/p&gt;

&lt;p&gt;As an IC, a lot of my tech knowledge was a result of decisions made by people with greater influence in the company. Generally speaking, an IC may be great with a particular technology, but that choice of technology is made someone at a higher level who then found the relevant persons. ICs can argue all day about particulars, it has been a rare case when a technology choice's success and failures rested with someone who wasn't on the management or executive level.&lt;/p&gt;

&lt;p&gt;For a long time I was dependent on my personal network and co-workers to keep abreast of important developments in the field of web engineering. By choosing organizations that valued applying new technologies, it was likely there would be ongoing internal sharing and debate about tech, driving my knowledge forward. I searched for resources on an infrequent basis, as information came to me by the natural process of going to work and spending time with my peers.&lt;/p&gt;

&lt;p&gt;Then I became an engineering manager. Top down information would become more of the managerial and organizational bent than the technological. I was also going to become more isolated from my direct peers: I had them, but we all spent more time focusing on things internal to our teams.&lt;/p&gt;

&lt;p&gt;Assuming the mantle of engineering manager also meant that I took on a greater piece of technology choice and ownership. This meant I had less time to explore technology deeply, and also had to be evaluating things on a level beyond "it appeals to me for [insert highly subjective and debatable reason]". So I began building some references, and I'll neatly put them together here in what I might call a "foundational" order - the earlier a category, the more likely it a long-term reward structure which you can use to build knowledge upon at the cost of being less immediately relevant to what is happening in the moment.&lt;/p&gt;

&lt;p&gt;I certainly didn't come to them this way. It was more like throwing everything into a pile and eventually reshaping the pile in a more structurally sound way when I realized it had grown beyond my comprehension.&lt;br&gt;
&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Books
&lt;/h2&gt;

&lt;p&gt;If you look long enough into any type of internet recommended path to self-improvement, you are invariably going to come across someone who essentially says &lt;em&gt;YOU MUST READ&lt;/em&gt;. I agree, and it is unequivocal. The other suggestions here are great, but the time, effort and energy that goes into publishing a book actually means something when it comes to drawing information and ideas from the content. Information on how to find the time or how to improve the quality of your reads is a different tact than I am going for here, so I am happy to leave it at this:&lt;/p&gt;

&lt;p&gt;TL;DR: You have no choice. You have to read.&lt;/p&gt;

&lt;p&gt;That being said, there is way more to being a part of the modern programming paradigm than 600 page tomes on Test Driven Development and the like (though they still remain critical). There are books about product development, books on UX, books on management theory, books on goal systems. This is all the stuff that becomes fundamental to the things that come later on in the list. Without this base, it increases the likelihood of some type of intellectual thrashing - not knowing which technologies to chase, trying to chase all of them, and eventually flaming out.&lt;/p&gt;

&lt;p&gt;But where to find recommendations that separate the wheat from the proverbial chaff?&lt;/p&gt;

&lt;p&gt;Keep reading.&lt;br&gt;
&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Newsletters and Articles
&lt;/h2&gt;

&lt;p&gt;For the longest time, a reliable source of timely and relevant articles eluded me. Teammates would show up with some information about something that was new, or different, or cutting edge and I would be second (or third or fourth) to the party. Moving up in the organizational structure meant that I had to be a little further ahead in the knowledge queue. I had to be deciding whether said technology was relevant or even useful, and that requires time.&lt;/p&gt;

&lt;p&gt;When I went to work for a publication, the the magic word amongst many product people at the time was this little thing called newsletters. And then I realized, yes, technology newsletters do exist! And just as I came to appreciate the magic of news based newsletters, technology based newsletters were EVEN BETTER BECAUSE THEY CONTAINED ACTIONABLE INFORMATION.&lt;/p&gt;

&lt;p&gt;So someone was out in the universe, curating all these incredibly relevant and interesting articles into one place, so I no longer had to hunt them down piecemeal. And it was not just one person, and it was not just one subject. It was the multitude of subjects that had suddenly become incredibly relevant to my role. So I subscribed. And subscribed again. And subscribed some more. All until I had a jammed up mailbox and had little choice but to let go of some of them.&lt;/p&gt;

&lt;p&gt;Here's a few that have survived my inbox test. My apologies if you have trouble finding the place to subscribe, some require a log in (dev.to comes to mind) in order to be added to a mailing list.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.mindtheproduct.com/" rel="noopener noreferrer"&gt;Mind the product&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://softwareleadweekly.com/" rel="noopener noreferrer"&gt;Software Lead Weekly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/"&gt;Dev.to&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mindtheproduct.com/product-management-newsletter/" rel="noopener noreferrer"&gt;Prioritised&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nodesk.co/" rel="noopener noreferrer"&gt;NODESK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://startup.curated.co/" rel="noopener noreferrer"&gt;Startup Curated&lt;/a&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Twitter
&lt;/h2&gt;

&lt;p&gt;Ah. Yes. The insanity. The chaos which refuses to be tamed, spilling out into the universe unbridled and full of passion. Unless you care to click more than one or two times in the app and start creating lists. This is also something I picked up from a book called Play It Again written by the journalist Alan Rusbridger. It's also worth noting that this is another example of one category feeding a second&lt;/p&gt;

&lt;p&gt;Lists + Tweetdeck? Yes! There were a couple things which didn't have twitter accounts, but had RSS feeds, and that took a little doing to capture their information in a twitter feed. Eventually I set up a new twitter account that would tweet out the latest RSS publishing using IFTTT, then added that account to the relevant Twitter list. This was a great way to stay on top of the more immediate, exciting stuff without having to chase things down. I mean, it's like the information is coming to ME the whole time. Revelatory, for sure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fmeluski.com%2Fassets%2Fimages%2Ftweetdeck.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fmeluski.com%2Fassets%2Fimages%2Ftweetdeck.png" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, I got into the habit of putting my lists to the left hand side of Tweetdeck, pushing my main timeline further and further into oblivion, where it belongs. Not because it's bad (though it can get bad based upon the events of the day or week), but because it is an almost infinite stream of engaging and sometimes enraging information. I like to follow smart, interesting, opinionated people. I like politics and governance, so you can see how consistently engaging with my timeline instead of my lists can take me away from what I need to be doing (learning about things relevant to my job, remember?).  So yes, I have curated lists which dominate the left hand side of my screen.&lt;/p&gt;

&lt;p&gt;When it comes to technologies, it pays to follow certain projects or major contributors to said projects. When it comes to development in general, I like to choose companies and people who are doing something I find interesting. If the business ideas are interesting, so chances are their product and technology ideas are interesting, or at least worthy of talking about. And ultimately that's what I am looking for out of this level.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="http://meluski.com/engineering/2018/11/11/staying-alive.html" rel="noopener noreferrer"&gt;Meluski.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
