<?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: Erica Tanti</title>
    <description>The latest articles on Forem by Erica Tanti (@ericathedev).</description>
    <link>https://forem.com/ericathedev</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%2F319823%2Ff88fd354-5538-4c15-b5a4-3457131980c9.jpeg</url>
      <title>Forem: Erica Tanti</title>
      <link>https://forem.com/ericathedev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ericathedev"/>
    <language>en</language>
    <item>
      <title>You are an archaeologist (5 tips for navigating legacy systems)</title>
      <dc:creator>Erica Tanti</dc:creator>
      <pubDate>Wed, 06 May 2020 16:00:00 +0000</pubDate>
      <link>https://forem.com/ericathedev/you-are-an-archaeologist-5-tips-for-navigating-legacy-systems-2301</link>
      <guid>https://forem.com/ericathedev/you-are-an-archaeologist-5-tips-for-navigating-legacy-systems-2301</guid>
      <description>&lt;p&gt;You are an archaeologist. When you’re at school building your own greenfield projects by yourself, this is a skill you don’t get to learn. However chances are, when you start your developer career, you’ll be working on a project which has been around for some time. This means you are navigating through a system built on layers and layers of commits by different people. You probably have partial knowledge about the thing you’re excavating. And you need to be careful not to break anything.&lt;/p&gt;

&lt;p&gt;Here are some tools for your toolbox to help you be a better archaeologist.&lt;/p&gt;

&lt;h1&gt;
  
  
  1. Excavate the git history
&lt;/h1&gt;

&lt;p&gt;I learnt this one early on in my career, and it’s one of the number one tools in my toolbox to this day - Excavate the git history (only when I started, it was SVN 😬🤣).&lt;/p&gt;

&lt;p&gt;What should you be looking out for?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read the commit messages: The commit messages are (hopefully!) going to help you look into the intent behind the code, or at least their changes. Does it have an issue number which might provide more context behind the change?&lt;/li&gt;
&lt;li&gt;How long ago was the specific piece of code you’re looking at changed (so for example, that specific method)? How often was it changed? Is it one person, or many people? When was the first commit? This will tell you the story of the layers of the code and how it all evolved over time - or didn’t, which raises a whole other host of questions.&lt;/li&gt;
&lt;li&gt;Look at the authors - is there anyone you can reach out to with any questions you might have?&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  2. Divine meaning through tests
&lt;/h1&gt;

&lt;p&gt;Hopefully the code is tested, and hopefully those test names have some kind of format. For example, the format I generally tend to use is &lt;code&gt;MethodName_StateUnderTest_ExpectedBehavior&lt;/code&gt;. Small (unit) tests can help you understand how a specific method or class works. Larger tests (like black box tests) help you understand what is happening at a feature level.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Search the archives of your documentation
&lt;/h1&gt;

&lt;p&gt;The trick here is knowing where documentation may hide. Varies from project to project or company to company. Some examples of documentation to look out for are READMEs, Wikis, API documentation (for people integrating with the API), formal specifications documents and user guides. Just because the documentation wasn’t intended for you (as a developer), it doesn’t mean it isn’t useful. Often understanding a user’s perspective can be just as valuable, especially if you don’t have any understanding of the product or feature and its use.&lt;/p&gt;

&lt;h1&gt;
  
  
  4. Run the code and check (or add) logs
&lt;/h1&gt;

&lt;p&gt;It might sound primitive but sometimes the best or only way to understand a piece of code is to run it. That gives you what’s called a “black box” understanding, where you don’t know anything about the code that is running. To turn that into a “white box” understanding, look at the logs to see which pieces of code are being exercised when you use certain features. If you are trying to understand a specific piece of code, you might need to add more detailed logs to get more information! It’s then up to you to figure out which logs should be committed, and which were just useful to help you to understand what was going on.&lt;/p&gt;

&lt;h1&gt;
  
  
  5. Don’t be afraid to get your hands dirty
&lt;/h1&gt;

