<?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: matt kocaj</title>
    <description>The latest articles on DEV Community by matt kocaj (@mattkocaj).</description>
    <link>https://dev.to/mattkocaj</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%2F60851%2F678a40c6-9595-41e2-8723-d0bd93c26c74.jpg</url>
      <title>DEV Community: matt kocaj</title>
      <link>https://dev.to/mattkocaj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mattkocaj"/>
    <language>en</language>
    <item>
      <title>What Junior Devs Need To Know About Complexity</title>
      <dc:creator>matt kocaj</dc:creator>
      <pubDate>Fri, 28 Jul 2023 04:22:16 +0000</pubDate>
      <link>https://dev.to/mattkocaj/what-junior-devs-need-to-know-about-complexity-233n</link>
      <guid>https://dev.to/mattkocaj/what-junior-devs-need-to-know-about-complexity-233n</guid>
      <description>&lt;p&gt;I don't remember how but I stumbled onto &lt;a href="https://grugbrain.dev"&gt;grugbrain.dev&lt;/a&gt; last week.&lt;/p&gt;

&lt;p&gt;It's gold. &lt;/p&gt;

&lt;p&gt;I could literally end this post on the line above. But I did wonder about how junior devs might find this content. I personally find it to be amazingly written. It's just my kind of comedy with a dash of WAKE THE FUK UP NEO! 😆 But I'm not exactly sure whether a green engineer will understand much of it and gain the most value possible. So I wanted to add some of my thoughts. The following is just a commentary. I don't want to subtract anything at all, but if I'm lucky, maybe unpack things for a less-seasoned audience. &lt;/p&gt;

&lt;p&gt;Let's start with this section --&lt;/p&gt;

&lt;h2&gt;
  
  
  The Eternal Enemy: Complexity
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;apex predator of grug is complexity&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Complexity is quite literally the biggest threat to any software engineer and all of software engineering. Why? Well I'll try to uncover that below and close with a few of my own thoughts at the end.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;complexity bad  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Don't misunderstand this point. It's worth repeating. &lt;/p&gt;

&lt;p&gt;I actually struggled to agree with this a little and it was largely "semantics". But semantics are important because they convey meaning. Don't let someone criticise you because you're "getting hung up on semantics" - people who get hung up on semantics usually care about clarity. This might mean that they want to understand things deeply. Don't miss an opportunity to work with someone like this. &lt;/p&gt;

&lt;p&gt;There is this narrative in the software engineering community that roughly tries to draw a distinction between &lt;strong&gt;complexity&lt;/strong&gt; and that which is &lt;strong&gt;complicated&lt;/strong&gt;. That alone deserves a post all on it's own, but the short version for me is that I'm now ok with allowing them to exist in the same container. There might be an occasional reason why complexity is necessary. This is usually the hang up - how can you avoid something that you need? Now I wonder if this is just another problem solving activity. &lt;/p&gt;

&lt;p&gt;If you think you truly need complexity &lt;code&gt;n&lt;/code&gt;, then try to design it out. Try to reduce &lt;code&gt;n&lt;/code&gt; or delete it altogether. Remember, "&lt;a href="https://hammerproject.com/2022/11/17/smashing-entropy.html"&gt;the best part is no part&lt;/a&gt;".&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;say again:&lt;br&gt;&lt;br&gt;
complexity very bad&lt;br&gt;&lt;br&gt;
you say now:&lt;br&gt;&lt;br&gt;
complexity very, very bad&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Say it out loud even. If the guy across the desk from you gives you one of those "what a weirdo" looks, then link them to this post. Just be like "he told me too" while pointing at your screen. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;given choice between complexity or one on one against t-rex, grug take t-rex: at least grug see t-rex&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The subtlety here is that complexity can often be hard to recognise. This is especially terrifying when you realise that complexity is kinda glorified in our industry, particularly among younger engineers who are out to prove themselves. It's like lifting at the gym: if you can lift something heavy, you're cool right? Well, if you can build something hard, or solve a hard problem, or a complex problem, then you're cool right? Just get your flex on and show the world how great you are...?? 🤷‍♂️ I'm not saying that some engineers try to hide complexity on purpose. But there is a large cultural incentive to add it and because it hides in dark corners and is hard to see, its a very real problem. &lt;/p&gt;

&lt;p&gt;Training alone won't be enough to help you spot complexity. It comes mostly with time. But one signal is pain. If something feels harder than it should, then maybe it's too complex. Of course this is pretty subjective and a "gut feel" kind of thing. But soon you will learn to notice the sensation. Listen to it. &lt;a href="https://youtu.be/hVrIyEu6h_E?t=266"&gt;Search your peelings&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;complexity is spirit demon that enter codebase through well-meaning but ultimately very clubbable non grug-brain developers and project managers who not fear complexity spirit demon or even know about sometime&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I could be wrong, but I suspect that "non grug-brain developers" are actually "big brained developers" &lt;a href="https://grugbrain.dev/"&gt;as referenced elsewhere in the article&lt;/a&gt;. "non grug-brain developers" may also refer to junior or less-seasoned engineers. Or maybe devs that don't share some of Grug's qualities, like humility. Ego is certainly a common trait in the software engineering industry. "It's ok to be wrong" is an important life lesson. But applying this early in your SWE career will give you a significant advantage. &lt;/p&gt;

&lt;p&gt;As I mentioned earlier, complexity is popular in our industry at times. This may be part of the reason why its not respected or even feared. Fear is important - it keeps you from falling off the edge of the cliff. It's a signal about danger. Complexity &lt;code&gt;==&lt;/code&gt; danger. If an engineer has a hard time properly respecting complexity then a non-technical person like a project manager may find it harder still. &lt;/p&gt;

&lt;p&gt;Keep in mind that as a new engineer, you won't know how to spot complexity at times. You often need a wide variety of experiences to see how complexity manifests in different contexts to attribute patterns to its appearance. There are few simple ways around this. You will learn over time. Some developers can't see it [yet]. There's no shame in this. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;one day code base understandable and grug can get work done, everything good!&lt;br&gt;&lt;br&gt;
next day impossible: complexity demon spirit has entered code and very dangerous situation!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is obviously an exaggeration, but complexity can lie in wait so well that it can appear to jump out of nowhere. It's the &lt;a href="https://en.wiktionary.org/wiki/see_the_forest_for_the_trees"&gt;forrest for the trees&lt;/a&gt; thing. Or simply that moment when you take a step back because you've been &lt;a href="https://digitalcultures.net/slang/in-the-weeds/"&gt;in the weeds&lt;/a&gt; on a particular thing for so long that you don't see what's happened at a macro scale. &lt;/p&gt;

&lt;p&gt;The other thing to call out here is that once complexity has taken hold, it can literally grind productivity to a halt; or at least make changes extremely slow. Often this comes about purely from the next developers inability to understand whats going on easily. Most engineers don't write code. That's not what we do for work. A programmers primary time sink is reading code, not writing it. So it's critical that you as a developer can help another developer read and understand what's going on. That's not just scoped to your function or file, but the application and system as a whole. Complexity will destroy this ability to read and understand. And since engineers are typically clever people, they will work around complexity at times not even realising that said workarounds are increasing the level of complexity! This doesn't seem wrong at the time because that developer has a good understanding in their head. But the next guy? Good fuken luck!&lt;/p&gt;