&lt;p&gt;The great thing about being a developer is that, unlike an archaeologist, you get a trial run. You can mess up the archaeological dig, make a bunch of changes to learn, and then stash everything and pretend like it never happened. I find this really helpful when I can feel myself getting into &lt;em&gt;&lt;a href="https://en.wikipedia.org/wiki/Analysis_paralysis"&gt;analysis paralysis&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So start typing! Sometimes it’s nice to get right to the refactoring - extracting and renaming variables and methods to make the code more readable. If the code is so difficult to understand that you really don’t know where to start, an easier step can be writing comments to explain what (you think) the code is doing, or leaving questions which you’ll hopefully be able to answer later.&lt;/p&gt;

&lt;p&gt;It might seem like a waste of time to start making changes when you’re not sure if it’s the right way to go, but sometimes you’ll never know if it’s the right way to go without trying to make the changes!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy digging! What are your favourite legacy code navigation tips? 💭&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>refactoring</category>
    </item>
    <item>
      <title>Erica reads “Accelerate”</title>
      <dc:creator>Erica Tanti</dc:creator>
      <pubDate>Tue, 28 Apr 2020 06:45:00 +0000</pubDate>
      <link>https://forem.com/ericathedev/erica-reads-accelerate-22k0</link>
      <guid>https://forem.com/ericathedev/erica-reads-accelerate-22k0</guid>
      <description>&lt;p&gt;Anyone need a book recommendation? 🙋🏻‍♀️ Today I’m going to talk about &lt;a href="https://nicolefv.com/book"&gt;Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations&lt;/a&gt; by Nicole Forsgren PhD, Jez Humble, Gene Kim.&lt;/p&gt;

&lt;h1&gt;
  
  
  Who should read this book?
&lt;/h1&gt;

&lt;p&gt;“Accelerate” is a book full of practical, peer-reviewed advice on how to be more successful at building software. Therefore I’d really recommend it to the following types of people:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;👩🏽‍💼 Decision makers who want to have scientifically backed data to make their decisions to change and improve their organisations.&lt;/li&gt;
&lt;li&gt;👩🏻‍💻 People who code and want to understand how to change and improve their code processes to deliver measurably better software.&lt;/li&gt;
&lt;li&gt;👩🏾‍🔬 People interested in research techniques and data science especially applied to building better technology organisations.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Why should you read this book?
&lt;/h1&gt;

&lt;p&gt;If you’re usually one to skip the foreword (or in this case, forewords) and make your way to reading the main portion of a book, in this case I’d say - don’t! Reading Martin Fowler’s foreword really put me in the right mindset to understand exactly why this book is valuable. Also, it’s just plain hilarious 😂.&lt;/p&gt;

&lt;p&gt;Whilst I know that you’re definitely going to read the foreword for yourself now I’ll just summarise: Fowler explains his journey from first reading some of the “2014 State of DevOps Report” (which is also written by the authors) and wanting to “toss it with great force into the rubbish bin” 🚮 to being convinced that there was real analysis behind it, even more than some academic papers.&lt;/p&gt;

&lt;p&gt;I agree: If this book were just based on opinion or purely anecdotal, it wouldn’t be that impressive or at least widely applicable. The fact that it is peer reviewed research gives substance to previous discussions on what should be best practice in the lean and devops space.&lt;/p&gt;

&lt;h1&gt;
  
  
  When should you read this book?
&lt;/h1&gt;

&lt;p&gt;Personally I found that when sitting down with this book, it was important to be very focused. In “Part I: What We Found” especially, the book is densely packed with information. It truly felt like each paragraph (if not each sentence) contained nuggets of interesting information to absorb and reflect on.&lt;/p&gt;

&lt;p&gt;I bought this book on Kindle and found that it was very helpful to highlight the sections which stood out to me, or which were surprising. This both helped me to focus, and to be able to turn back to what I found to be the most interesting points to reflect on further. If you buy this in paper form, I hope you’re not too afraid to ruin a book with highlighter ✍🏻!&lt;/p&gt;

&lt;h1&gt;
  
  
  What did I learn?
&lt;/h1&gt;

&lt;p&gt;As I mentioned previously, the book is packed with interesting insights. I’ve picked out two which struck me most at this time, being most applicable to me right now as a software engineer. This means I’ve not focused as much the equally insightful culture and leadership content.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚢 Ship ship ship
&lt;/h2&gt;