&lt;p&gt;EDIT: One thing I didn't really consider properly is how "exponential" this can grow. I guess this makes sense as to why it can &lt;em&gt;feel&lt;/em&gt; like it happens overnight. I want to give this more thought. Grug recommends: &lt;a href="https://htmx.org/essays/complexity-budget/"&gt;Complexity Budget&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;grug no able see complexity demon, but grug sense presence in code base&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even experienced engineers can't often put their finger on the exact source or target of the complexity. Sometimes it's a sense or a gut feeling. I've seen developers cringe, or curl up their face. It's an instinct that you develop over time and various projects. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;demon complexity spirit mocking him make change here break unrelated thing there what!?! mock mock mock ha ha so funny grug love programming and not becoming shiney rock speculator like grug senior advise&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is an analogy to the "complexity spirit demon" having an intelligence of its own. It's genuinely hard to counter this thought if I'm honest. I joke a lot, but here I am very serious: given that the complexity is almost always sourced from another person, I don't think its a stretch to describe the "demon" as an intelligent entity. Think I'm crazy? Well, if you wanna go deep on this then consider that &lt;a href="https://youtu.be/DxL2HoqLbyA"&gt;the universe might actually have a tendency to entropy or disorder. And we humans facilitate this&lt;/a&gt;. So every line of code that's added is in fact just a little more potential for complexity and peer-induced pain. This is part of the reason why experienced developers love deleting code so much. Sometimes you just don't know where the disease is and you wanna rip large chunks out in the desperate hope that your artillery strikes will land on the enemy. &lt;/p&gt;

&lt;p&gt;And other times, you just wanna start again from scratch. &lt;/p&gt;

&lt;p&gt;Have you ever seen a senior engineer crying in the corner?&lt;br&gt;&lt;br&gt;
My money is on complexity.&lt;br&gt;&lt;br&gt;
I don't think Grug has chosen the word 'demon' lightly. &lt;/p&gt;

&lt;p&gt;I'm not entirely clear on what "shiney rock speculator like grug senior advise" means but I suspect its something to do with the fact that getting paid well, often doesn't counter the pain that one can endure at the hands of complexity. I actually love software engineering as a creative pursuit all on its own. Sure I also need to feed my family but there are some things in this world that will threaten even the intrinsic love you hold for something: complexity is that to software engineering for many of my seasoned friends and colleagues. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;club not work on demon spirit complexity and bad idea actually hit developer who let spirit in with club: sometimes grug himself!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes you can't simply attack the complexity directly. I've seen this time and time again. We engineers love to make cool stuff. Sadly tho, most of the "cool" things we build are not necessary, or are unnecessarily complex. This is where attacking the complexity becomes attacking another person. This then becomes a human relationship problem. And if you you thought being a programmer meant you could escape human relationship problems: you'd be wrong!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;sadly, often grug himself&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It wouldn't be the first time I built something in an app and then later ripped it out myself due to complexity. It hurts and is humbling. So do it often! That's how you grow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;so grug say again and say often: complexity very, very bad&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The point can't be drilled hard enough. This is why I wanted to annotate the article with my thoughts. I'm sure I'll be commenting on this theme for the rest of my career, probably at the pain of my grandchildren when I'm old and can't remember what I said 10 seconds ago. Hi guys! ❤️&lt;/p&gt;

&lt;p&gt;If you're new to software engineering, and you can't see how all this fits in to your life, work or just the space in general then remember this:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Complexity is real and it's hunting you right now. But as an inexperienced engineer, you're vulnerable to its guile and tricks. It's going to tempt you with shiny packages and tools. It's going to bend your mind and titillate your taste buds at conferences and with awesome presentations. Soon you will think you know more than someone else and next thing you know, you're writing some "cool" code that will impress all of your peers. It has you now. You're its bitch!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The best counter to complexity as a new engineer is humility and open mindedness. I wish I applied more when I was younger and the more experienced I get, the more I try to focus on these things. Learn from clever peers. Learn from experienced engineers. &lt;/p&gt;

&lt;p&gt;May The Force be with you. 🙏&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;Thank you to JakeGPT, Ruegen and Grug himself for edits, comments and feedback.&lt;br&gt;&lt;br&gt;
Originally posted to &lt;a href="https://hammerproject.com/2023/07/28/complexity.html"&gt;hammerproject.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>juniordev</category>
      <category>complexity</category>
      <category>advice</category>
    </item>
    <item>
      <title>Key learnings after 10h diving into Lambda, js and Github Actions</title>
      <dc:creator>matt kocaj</dc:creator>
      <pubDate>Fri, 06 Jan 2023 08:08:05 +0000</pubDate>
      <link>https://dev.to/mattkocaj/key-learnings-after-10h-diving-into-lambda-js-and-github-actions-4g3i</link>
      <guid>https://dev.to/mattkocaj/key-learnings-after-10h-diving-into-lambda-js-and-github-actions-4g3i</guid>
      <description>&lt;p&gt;I recently heard that you can &lt;a href="https://youtu.be/JPCJEtMXOu0?t=1347" rel="noopener noreferrer"&gt;learn almost anything if you spend 20h of unbroken, concentrated effort&lt;/a&gt;. Of course you won't become an expert and everyone has to pee, so the statement comes with some obvious caveats. But I thought I would try something new and dump most of a weekend onto a small project. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Story
&lt;/h2&gt;

&lt;p&gt;I've been suffering from a very not-painful first-world problem lately. 😋 When I get out of my car and go into the house I usually have my hands full and I want to lock the car behind me. To overcome this, I would like to ask Siri to &lt;a href="https://youtu.be/awui-L4J_p8" rel="noopener noreferrer"&gt;lock the car&lt;/a&gt; instead of opening the app and tapping it. I've discovered that the Tesla app needs to be open for the car to take commands via Siri. This won't help when the phone is in my pocket locked and all I have to access "hands free" is the Apple Watch. So I asked myself &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can I create a web endpoint that I can call with &lt;a href="https://support.apple.com/en-gb/guide/shortcuts/welcome/ios" rel="noopener noreferrer"&gt;Shortcuts&lt;/a&gt; which can be invoked using Siri?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Turns out I can. So I set out to create an endpoint that is long enough to be "secure" so that I could write a simple Shortcut that I could use with Siri from my Apple Watch while my hands were full. Something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws.thingy.com/lambda/lock-car?secure-token=reallylongassrandomstringthatyoucantguesssothisiskindasecure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After knocking out a README with a set of goals and a list of TODOs to check off as I made progress, I spent about 10 hours over a weekend trying to get something to work. I used &lt;a href="https://www.npmjs.com/package/serverless" rel="noopener noreferrer"&gt;&lt;code&gt;serverless&lt;/code&gt;&lt;/a&gt; for making &lt;a href="https://aws.amazon.com/lambda/" rel="noopener noreferrer"&gt;Lambda&lt;/a&gt; easier, &lt;a href="https://github.com/features/actions" rel="noopener noreferrer"&gt;Github Actions&lt;/a&gt; for the deploy pipeline and store my credentials; and sadly I rolled my own &lt;code&gt;access_token&lt;/code&gt; refresh logic because I couldn't find a helper that just did that for me! wtf!? &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/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxbscjsnxtdox7pq94of.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/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxbscjsnxtdox7pq94of.png" alt="using a README as a backlog. do it!" width="800" height="931"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I now have a Shortcut that works using Siri; a Lambda that can refresh it's own token and a reliable way to lock my Tesla without my hands. It even speaks the text response from the HTTP call: "car is locked" which is kinda satisfying.&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/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fizi8j9dtnnd9pwfaby6f.jpg" 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/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fizi8j9dtnnd9pwfaby6f.jpg" alt="the final product" width="395" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways for Me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.serverless.com/" rel="noopener noreferrer"&gt;&lt;code&gt;serverless&lt;/code&gt;&lt;/a&gt; is amazing!&lt;/strong&gt; Sure it's the first thing I found. But it made it super easy to set up my js project locally, run it locally and deploy it from the command line. I can't understate the importance of a fast feedback cycle. Since I lack a lot of debugging experience with vscode/ts/js it is important that I can &lt;code&gt;console.log&lt;/code&gt; easily and run locally to try/fail/repeat. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftvukme9psx225zf6pmun.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/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvukme9psx225zf6pmun.png" alt="the Quick Start in the README is super terse with serverless" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lambdas are pretty quick.&lt;/strong&gt; Cold starts from the Shortcuts app can be about 5s end-to-end and this includes a token refresh. When the lambda is warm and using the new &lt;code&gt;access_token&lt;/code&gt;, it can be as quick as ~1100ms according to CloudWatch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fkx2wbyovfs2f60f3z9le.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/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkx2wbyovfs2f60f3z9le.png" alt="logs showing the token refresh on a cold call" width="476" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The js was pretty straightforward and I'm no js/ts expert. I was cautious and used callbacks instead of Promises. So I should try that next time. 😋&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actions start and run &lt;em&gt;really&lt;/em&gt; fast!&lt;/strong&gt; Having come from the "old days" where pipelines were &amp;lt;10m to large microservices codebases where pipelines are back to running ~30m, it is super refreshing to have a pipeline which is not only short in terms of duration (1-2m total) but kicks off within a couple of seconds of my pushing my code to &lt;code&gt;master&lt;/code&gt;. 🥰&lt;/li&gt;
&lt;li&gt;I didn't feel the need to use &lt;a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html" rel="noopener noreferrer"&gt;Parameter Store&lt;/a&gt; as the credentials in Secrets are one way and &lt;code&gt;serverless&lt;/code&gt; hides them in the logs when mapping params (or is it &lt;a href="https://docs.github.com/en/actions/security-guides/encrypted-secrets#accessing-your-secrets" rel="noopener noreferrer"&gt;actually Github doing this?&lt;/a&gt;). I accept that for a "professional" application, I wouldn't do it this way, but it's fine given the context. Feel free to tell me why I'm wrong. 😋&lt;/li&gt;
&lt;li&gt;I wanted to create a "revocation" call to pair with this automation but I changed my mind on that. Mostly because the commonly accepted approach with an integration platform with API credentials is to reset the password on the primary account and this invalidates all derived keys. I tested this and it works so I think that's fine for now. Yes, I have a production key stored in Github and as an ENV var in AWS which is as good as my Tesla password, but the attack surface is pretty limited I think. There are other apps which ask you to authenticate, and then they persist refresh tokens. I don't think my solution is worse or creates more risk than those.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Whats Next?
&lt;/h2&gt;