&lt;p&gt;Whilst it wasn’t news to me that continuous delivery improved delivery performance, what Chapter 5 “Architecture” highlighted to me was exactly &lt;em&gt;how much&lt;/em&gt; it affected performance, especially in large organisations. It really made me more conscious to try and deploy my code at least daily, and to ask myself what I can improve to enable myself to deploy daily when I was prevented from doing so.&lt;/p&gt;

&lt;h2&gt;
  
  
  👿 Bureaucracy is not (necessarily) evil
&lt;/h2&gt;

&lt;p&gt;I love it when a book challenges my worldview, and Chapter 3 on “Measuring and Changing Culture” certainly did that. The chapter discusses applying the paper &lt;a href="https://qualitysafety.bmj.com/content/13/suppl_2/ii22"&gt;“A typology of organisational cultures” by Professor R Westrum&lt;/a&gt; to technology organisations. Whilst the main takeaway of the chapter discusses the efficacy of generative cultures and the importance of information flow, I was struck by a few paragraphs which were more of an aside.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We should emphasize that bureaucracy is not necessarily bad. As Mark Shwartz points out in &lt;em&gt;The Art of Business Value&lt;/em&gt;, the goal of bureaucracy is to “ensure fairness by applying rules to administrative behaviour […]”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My experience tends to be that many people in this industry are allergic to “rules”, but the point made that some rules “remove arbitrariness” and helps prevent “discriminatory treatment” will ring true. From personal experience, for example, having performance frameworks tend to be fairer because all parties know what goals need to be met to get to the “next level”, rather than it being arbitrary.&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;I really enjoyed reading Accelerate. So if you build software, or work with people who do, I encourage you to take a quiet couple of afternoons to read through it (ideally with a trusty highlighter). If you do I’d love to hear about your key takeaways!&lt;/p&gt;

</description>
      <category>bookreviews</category>
      <category>books</category>
    </item>
    <item>
      <title>The 5 Kinds of Laptop Owners - Sticker edition</title>
      <dc:creator>Erica Tanti</dc:creator>
      <pubDate>Tue, 31 Mar 2020 10:29:00 +0000</pubDate>
      <link>https://forem.com/ericathedev/the-5-kinds-of-laptop-owners-sticker-edition-bmd</link>
      <guid>https://forem.com/ericathedev/the-5-kinds-of-laptop-owners-sticker-edition-bmd</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclaimer: This post is just for laughs 💕&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As software engineers, the machines we write code on becomes an extension of our identity. Whilst with desktop machines there are many ways to make your setup unique, with laptops, your options are a little more limited. And that is why many developers turn to stickers to make their machines unique. Here are &lt;em&gt;the 5 Kinds of Laptop Owners - Sticker edition&lt;/em&gt;:&lt;/p&gt;

&lt;h1&gt;
  
  
  1. The #NoStickers club
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FvOC2gDi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ericathe.dev/assets/2020-03-31-laptop-stickers/ek1mzzf9c8nzmlrs7vmh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FvOC2gDi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ericathe.dev/assets/2020-03-31-laptop-stickers/ek1mzzf9c8nzmlrs7vmh.jpg" alt="Laptop without stickers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This person has no stickers on their laptop.&lt;/p&gt;

&lt;p&gt;This person is either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a remotee who doesn’t get to see other engineers IRL very often&lt;/li&gt;
&lt;li&gt;someone who exclusively works with people who stick stickers on their laptop&lt;/li&gt;
&lt;li&gt;someone who will one day open their laptop only to find they’ve swiped their colleague’s machine by mistake&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  2. The Minimalist
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jPZ7XW2w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ericathe.dev/assets/2020-03-31-laptop-stickers/36n8mx5ryqrenjk9g6h8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jPZ7XW2w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ericathe.dev/assets/2020-03-31-laptop-stickers/36n8mx5ryqrenjk9g6h8.jpg" alt="Laptop with only a few stickers, one covering the logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This person has only a few stickers on their laptop, typically one sticker covering the logo.&lt;/p&gt;