&lt;p&gt;Here are just some random thoughts about things I might want to change or improve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;setting up a new Shortcut to start charging the car&lt;/li&gt;
&lt;li&gt;how will it be structured in Lambda?&lt;/li&gt;
&lt;li&gt;how can I share code like the token refresh logic between two functions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope you found this interesting. I'm constantly amazed at what can be accomplished if you set your mind to a clear goal.&lt;/p&gt;




&lt;p&gt;Originally posted on &lt;a href="https://hammerproject.com/2023/01/06/lambda-js-gh-actions.html" rel="noopener noreferrer"&gt;hammerproject.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Smashing Entropy</title>
      <dc:creator>matt kocaj</dc:creator>
      <pubDate>Thu, 17 Nov 2022 17:47:38 +0000</pubDate>
      <link>https://dev.to/mattkocaj/smashing-entropy-36a7</link>
      <guid>https://dev.to/mattkocaj/smashing-entropy-36a7</guid>
      <description>&lt;h2&gt;
  
  
  tl;dr
&lt;/h2&gt;

&lt;p&gt;Entropy will destroy your business and your product if you do nothing. So in order to prevent this doomed future you will need to fight it.&lt;br&gt;
Fighting entropy requires an aggressive approach to keeping things small and getting feedback fast.&lt;br&gt;
However you will encounter resistance in the form of people. Without a smart person in a powerful position with a big hammer, you may only have moderate success.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is Entropy?
&lt;/h2&gt;