&lt;p&gt;This person either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;doesn’t believe in a lot of worldly possessions&lt;/li&gt;
&lt;li&gt;very restrained&lt;/li&gt;
&lt;li&gt;runs some kind of YouTube show where their laptop is on video, and they think that by covering the logo we can’t tell what brand of laptop they own&lt;/li&gt;
&lt;li&gt;has recently gotten a new laptop and needs to get their sticker game on&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  3. The Classic Laptop Owner
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YLyAPn8L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ericathe.dev/assets/2020-03-31-laptop-stickers/c4002872kisfrblc5d3g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YLyAPn8L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ericathe.dev/assets/2020-03-31-laptop-stickers/c4002872kisfrblc5d3g.jpg" alt="Laptop with stickers evenly spaced and not overlapping"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This person has a laptop with the standard number of stickers on it. The stickers do not overlap, and have been curated over time.&lt;/p&gt;

&lt;p&gt;This person either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enjoys the aesthetics of a nicely decorated laptop&lt;/li&gt;
&lt;li&gt;is a goody two shoes who conforms to social norms&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  4. The Overlapping Stickerer
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hFI6mgn_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ericathe.dev/assets/2020-03-31-laptop-stickers/43qgia8giiqgo6nm1jug.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hFI6mgn_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ericathe.dev/assets/2020-03-31-laptop-stickers/43qgia8giiqgo6nm1jug.jpg" alt="Laptop with overlapping stickers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The great debate - what do you do when you run out of room for new stickers? Do you stop sticking stickers on your laptop, your masterpiece complete? Or do you start &lt;em&gt;overlapping the stickers&lt;/em&gt; 😱.&lt;/p&gt;

&lt;p&gt;This person either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;is in need of a new laptop!&lt;/li&gt;
&lt;li&gt;is a conference speaker who receives too many stickers&lt;/li&gt;
&lt;li&gt;someone who cannot be bothered to remove old stickers when they fade away and replace them with new ones&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Either way, you can tell this person’s history through the layers of stickers, like the layers of an ancient archaeological excavation site.&lt;/p&gt;

&lt;h1&gt;
  
  
  5. The One with the Laptop Stickers INSIDE their Laptop
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tcH_KCd9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ericathe.dev/assets/2020-03-31-laptop-stickers/bravqf1ej171oe79ltjj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tcH_KCd9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ericathe.dev/assets/2020-03-31-laptop-stickers/bravqf1ej171oe79ltjj.jpg" alt="Harry Potter sticker next to touchpad"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You thought we were done? You are so wrong… there is one more type of laptop owner, and this is the strangest one of them all… The One with the Laptop Stickers &lt;em&gt;inside&lt;/em&gt; their Laptop. These people are a rare breed, but they do exist.&lt;/p&gt;

&lt;p&gt;This person either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;uses their laptop as a desktop, always in a dock, never actually using their keyboard&lt;/li&gt;
&lt;li&gt;thinks out of the box&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;So the question is… What kind of laptop owner are you? 😄&lt;/em&gt;&lt;/p&gt;

</description>
      <category>jokes</category>
    </item>
    <item>
      <title>Don't be a mentor, be a sponsor</title>
      <dc:creator>Erica Tanti</dc:creator>
      <pubDate>Thu, 05 Mar 2020 11:05:21 +0000</pubDate>
      <link>https://forem.com/ericathedev/don-t-be-a-mentor-be-a-sponsor-3pem</link>
      <guid>https://forem.com/ericathedev/don-t-be-a-mentor-be-a-sponsor-3pem</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“Mentors talk &lt;em&gt;with&lt;/em&gt; you. Sponsors talk &lt;em&gt;about&lt;/em&gt; you.” — &lt;a href="https://m.huffpost.com/us/entry/us_5a0e0e77e4b0e6450602e937"&gt;Heather Foust Cummings, Catalyst Research Center for Equity in Business Leadership&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A little story...
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;9 years ago I started my first tech summer internship. I was so excited. I got placed in the quality assurance team and wrote automation tests. Whilst I enjoyed testing, during my internship I really wanted to experience being a software developer to see which I liked better. A month into my internship, my manager held a meeting with me and asked me if I would be interested in moving to a development team.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It was many years later that I learned the reason why I got asked to move to a development team. A colleague had spoken to my manager and let my manager know that they were impressed by my work and by my enthusiasm. They knew I wanted to try development, and suggested to my manager that I move to their team.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is one of the earliest examples of sponsorship I remember experiencing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why mentorship isn't enough
&lt;/h2&gt;