&lt;p&gt;Entropy is often described as the measure of disorder or the loss of information. In the case of information and software systems you can think of information "loss" as the signal to noise ratio (&lt;a href="https://en.wikipedia.org/wiki/Signal-to-noise_ratio" rel="noopener noreferrer"&gt;SNR&lt;/a&gt;). Values &amp;gt; 1 mean more signal than noise.&lt;/p&gt;

&lt;p&gt;You don't have to change the quantity of the signal for the SNR to drop. You only need to increase the noise. At the beginning, a small MVP or a simple product might gain traction because it's small, nimble, and solving a problem really well. It's fast and clean and only does what it absolutely needs to. The business around this product is also lightweight, mirroring the elements of the application architecture: simple, easy to understand, fast and agile. But noise is introduced in terms of process and systems. Code is added as scale increases. The absolutely critical elements that the product and business require to run are the "signal". The signal grows more and more slowly. The noise grows more and more quickly. The SNR drops. This noise is entropy. You need to fight entropy.&lt;/p&gt;

&lt;p&gt;I'm not talking about Technical Debt here. Much has been written on this subject. But I will say that Technical Debt is a form of entropy. Once you have a strategy to combat entropy you also solve for Technical Debt. &lt;/p&gt;

&lt;p&gt;Entropy is the gravitational like force which pulls you, your team and your whole company in the direction of "more". It’s your job to extract, disassemble, dissect and prune back this “more” to get to the signal: the critical and essential parts you need to &lt;a href="https://www.amazon.com/Lean-Startup-Entrepreneurs-Continuous-Innovation/dp/0307887898" rel="noopener noreferrer"&gt;ship the next iteration and validate what you think you know&lt;/a&gt;. &lt;/p&gt;
&lt;h2&gt;
  
  
  How Do I Squish This Thing?
&lt;/h2&gt;

&lt;p&gt;Apply Elon's &lt;em&gt;5 Steps To Design&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The following video clip captures Elon Musk enumerating his 5 step design methodology. The 5 steps listed below are not terse in this interview clip. They're interleaved between highly specific examples, much of which relates to rockets at SpaceX and cars at Tesla. Stick it out: the "concrete example" nature of the conversation really drives home the value of each step and why the order of the steps is critical.&lt;/p&gt;

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

&lt;p&gt;source: &lt;a href="https://www.youtube.com/watch?v=t705r8ICkRw&amp;amp;t=805s" rel="noopener noreferrer"&gt;Starbase Tour with Elon Musk PART 1 // Summer 2021&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Elon's Five Steps To Design
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Make the requirements less dumb&lt;/strong&gt;.

&lt;ul&gt;
&lt;li&gt;Each requirement/constraint must have a &lt;em&gt;person&lt;/em&gt; and not a &lt;em&gt;department&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;That person must own the requirement. &lt;/li&gt;
&lt;li&gt;You can't challenge a requirement if it's a person who no longer works at the company or if it's a department which isn't a person. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delete the part or process.&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"if you're not adding things back at least 10% of the time, you're not deleting enough"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplify or optimise.&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;"&lt;a href="https://youtu.be/t705r8ICkRw?t=1047" rel="noopener noreferrer"&gt;possibly the most common error of a smart engineer is to optimise a thing that should not exist&lt;/a&gt;" &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accelerate cycle time.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automate.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If these steps make intuitive sense to you then you're probably a good agent for change. The very next thing you might realise however is that you don't have the power to influence any/all of this. This is where you need the hammer.&lt;/p&gt;

&lt;h2&gt;
  
  
  So What Is The Key Ingredient?
&lt;/h2&gt;