&lt;p&gt;To get the full picture as to why mentorship isn't enough, I recommend reading  and/or listening to &lt;a href="https://hbr.org/2010/09/why-men-still-get-more-promotions-than-women"&gt;Why Men Still Get More Promotions Than Women in the Harvard Business Review&lt;/a&gt;. To summarise:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Our interviews and surveys alike suggest that high-potential women are overmentored and undersponsored relative to their male peers—and that they are not advancing in their organizations. Furthermore, without sponsorship, women not only are less likely than men to be appointed to top roles but may also be more reluctant to go for them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Telling your mentee how you got to where you are doesn't translate into your mentee being able to follow your footsteps. It's unlikely that the exact same opportunities that were available to you are available to them. You were in the right place in the right time, and to add to that hopefully you didn't have to deal with glass ceilings, conscious or unconscious bias and impostor syndrome. So how can your mentee follow in your footsteps? The answer is, don't be a mentor...&lt;/p&gt;

&lt;h2&gt;
  
  
  Be a sponsor
&lt;/h2&gt;

&lt;p&gt;Sponsors don't just talk to you, they help you get there. Now you've understood why sponsorship is valuable, you might be asking yourself, "How can I be a sponsor?".&lt;/p&gt;

&lt;h3&gt;
  
  
  📢 Amplify what someone is already doing
&lt;/h3&gt;

&lt;p&gt;In the literature, a sponsor is generally described as having to be "senior". Having a "senior" sponsor is great, but from my experience and from my story above, anyone can be an amplifier. When you see someone do something well, don't be quiet about it. Make sure that everyone (or the right people) know about it so they can be recognised for their achievements. &lt;/p&gt;

&lt;h3&gt;
  
  
  🤝 Make introductions
&lt;/h3&gt;

&lt;p&gt;Early in my 20s I read Meg Jay Ph.D.'s book &lt;a href="https://megjay.com/the-defining-decade/"&gt;The Defining Decade&lt;/a&gt; . This was when I first learnt about "weak ties". The term was first coined by sociologist Mark Granovetter and describes people who we know distantly, like friends of friends. Weak ties know about opportunities we don't because they move in a different circle of people. As a sponsor you can make introductions to connect people who otherwise would never have met, which might lead to opportunities that never would have happened otherwise. (Find an excerpt of that chapter &lt;a href="https://www.psychologytoday.com/us/blog/the-defining-decade/201204/the-urban-tribe-is-overrated"&gt;here&lt;/a&gt;.)&lt;/p&gt;

&lt;h3&gt;
  
  
  🧗🏻‍♀️ Help them stretch
&lt;/h3&gt;

&lt;p&gt;If you want to perform the ultimate act of sponsorship, give someone "Stretch Opportunities". The whole thread by Mekka Okereke is a must read, but to summarise:&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;I am a great believer that people learn and grow by doing, much more than by hearing how other people did it. Apart from being an opportunity for growth, stretch opportunities serve to prove what that person is capable of, in a world where potential is not enough. &lt;/p&gt;

&lt;h2&gt;
  
  
  Finally
&lt;/h2&gt;

&lt;p&gt;Thank you to my sponsors who believe in me, who lift me up and push me forward to reach my full potential. Being a sponsor takes courage, but actions are louder than words.&lt;/p&gt;