&lt;p&gt;Andrej Karpathy made &lt;a href="https://youtu.be/cdiD-9MMpb0?t=5751" rel="noopener noreferrer"&gt;this statement in a recent interview&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I do think you need someone in a powerful position with a big hammer, like Elon...&lt;br&gt;
If no one has a big enough hammer, everything turns into committees, democracy within the company, process, talking to stakeholders, decision making... everything just crumbles.&lt;br&gt;
If you have a big person who is also really smart and has a big hammer, things move quickly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's a quick example of how things can be "unstuck" to move more quickly. Start small like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Not everything needs to be a committee. A quorum of two in a group of smart and experienced people is usually enough to make low impact decisions. Optimise for forward momentum.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Starting small is good. But if you need revolutionary change, or if your problems are so great or so systemic; or if the rate of progress is too slow, then you might need the big hammer.&lt;/p&gt;

&lt;p&gt;Who is that person in your company with the powerful position and the big hammer? &lt;/p&gt;

&lt;p&gt;If it's not you, then can you find that person?&lt;br&gt;&lt;br&gt;
Can you show them this article to test their appetite for &lt;a href="https://www.svpg.com/the-need-for-speed/" rel="noopener noreferrer"&gt;moving fast&lt;/a&gt; and making progress?&lt;br&gt;&lt;br&gt;
And if there is no one in this role, can you move yourself into it?&lt;/p&gt;

&lt;p&gt;"Challenge accepted!" I hear you say?&lt;br&gt;&lt;br&gt;
Good luck! 💪&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;Thank you to Hamish, Cam, Michael, Ryan, Ed, Colin, and Duane for reading drafts and providing valuable feedback. 🙏&lt;/p&gt;

&lt;p&gt;If you think it’s about time you had someone like this in your organisation, then &lt;a href="https://www.linkedin.com/in/cottsak/" rel="noopener noreferrer"&gt;hit me up&lt;/a&gt;. I might know someone 😉&lt;/p&gt;

&lt;p&gt;This article was &lt;a href="https://hammerproject.com/2022/11/17/smashing-entropy.html" rel="noopener noreferrer"&gt;originally posted on hammerproject.com&lt;/a&gt; but feel free to &lt;a href="https://news.ycombinator.com/item?id=33642239" rel="noopener noreferrer"&gt;discuss on HN&lt;/a&gt; or &lt;a href="https://www.linkedin.com/pulse/smashing-entropy-matt-kocaj" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discord</category>
      <category>github</category>
      <category>community</category>
    </item>
    <item>
      <title>Effective teams: When you’re an emotionally challenged developer</title>
      <dc:creator>matt kocaj</dc:creator>
      <pubDate>Tue, 11 Jun 2019 03:30:09 +0000</pubDate>
      <link>https://dev.to/mattkocaj/effective-teams-when-you-re-an-emotionally-challenged-developer-308</link>
      <guid>https://dev.to/mattkocaj/effective-teams-when-you-re-an-emotionally-challenged-developer-308</guid>
      <description>&lt;p&gt;I am an emotionally challenged developer!&lt;/p&gt;

&lt;p&gt;I’m not the most socially aware person in the world. I can be abrasive, totalitarian, “direct”, antagonistic, and even a plain ol’ asshole sometimes. Am I a bad person? No! Do people like me? Apparently - they invite me to lunch, drinks after work, ask how I am and generally want to be around me. I’m just saying that I have my strengths and weaknesses as everyone does. It’s important to be honest about these and if you’re confident enough to admit it to yourself, then try sharing it with a colleague - you’ll be amazed at the strength it can add to your working environment.&lt;/p&gt;

&lt;p&gt;So here are my three tips for being more effective in a team. These are especially useful to those who might find it harder to integrate into a team in a non-technical capacity –&lt;/p&gt;