&lt;h2&gt;
  
  
  About me 👩🏻‍💻
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Hi I'm Erica and I've been working in the software industry for 9 years and have been coding for 15 years. In my career I've worked predominantly as a Backend Java Web Developer, but I'm not afraid to do whatever is needed to get the job done, from Frontend to DevOps. I love building products and understanding what I'm building and how to make it better. I ask a lot of questions. I love working in a team. I am often &lt;a href="https://noidea.dog/glue"&gt;glue&lt;/a&gt;. When I'm not coding, I love reading, speaking (I'm a Toastmaster!) and travelling.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wecoded</category>
    </item>
    <item>
      <title>Rewrite 🖋 or Refactor 🧹? 10 questions to ask yourself before you decide.</title>
      <dc:creator>Erica Tanti</dc:creator>
      <pubDate>Thu, 27 Feb 2020 20:34:27 +0000</pubDate>
      <link>https://forem.com/ericathedev/rewrite-or-refactor-10-questions-to-ask-yourself-before-you-decide-2b6m</link>
      <guid>https://forem.com/ericathedev/rewrite-or-refactor-10-questions-to-ask-yourself-before-you-decide-2b6m</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The code is horrible. Looking at it makes you want to tear your hair out. Something has to be done! The question is, what are you going to do?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You have two options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You either &lt;em&gt;rewrite&lt;/em&gt; and replace it, building a whole new sub-system which will eventually result in the old version of the code being deleted.&lt;/li&gt;
&lt;li&gt;Or else you &lt;em&gt;refactor&lt;/em&gt; it, i.e. &lt;em&gt;applying a series of small behavior-preserving transformations, each of which "too small to be worth doing". However the cumulative effect of each of these transformations is quite significant.&lt;/em&gt; (&lt;a href="https://martinfowler.com/books/refactoring.html"&gt;Refactoring - Improving the Design of Existing Code by Martin Fowler, with Kent Beck&lt;/a&gt;) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The question is, which do you pick? Your heart says &lt;em&gt;"Rewrite it, this code is beyond hope!"&lt;/em&gt;. The internet says &lt;em&gt;"Refactor it, rewriting is evil!"&lt;/em&gt;. What should you do? The answer is, as it often is, &lt;em&gt;"it depends"&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Here are my 10 questions to ask yourself to decide whether to &lt;em&gt;rewrite&lt;/em&gt;, or to &lt;em&gt;refactor&lt;/em&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;№&lt;/th&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Rewrite&lt;/th&gt;
&lt;th&gt;Refactor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1.&lt;/td&gt;
&lt;td&gt;How much time ⏰ do you have? If you start rewriting, are you committed to finishing it?&lt;/td&gt;
&lt;td&gt;Lots of time&lt;/td&gt;
&lt;td&gt;Not a lot of time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.&lt;/td&gt;
&lt;td&gt;Do you have the right people 👩🏻‍💻👨🏽‍💻👩🏿‍💻👨🏼‍💻 available to make this change happen? (People with backend/frontend/tech ops etc skills as applicable)&lt;/td&gt;
&lt;td&gt;Yes we do&lt;/td&gt;
&lt;td&gt;No we don't&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.&lt;/td&gt;
&lt;td&gt;How much of the system as a whole 🌐 are you rewriting?&lt;/td&gt;
&lt;td&gt;A small part or a specific domain&lt;/td&gt;
&lt;td&gt;The whole system or most of it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4.&lt;/td&gt;
&lt;td&gt;What is it about the code that is bad 🗑?&lt;/td&gt;
&lt;td&gt;The whole design&lt;/td&gt;
&lt;td&gt;The way it's written&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5.&lt;/td&gt;
&lt;td&gt;How often do you predict 🔮 (hopefully know) this code will need to change in the future?&lt;/td&gt;
&lt;td&gt;Very often&lt;/td&gt;
&lt;td&gt;Not often&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6.&lt;/td&gt;
&lt;td&gt;How mission critical and/or valuable 💸 is this feature or domain?&lt;/td&gt;
&lt;td&gt;Very valuable&lt;/td&gt;
&lt;td&gt;Not very valuable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7.&lt;/td&gt;
&lt;td&gt;Do you understand 🧠 the existing code? Do you know in detail what it does? Are the requirements clear?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.&lt;/td&gt;
&lt;td&gt;Is it just the code that is bad, or do you also &lt;em&gt;need&lt;/em&gt; (not just want!) to make changes to the technology stack 🤖 being used?&lt;/td&gt;
&lt;td&gt;Technology&lt;/td&gt;
&lt;td&gt;Just the code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9.&lt;/td&gt;
&lt;td&gt;If you had to rewrite it, how long will it take you to ship 🚢 the first part of your rewrite to production, with &lt;em&gt;actual people&lt;/em&gt; using it?&lt;/td&gt;
&lt;td&gt;A few days, a couple of weeks max&lt;/td&gt;
&lt;td&gt;Months, or even years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.&lt;/td&gt;
&lt;td&gt;Why are you doing this? No really: Dig deep and be honest! I'll wait 💅🏻.&lt;/td&gt;
&lt;td&gt;I believe this is the best choice&lt;/td&gt;
&lt;td&gt;I hate this code &amp;amp; my ego thinks I can do better&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Here's the catch: If at least &lt;em&gt;one&lt;/em&gt; of the questions above resulted in you picking an answer in the "refactor" column, hit the brakes on that rewrite! The risk of refactor is much smaller than a rewrite. The cost of a rewrite gone bad are immeasurable. &lt;/p&gt;

&lt;p&gt;Does this mean you should &lt;em&gt;never&lt;/em&gt; rewrite code? No! What it does mean is that if the conditions are not right you should go back to the drawing board and make do for now until the conditions &lt;em&gt;are&lt;/em&gt; right. Sometimes a rewrite is truly the better option, but avoid doing it just because it sounds like the easiest or most appealing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What do you think? Are there any questions you ask yourself that I have missed?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Originally posted on: &lt;a href="https://ericathe.dev/blog/2020/02/27/rewrite-vs-refactor/"&gt;https://ericathe.dev/blog/2020/02/27/rewrite-vs-refactor/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>refactoring</category>
      <category>beginners</category>
    </item>
    <item>
      <title>HTTP Caches - I read RFC 7234 so you won’t have to. Part 1: The Basics</title>
      <dc:creator>Erica Tanti</dc:creator>
      <pubDate>Sun, 16 Feb 2020 14:36:20 +0000</pubDate>
      <link>https://forem.com/ericathedev/http-caches-i-read-rfc-7234-so-you-won-t-have-to-part-1-the-basics-kl6</link>
      <guid>https://forem.com/ericathedev/http-caches-i-read-rfc-7234-so-you-won-t-have-to-part-1-the-basics-kl6</guid>
      <description>&lt;h2&gt;
  
  
  What is an HTTP cache?
&lt;/h2&gt;

&lt;p&gt;An HTTP cache stores the responses of HTTP requests made over a network in a local store. The next time the cache receives a request matching the local copy of the response, the cache can return that instead of making the network call again. This reduces the response time and network bandwidth consumption on future HTTP requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is RFC 7234 and why should I care?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://tools.ietf.org/html/rfc7234"&gt;RFC 7234&lt;/a&gt; is an Internet Standards document for Hypertext Transfer Protocol (HTTP) defined by the Internet Engineering Task Force (IETF). RFC 7234 defines how a cache should be implemented internally. &lt;/p&gt;

&lt;p&gt;Although most developers won’t have to implement an HTTP cache, it’s useful to know what’s happening under the hood, because as a Web Developer there will come a time when you’ll find yourself asking, “Is this being cached, and how do I make it stop?” 🤔. &lt;/p&gt;

&lt;p&gt;If you’re implementing client side code then you can send cache control headers in a request to influence whether you’re going to get information from the cache or not, depending on various criteria.&lt;/p&gt;

&lt;p&gt;If you’re implementing server side code then cache control headers sent in the HTTP response inform the cache on how long it is safe to store the request in the cache. If as a server you don’t provide any cache control headers, the cache uses heuristics to estimate what can be cached, and for how long. &lt;/p&gt;

&lt;h2&gt;
  
  
  Where are these caches?
&lt;/h2&gt;

&lt;p&gt;Caches fall into two types, private caches, dedicated to a single user, like the one in your browser, and shared caches, which are used by more than one user, like caches at your &lt;a href="https://en.wikipedia.org/wiki/Internet_service_provider"&gt;ISP&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Content_delivery_network"&gt;CDN&lt;/a&gt; or server side caching. In the latter case, there are certain extra restrictions on what is cached, because you don’t want to be serving user specific data to other people by mistake 😬.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the disadvantages of caching?
&lt;/h2&gt;

&lt;p&gt;The most obvious disadvantage of caching is that you want to retrieve the latest information from a server, but somewhere along the way your request keeps getting cached.&lt;/p&gt;

&lt;p&gt;The second less obvious disadvantage has to do with security. Bugs 🐛 or vulnerabilities in caches can result in a whole host of problems. These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Since a large number of requests and responses are saved in caches, if the cache becomes compromised, there’s a lot of a user’s history available. &lt;/li&gt;
&lt;li&gt;A compromised cache can be injected with malicious payloads. &lt;/li&gt;
&lt;li&gt;Sensitive/private data can end up being cached due both due to bugs in the cache or misuse of caching headers.&lt;/li&gt;
&lt;li&gt;Or simply someone being able to tell that a website has been visited previously because a page takes less time to load, because it has been cached.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The potential gains for attackers are multiplied when they manage to target shared caches, as this allows them to reach multiple users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to learn more? Some great resources on caching from my research
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The original RFC 7234 itself - &lt;a href="https://tools.ietf.org/html/rfc7234"&gt;https://tools.ietf.org/html/rfc7234&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;An updated version of RFC 7234 with inline errata - &lt;a href="https://www.rfc-editor.org/rfc/inline-errata/rfc7234.html"&gt;https://www.rfc-editor.org/rfc/inline-errata/rfc7234.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Mozilla's documentation explaining Cache Control &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control"&gt;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control&lt;/a&gt;
and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching"&gt;https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Mark Nottingham's super comprehensive Caching Tutorial - &lt;a href="https://www.mnot.net/cache_docs/"&gt;https://www.mnot.net/cache_docs/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally posted on: &lt;a href="https://ericathe.dev/blog/2020/02/16/caching-part1/"&gt;https://ericathe.dev/blog/2020/02/16/caching-part1/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>caching</category>
    </item>
    <item>
      <title>Reasons to Write 📝</title>
      <dc:creator>Erica Tanti</dc:creator>
      <pubDate>Sun, 02 Feb 2020 22:46:17 +0000</pubDate>
      <link>https://forem.com/ericathedev/reasons-to-write-3mo9</link>
      <guid>https://forem.com/ericathedev/reasons-to-write-3mo9</guid>
      <description>&lt;p&gt;&lt;em&gt;Note: This first blog post is a reminder to myself as to why I have decided to write a blog. I hope it's helpful to other people here also!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I have been meaning to start writing a blog for some time and finally this is the first post! My &lt;a href="https://en.m.wikipedia.org/wiki/SMART_criteria" rel="noopener noreferrer"&gt;SMART goal&lt;/a&gt; is to publish a post every other week. My reasons to write are:&lt;/p&gt;

&lt;p&gt;👶🏻 &lt;em&gt;For my past self&lt;/em&gt;: To share things that I have learnt with the developer community, especially when I tried to find an article to help me and didn't find exactly what I needed.&lt;/p&gt;

&lt;p&gt;👩🏻‍💻 &lt;em&gt;For my present self&lt;/em&gt;: If you cannot explain something, you do not understand. Although it's &lt;a href="https://skeptics.stackexchange.com/questions/8742/did-einstein-say-if-you-cant-explain-it-simply-you-dont-understand-it-well-en" rel="noopener noreferrer"&gt;uncertain who actually said this&lt;/a&gt; this quote definitely resonates. I learn better when actively taking notes and trying to explain things rather than simply reading. I hope that by explaining to others, I also benefit myself indirectly. &lt;/p&gt;

&lt;p&gt;👵🏻 &lt;em&gt;For my future self&lt;/em&gt;: As developers we are constantly learning, and only a finite amount of information can actually fit into a single brain. I want to write so that my future self can refer back to what I have written and easily relearn what I had learnt in the past. &lt;/p&gt;

&lt;p&gt;I've made a conscious effort here to have the goals focus on myself and what I can control (known as &lt;a href="https://alifeofproductivity.com/creativity-set-process-goals/" rel="noopener noreferrer"&gt;process goals&lt;/a&gt;), rather than who or how many people read my posts or other "success" factors, because even if no one reads what I write, the writing itself is worth it.&lt;/p&gt;

&lt;p&gt;If you're interested in even more motivational words, I was super inspired by:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/nomw8qlGIM8"&gt;
&lt;/iframe&gt;
 to finally start writing and define my "why", and&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/practicingdev" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F106544%2F73b26baa-ffe0-4765-afe4-3893c42ccf5c.jpg" alt="practicingdev"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/practicingdev/a-dozen-ways-to-make-time-2c5m" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;A Dozen Ways to Make Time&lt;/h2&gt;
      &lt;h3&gt;Practicing Developer ・ Jan 14 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
 to actually make the time to do it (this post was written in the small moments of my week in between doing other things).

</description>
      <category>productivity</category>
      <category>career</category>
      <category>writing</category>
    </item>
  </channel>
</rss>