&lt;h2&gt;
  
  
  Be Kind
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Talk with your peers.&lt;/li&gt;
&lt;li&gt;Join them for lunch.&lt;/li&gt;
&lt;li&gt;Buy them coffees.&lt;/li&gt;
&lt;li&gt;Let them buy you coffees (especially important for those of us who struggle with receiving gifts)!&lt;/li&gt;
&lt;li&gt;Be patient during discussions, even when things are frustrating you.&lt;/li&gt;
&lt;li&gt;Remember you don’t always need to win. Teamwork is about compromise just like every human relationship is. And for clarity: working in a software team is a collection of human relationships. Yes, you do “&lt;a href="https://www.youtube.com/watch?v=F3yZYkE32Ec&amp;amp;feature=youtu.be&amp;amp;t=59"&gt;do ships&lt;/a&gt;”!&lt;/li&gt;
&lt;li&gt;Try to participate as best you can. If you’re introverted, then it’s important to share your ideas and opinions occasionally. Others need to know you care if only a little. Please try to join in.&lt;/li&gt;
&lt;li&gt;And always remember: don’t interrupt others! It’s so rude. Respect is a cornerstone of human interaction. If you cut others off a lot or talk over them, then please begin to listen to yourself. Listen to others first who do it if you can’t hear it from your own mouth yet. It’s important to chip away at this one. And if you do manage to bring this under control, you’re not going to have others copy you because you’ve suddenly started to be polite. But that’s ok.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Be Vulnerable
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Share something about yourself with your peers. It doesn’t have to be in a group, it might be just one person you seem to trust a little. It doesn’t have to be “my marriage is failing” or “my pop just died” but it should be something that reveals a little about you and that you don’t “have it all together”.&lt;/li&gt;
&lt;li&gt;Show others you’re not perfect. “Nice catch” - on a Pull Request; or “my goof! I’ll fix the broken build”. In other words, it’s ok to show that you make mistakes. These are somewhat unnecessary from a pure knowledge transfer point of view, but we’re not dealing with machines here. People want to know that they can identify with you, that you’re human, imperfect and fallible like they are. It helps you to be more likable, and you do want to be likable.&lt;/li&gt;
&lt;li&gt;Ask for advice (even if you need to fake it a little). Find a way to have the junior dev help you even if you consider yourself far more experienced. It will not only boost their confidence but help them to trust you more. This is especially handy when you need an extra ally when you propose that massive refactoring you’re sure will reduce technical debt.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Give Something Back
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Your time - pair with someone; offer to review more code; take more time to explain your passions, points of view and reasons for the preferences you’re so driven about.&lt;/li&gt;
&lt;li&gt;Buy coffee or donuts (or vegan “power balls” that are free of gluten and flavor). If you don’t have money, write a post-it for a peer thanking them for their help yesterday. Just don’t make a show of it to others.&lt;/li&gt;
&lt;li&gt;Shout folks a lift to the restaurant for lunch; pick up a colleague walking from the bus stop because you have the car today; offer to carry their gear to that meeting when you can see their hands are full. You’re a kind person remember - you can show it by giving.&lt;/li&gt;
&lt;li&gt;A handy productivity tip, a funny link in the #random channel (everyone could do with smiling more), a kool sticker for their laptop, a new mouse pad (hahahahah! got ya! no one uses mouse pads anymore!), or just a high five at the end of the successful deployment. booya! Yes, it’s ok to touch other humans in the office if it’s appropriate. High-fives are definitely appropriate when you’ve cracked that bug, deployed into PROD or received that awesome feedback from the customer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of these are easy and things you can learn. They can be taught - if you’re unsure, ask a peer for help (#bevulnerable), and they’ll probably respect you more for it. Furthermore, I’m not a master of these either. They’re a daily challenge, but one I’m willing to work at. I hope you can think of it that way too.&lt;/p&gt;

&lt;p&gt;That’s all I have for today. I’m going to head off to a team lunch soon and try to put more of these into practice.&lt;/p&gt;

&lt;p&gt;Good luck!&lt;/p&gt;

&lt;p&gt;–&lt;/p&gt;

&lt;p&gt;Special thanks to Azella, Matt N and Ronnie for reading drafts.&lt;/p&gt;

</description>
      <category>inclusion</category>
      <category>kindness</category>
      <category>agile</category>
      <category>communication</category>
    </item>
  </channel>
</rss>
