<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.5">Jekyll</generator><link href="https://www.ryanof.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.ryanof.com/" rel="alternate" type="text/html" /><updated>2024-02-15T20:30:53-05:00</updated><id>https://www.ryanof.com/feed.xml</id><title type="html">Ryan’s Thoughts</title><subtitle>An amazing website.</subtitle><author><name>Ryan O'Farrell</name></author><entry><title type="html">Trashing Culture; The Village Wine Cask - 2-2-2 February 2024</title><link href="https://www.ryanof.com/posts/2024-02-13-feb-24-222.html" rel="alternate" type="text/html" title="Trashing Culture; The Village Wine Cask - 2-2-2 February 2024" /><published>2024-02-13T07:15:00-05:00</published><updated>2024-02-13T07:15:00-05:00</updated><id>https://www.ryanof.com/posts/feb-24-222</id><content type="html" xml:base="https://www.ryanof.com/posts/2024-02-13-feb-24-222.html"><![CDATA[<p><em>2-2-2 is a monthly series that shares <strong>2</strong> top-of-mind ideas on the <strong>2</strong>nd <strong>2</strong>sday of every month - enjoy!</em></p>

<h2 id="thing-1-trashing-culture">Thing 1: Trashing Culture</h2>

<p>While walking in to work a few weeks ago I saw an employee of a vendor throw his trash at the trash can. Note the phrasing “at the trash can”, since this individual did not succeed in their simple endeavor of properly disposing of their rubbish. And this individual had no choice but to know they failed: they watched their trash miss the bin from 2 feet away.</p>

<p>For those still trying to catch up, I asked AI to depict the scene for me:</p>

<figure class="align-center">
  <img src="/assets/images/222-feb-24/trash.png" alt="Trash on the ground" /><figcaption align="center">
      AI generated - prompt: ‘Please make me an image that depicts an unidentified individual facing away from the audience, and this individual has a piece of trash like a napkin in their hand and they are reaching out to throw away their trash in a black trash can from a few feet away. the setting of the image is a sidewalk in front of a generic industrial grey wall.’

    </figcaption></figure>

<p>The trash was on the ground, and they were walking away as if that was OK.</p>

<p>Now, I had a few options:</p>

<ol>
  <li>Accost said contractor, pointing to to evidence, using all sorts of hand waving and “trash belongs in the trash can”-style phrases</li>
  <li>Quietly double back and put their trash in the receptacle and avoid conflict</li>
  <li>Do nothing, and hurry on to my desk</li>
</ol>

<p>Now, stunning revelation, I did #3 and looking back on it I don’t thing it was the right choice. There are many reasons I did nothing (I was late, the trash was improperly trashed in an area I did not have access to behind a fence, it was cold…). But at the end of the day someone trashed my workplace and I did nothing.</p>

<p>This story got me thinking about the concept of culture, and a few lessons stand out:</p>

<ul>
  <li>Culture is the product of what we do AND what we allow to happen. In this example, I wasn’t the one who did anything wrong, but I allowed it to happen and therefore someone now thinks it’s OK to throw trash on the ground at Delta Air Lines.</li>
  <li>In thermodynamics, entropy (aka disorder) cannot decrease without the use of energy. Restating, order requires an energy injection. In a company, culture requires energy injection. Energy to care, energy to sound the alarm, energy to go to the happy hour, energy to do more than the minimum required….In my example, energy to confront the person who was increasing disorder</li>
  <li>A rhetorical question: do you have the courage to be a culture keeper? If you saw someone doing something that is against your culture, would you say something? Would you think “I can’t believe that” but let it happen?</li>
</ul>

<h2 id="thing-2-the-village-wine-cask">Thing 2: The Village Wine Cask</h2>

<p>The topic of culture reminded me of a good anecdote to share about why your contribution matters, no matter how small. I have shamelessly stolen the content below from <a href="https://www.jbcharleston.jb.mil/News/Commentaries/Display/Article/1185338/the-village-wine-and-the-importance-of-personal-contribution/">here</a>.</p>

<p><em>A triumphal feast was scheduled in a village and, in order to ensure that all might enjoy in the feast without imposing upon any few, the villagers all agreed each would put one bottle of his best wine into a great cask for the occasion.</em></p>

<p><em>However, upon reflection, one villager reasoned that, if he filled his bottle with water, the dilution would be so slight, no one would notice.</em></p>

<p><em>So, the day of the feast arrived, and the great cask was tapped and wonder of wonders…nothing but water poured forth!</em></p>

<p><em>Every villager had reasoned alike – my contribution isn’t big enough to be noticed!</em></p>

<figure class="align-center">
  <img src="/assets/images/222-feb-24/wine.png" alt="Trash on the ground" /><figcaption align="center">
      AI generated - prompt: ‘Please make an image of a large cask of wine (labeled with the word ‘wine’) on top of a platform on a sunny day in a meadow. Around the platform there are quite a few people standing around looking up at the cask. A thin stream of clear blue water is flowing out of the tap onto the ground’

    </figcaption></figure>]]></content><author><name>Ryan O'Farrell</name></author><category term="posts" /><summary type="html"><![CDATA[How one piece of trash forced me to think about what cutlure is and how it is formed, and a story about a wine cask in a village]]></summary></entry><entry><title type="html">Making New Years Resolutions Stick; My #1 Personal Finance Metric - 2-2-2 January 2024</title><link href="https://www.ryanof.com/posts/2024-01-09-jan-24-222.html" rel="alternate" type="text/html" title="Making New Years Resolutions Stick; My #1 Personal Finance Metric - 2-2-2 January 2024" /><published>2024-01-09T07:15:00-05:00</published><updated>2024-01-09T07:15:00-05:00</updated><id>https://www.ryanof.com/posts/jan-24-222</id><content type="html" xml:base="https://www.ryanof.com/posts/2024-01-09-jan-24-222.html"><![CDATA[<p><em>2-2-2 is a monthly series that shares <strong>2</strong> top-of-mind ideas on the <strong>2</strong>nd <strong>2</strong>sday of every month - enjoy!</em></p>

<h2 id="thing-1-new-years-resolution-reminders">Thing 1: New Years Resolution Reminders</h2>

<p>Every year on January 1st my wife and I do a ‘state of the union’ where we review our prior year against our prior year goals and set new goals for the upcoming year. We have categories like health/wellness, finances, socializing, the kids, trips, etc. The goals can loosely be categorized into habit building (read every night before bed) or one-off actions (take a course on AI). A few from my 2024 goal setting:</p>

<ul>
  <li>Do skincare and probiotics every day</li>
  <li>2 Duolingo lessons per day (almost 600 day streak with 2 kids under 2, not bragging but…je suis tres bien a francais)</li>
  <li>Write 12 blog posts (crushing it)</li>
  <li>Work out 3x/week even if its just 20 minutes</li>
  <li>Go on a date once per month out of our house</li>
  <li>Daily journaling/gratitude</li>
</ul>

<p>Beginning-of-the-year me is always excited and ready to take on the world. Then work starts again, and the kids need to get to daycare, and families are visiting, and we also need to see friends, and then all of a sudden these goals hit the back burner until next year.</p>

<p>This year we are trying two things to keep our goals top-of-mind:</p>

<ul>
  <li><strong>Scheduled quarterly reviews</strong> - these are already on the wall calendar so we can’t forget, we will review the prior quarter and review what we wanted to accomplish and our progress. We will also probably realize that we want to remove some or add different ones because a lot can change in 3 months</li>
  <li><strong>Physical reminder cards</strong> - I typed out a table of daily/weekly/monthly/general goals for myself and my wife, printed them out, and laminated them. They are in our bathroom next to our toothbrushes and are there to remind us of the things we should be doing. The hope is that simply having the goals visible in a daily traffic area will remind us enough that they become second nature to act upon.</li>
</ul>

<p>Stay tuned for the update after our first quarterly 10-Q.</p>

<h2 id="things-2-the-most-important-financial-metric-for-our-family">Things 2: The most important financial metric for our family</h2>

<p>As part of our aforementioned goals, we do a financial review of the prior year. I diligently track every cent in to and out of our accounts in a custom-built app I’ve made. The challenge is that with so many numbers things can get overwhelming to track: we spent less in category X but we had to get a new roof but it also was a good year for stocks but groceries are more expensive….</p>

<p>The simplify, we care primarily about one north star metric: <strong>net income ex-investment returns (NI-exInv)</strong>. Even better, we look at this as a percent of ex-investment income (<strong>NI-exInv%</strong>)</p>

<p>The formula for the number is: Total Income - Investment Income - Total Expense; for the percentage you then divide that by Total Income-Investment Income. All of our income is considered post-tax only.</p>

<p>This is our north star metric because it tells us <strong>how far below our means we are living</strong>, while factoring out the <strong>volatility of our investments</strong> (primarily stocks). For example, for an example total income of 100k, expenses of 60k, investment returns of 30k, you may look and say ‘wow great we made 40k this year because we made 100k and spent 60k’, but in fact 30k of that was driven by investment returns so in reality you are only living 10k below your means.</p>

<p>Over the past 30 years the SP500 has averaged 11.7% return (non-compounded), and in only 5 of those years has the actual return been within 5% of that number. Stocks go up and stocks go down, and most of us are buying stocks as a long term investment. Therefore, those investments should only be evaluated long-term, rather than caring about the volatile annual returns.</p>

<figure class="align-center">
  <img src="/assets/images/222-jan-24/222-jan-sp500-returns.png" alt="SP500 Returns and average" /></figure>

<p>Our target NI-exInv is 35%, meaning on average we want to spend 65% of our ex-investment income and save 35%. This gives us cushion monthly for larger expenses while also allowing us to invest in our future.</p>]]></content><author><name>Ryan O'Farrell</name></author><category term="posts" /><summary type="html"><![CDATA[How I'm trying to make my 2024 New Years Resolutions stick, and the #1 personal finance metric my family uses to evaluate our year!]]></summary></entry><entry><title type="html">Get your feed off my back!</title><link href="https://www.ryanof.com/posts/2023-02-20-feedback.html" rel="alternate" type="text/html" title="Get your feed off my back!" /><published>2023-02-20T07:15:00-05:00</published><updated>2023-02-20T07:15:00-05:00</updated><id>https://www.ryanof.com/posts/feedback</id><content type="html" xml:base="https://www.ryanof.com/posts/2023-02-20-feedback.html"><![CDATA[<p>This post discusses the never-before-discussed topic of feedback! Including an often-forgoteen feedback loop, a mathematical proof that feedback is good, and my tips for feedback. Enjoy!</p>

<h2 id="the-forgotten-feedback-loop">The forgotten feedback loop</h2>

<p>Many work environments generally function in the following fashion:</p>

<ul>
  <li>Work is ingested in to a team’s backlog and prioritized against all the other things going on, usually by leadership</li>
  <li>People are assigned items to work on, or people pull items that are at the top of the backlog when they have bandwidth</li>
  <li>Various ‘ways of working’ things happen: team meetings, daily check-ins, broader-team meetings, 1-on-1s with the leaders, interact informally with one another, help each other with little issues, etc.</li>
  <li>The team creates work products: reports, meetings, emails, analysis, content, etc.</li>
  <li>The customers of the work products provide specific feedback on the work products. That feedback either gets handled immediately (change this slide…done), or gets re-ingested into the team’s backlog and re-prioritized</li>
  <li>Repeat until retirement (feel free to go start your own company if this makes you unhappy)</li>
</ul>

<figure class="align-center">
  <img src="/assets/images/post-11/work-process.png" alt="General work process" /></figure>

<p>Consumers of your team’s work usually can provide solid, tangible, understandable feedback. This report is wrong. This dashboard is too small. The excel sheet needs these changes. Boom, I can go work on that, I understand it, etc.</p>

<p>The catch: that <strong>work product</strong> feedback will be processed through the same <strong>work process</strong> that produced the initial work product. Something seem wrong?</p>

<blockquote>
  <p>Feedback on <strong>how the team delivers work</strong> is often forgotten, whereas feedback on <strong>the work a team delivers</strong> is readily available.</p>
</blockquote>

<p>Oh yeah…no one took the time to provide feedback on <strong>how the team is delivering their work</strong>, aka their <strong>work process</strong>. This massive input to team work quality/pace never receives dedicated time for a few reasons:</p>

<ol>
  <li>There’s no report to critique, no powerpoint deck to slander, no tangible item to discuss; conversations about the intangible are mentally draining</li>
  <li>Talking about how you produce the work you produce sometimes feels very meta and abstract</li>
  <li>It is hard to specifically articulate what the team’s work process is in order to improve/critique it</li>
  <li>Team members have probably been burned in the past by having their suggestions be praised-then-disregarded (”we should try X” → ”wow great idea” → trash)</li>
  <li>Team members are not confident enough/secure enough to share what they want with their team; they do not want to impose their preferences on others</li>
</ol>

<p>Regardless of the challenge, it is imperative to collect feedback on the <strong>work process</strong>.</p>

<blockquote>
  <p>The definition of insanity is doing the same thing over and over and expecting a different result - Michael Scott</p>
</blockquote>

<p>Odds are your team has had at least one person turn over just in the last 6 months. When that happens, team composition changes, and the ideal way of working also changes. Implementing a <strong>work process feedback loop</strong> enables you to catch the team’s changing composition and adapt the team’s process to the new group.</p>

<p>Will every bit of feedback be productive and useful and meaningful? No. True story: as an Agile Coach one of the teams I coached has their sprint retrospective and the feedback that got the most traction was, “I don’t want to toss the nerf ball to signify who is talking”…</p>

<p>All you can do is turn on the feedback loop and set the team up to mold their work process to their specific way of working.</p>

<h2 id="good-feedback-50-productivity-boost">Good feedback: 50% productivity boost</h2>

<p>We are going to go through a hypothetical to prove (or disprove) that feedback can be a productivity boost.</p>

<p>Let’s say your team’s objective is to produce a 100-unit ‘widget’, and your team works at 1 unit per day; the widget requires a minimum of 100 days of work for a perfect team.</p>

<p>However, your work may not directly drive towards the desired end state. There are many inefficiencies that can cause a team to produce work that is not perfectly aligned with the desired direction:</p>

<ul>
  <li><strong>Inefficiency in vision</strong>: the customer does not actually know what they want</li>
  <li><strong>Inefficiency in communication</strong>: there is a breakdown somewhere between the message the customer wants to communicate, the words they say, the words you year, and what you interpret the message as</li>
  <li><strong>Inefficiency in delivery</strong>: the actual execution of work deviates from what should be created</li>
</ul>

<p>Restated: a perfectly efficient team will take 100 days, but your team may take 130 days. A different team may take 200 days. What contributes to the difference?</p>

<p>Team work throughput is definitely a major factor: if a team can produce 2 units per day, that is obviously better. Another important factor is output direction, or how aligned your teams output is with the desired direction. And the major contributor to direction: <strong>early and often feedback</strong>. Providing/receiving feedback limits the percent of work that is unproductive; if you understand the vision and changes, you’re better able to produce work aligned with that vision.</p>

<figure class="align-left">
  <img src="/assets/images/post-11/productivity.png" alt="Productivity with angles" /></figure>

<p>A mathematical model of this scenario assumes that your teams output can be somewhere between perfectly productive (100% in direction of widget) and perfectly unproductive (100% sideways), or even some small percent counterproductive (backwards). In our simulation, we will test 6 levels of feedback, with each level producing different amounts of productive output depending on how good the feedback is.</p>

<table>
  <thead>
    <tr>
      <th>Feedback Quality</th>
      <th>Range of Angles</th>
      <th>Percent Productive</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>None</td>
      <td>0 to 90</td>
      <td>0% to 100%</td>
    </tr>
    <tr>
      <td>Meh</td>
      <td>15 to 90</td>
      <td>26% to 100%</td>
    </tr>
    <tr>
      <td>Average</td>
      <td>30 to 90</td>
      <td>50% to 100%</td>
    </tr>
    <tr>
      <td>Good</td>
      <td>45 to 90</td>
      <td>71% to 100%</td>
    </tr>
    <tr>
      <td>Great</td>
      <td>60 to 90</td>
      <td>87% to 100%</td>
    </tr>
    <tr>
      <td>Bad</td>
      <td>-30 to 60</td>
      <td>-50% to 87%</td>
    </tr>
  </tbody>
</table>

<p>I ran 500 simulations for each feedback quality, with each simulation representing a team’s journey to produce the 100-unit widget. The team randomly samples a productive percent each day, and continues until they reach the goal of producing 100 units of productive work. The results are quite interesting.</p>

<table>
  <thead>
    <tr>
      <th>Feedback Quality</th>
      <th>Percent Productive</th>
      <th>Average days to complete</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Great</td>
      <td>87% to 100%</td>
      <td>105 days</td>
    </tr>
    <tr>
      <td>None, 1.5x throughput</td>
      <td>0% to 100%</td>
      <td>106 days</td>
    </tr>
    <tr>
      <td>Good</td>
      <td>71% to 100%</td>
      <td>112 days</td>
    </tr>
    <tr>
      <td>Bad, 4x throughput</td>
      <td>-50% to 87%</td>
      <td>112 days</td>
    </tr>
    <tr>
      <td>Average</td>
      <td>50% to 100%</td>
      <td>122 days</td>
    </tr>
    <tr>
      <td>Meh</td>
      <td>26% to 100%</td>
      <td>137 days</td>
    </tr>
    <tr>
      <td>None</td>
      <td>0% to 100%</td>
      <td>159 days</td>
    </tr>
    <tr>
      <td>Bad</td>
      <td>-50% to 87%</td>
      <td>446 days</td>
    </tr>
  </tbody>
</table>

<figure class="align-right">
  <img src="/assets/images/post-11/feedback-sim.jpeg" alt="Results of simulation" /></figure>

<ul>
  <li>Shocker of the century: channeling more of a team’s work into a productive direction makes that team produce the correct output quicker. Like and subscribe to my blog for more ground breaking analysis!</li>
  <li>It is surprising how much throughput is required to compensate for poor feedback: Counterproductive/bad feedback slows the team by ~4.5x, so 4x throughput is needed to deliver the correct output in the same time as a normally-paced team with good feedback (112 days)</li>
  <li>Which is easier: increasing throughput by 50% or giving/receiving good product feedback? Because 1.5x throughput is roughly equal to great feedback (105 days)</li>
</ul>

<p>The obvious caveats aside, it’s clear to see that good feedback can produce more productive teams. How do you give that good feedback?</p>

<h2 id="ryans-keys-to-feedback">Ryan’s keys to feedback</h2>

<p>Last year I took 7 leadership courses…so you could say I’m pretty well versed in the bulleted list of ‘how to give good feedback’. The list below is from my own experience, not a leadership course, so I think it’s the best one out there.</p>

<ul>
  <li><strong>Time-sensitive</strong>: If I use a lot of filler words, tell me that day, ideally shortly after the presentation. Otherwise, the moment is lost.</li>
  <li><strong>Correct mindset and context</strong>: The feedback receiver must be ready to receive feedback (try saying that 5 times fast). This means they must be in the proper mindset, open to receiving feedback (not everyone is at all times), and in the proper environment.</li>
  <li><strong>Generalizable with specific examples</strong>: Patterns make the world go round; they allow us to handle unexpected/unforeseen. When giving feedback, tie it to a generalizable pattern and give the specific examples that violated that pattern. This helps the receiver connect the specific feedback to new future scenarios.
    <ul>
      <li>Example: A slide deck has too many colors
        <ul>
          <li>Pattern: simplicity helps people understand things</li>
          <li>Examples: slide 4, 5, 6 used 10 different colors, which distracted from the overall message</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

<p>One last point: when soliciting feedback you must act upon it or never receive feedback again. Consider the following scenario:</p>

<ul>
  <li>A coworker or leader says “I’m always open to feedback, stop by whenever, open door, drop on in, pals…”</li>
  <li>You think the team would function better if a change was made to how the team schedules work, so you stop by their office and share that with them</li>
  <li>Since you provided the feedback in a time-sensitive fashion, in the correct context, and with specific examples that are also generalizable, they received the message 100% (great job!)</li>
  <li>Nothing happens.</li>
</ul>

<p>You are not going to suggest anything to that person again. The lesson: feedback solicitation without action leaves a bad taste in mouths and shuts down any future feedback. A lose-lose.</p>]]></content><author><name>Ryan O'Farrell</name></author><category term="posts" /><category term="organizational effectiveness" /><category term="feedback" /><summary type="html"><![CDATA[Feedback - it makes the world go round, but how valuable is it and can we do it better?]]></summary></entry><entry><title type="html">How to Develop Python Code with Docker in Visual Studio Code</title><link href="https://www.ryanof.com/posts/2022-06-08-python-with-docker-vscode.html" rel="alternate" type="text/html" title="How to Develop Python Code with Docker in Visual Studio Code" /><published>2022-06-08T21:15:00-04:00</published><updated>2022-06-08T21:15:00-04:00</updated><id>https://www.ryanof.com/posts/python-with-docker-vscode</id><content type="html" xml:base="https://www.ryanof.com/posts/2022-06-08-python-with-docker-vscode.html"><![CDATA[<p><a href="#0-ensure-all-applications-are-installed">Skip to tutorial</a></p>

<h2 id="the-problem-python-on-different-computer-types-is-challenging">The problem: Python on different computer types is challenging</h2>

<p>Python’s initial learning curve is very low, but there are many unfortunate complexities when you move from <code class="language-plaintext highlighter-rouge">print(”Hello World”)</code> to projects shared across teams across computers and across time.</p>

<p>Dealing with the ‘sharing across teams across time’ problem has more-or-less been solved with git, where you can see the history of a code file, who has worked on it, and what changes they have made and why. The ‘sharing across computers’ is a problem that is much more challenging to solve due to the reliance on environments.</p>

<p>Environments allow users to install different versions of Python and different versions of packages from Python’s incredible ecosystem. An example of when this is useful: I am working two projects, one requires pandas v1.4.2, the other requires pandas 1.0.0; a separate environment for each project allows me to work these simultaneously. Issues with package versions typically do not arise during a relatively short project, but code written months or years ago can have serious package version issues if updates have been made since it was last run.</p>

<p>Environments can be documented and shared in a few different ways; in conda you use <a href="https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#sharing-an-environment" target="_blank">this method</a>. The method makes it relatively easy to recreate an environment, but it does not address the differences in computer architectures. I recently ran into a problem where an environment I created on my Windows 64bit computer failed to install on a Linux Python server. I had to manually comment-out the failed packages and install the Linux versions…annoying.</p>

<h2 id="the-outcome-repeatable-100-shareable-python-code-for-analytics-and-data-science-projects">The outcome<strong>: Repeatable, 100% shareable Python code for analytics and data science projects</strong></h2>

<p>How to solve the architecture problem? Docker! Docker allows your computer (actually any computer) to create containers that make code 100% repeatable no matter where its run. In english: Docker makes every computer seem like the same computer, so code written inside a Docker computer can run anywhere Docker can run.</p>

<p>Docker has a pretty steep learning curve, but there is a quick way to get set-up to start developing your Python code in Docker!</p>

<h2 id="how-to-run-python-files-inside-a-docker-container-in-vs-code">How to run Python files inside a Docker container in VS code</h2>

<h3 id="0-ensure-all-applications-are-installed">0. Ensure all applications are installed</h3>

<p>You’ll need:</p>

<ul>
  <li><a href="https://www.docker.com/products/docker-desktop/" target="_blank">Docker Desktop</a></li>
  <li><a href="https://code.visualstudio.com/" target="_blank">Visual Studio Code</a></li>
  <li>(Optional) a git installation for sharing your code and environment specs; I use <a href="https://github.com/ryanofarrell/public" target="_blank">GitHub</a></li>
</ul>

<h3 id="1-install-the-remote---containers-extension-in-vscode">1. Install the “Remote - Containers” extension in VSCode</h3>

<figure class="align-center">
  <img src="/assets/images/post-10/remote-containers-extension.png" alt="Remote containers extension" /></figure>

<p>I’m going to plagiarize the extension, since it explains its value proposition better than I can:</p>

<p>“The <strong>Remote - Containers</strong> extension lets you use a <a href="https://docker.com/" target="_blank">Docker container</a> as a full-featured development environment. Whether you deploy to containers or not, containers make a great development environment because you can:</p>

<ul>
  <li>Develop with a consistent, easily reproducible toolchain on the same operating system you deploy to.</li>
  <li>Quickly swap between different, separate development environments and safely make updates without worrying about impacting your local machine.</li>
  <li>Make it easy for new team members / contributors to get up and running in a consistent development environment.</li>
  <li>Try out new technologies or clone a copy of a code base without impacting your local setup.”</li>
</ul>

<h3 id="2-add-container-specification-files-to-folder">2. Add container specification files to folder</h3>

<p>In the folder you want to open in a container (aka your project folder) you can use VSCode to create the necessary Dockerfile (specifying the development environment) and a devcontainer.json files (specifying the VSCode interactivity with the development environment).</p>

<ul>
  <li>Ensure VSCode has the proper folder open; it is going to add files to the top-level of the open folder</li>
  <li>In the command pallet (Cmd+Shift+P) click the “Remote-Containers: Add Development Container Configuration Files” option</li>
</ul>

<figure class="align-center">
  <img src="/assets/images/post-10/remote-containers-add-config-files.png" alt="Add config files" /></figure>

<ul>
  <li>Select your preferred Python configuration - I used Miniconda (Python 3)</li>
</ul>

<figure class="align-center">
  <img src="/assets/images/post-10/config-files-miniconda.png" alt="Choose Python version" /></figure>

<ul>
  <li>Select your Node.js version (depending on your use case this may matter)</li>
</ul>

<figure class="align-center">
  <img src="/assets/images/post-10/config-files-node.png" alt="Choose Node version" /></figure>

<ul>
  <li>Select any optional add-ins you may need (I did not select any)</li>
</ul>

<figure class="align-right">
  <img src="/assets/images/post-10/config-files-in-folder.png" alt="The config files in your folder" /></figure>

<p>And voila, VSCode will generate the necessary file structure in the folder. You’ll see the Dockerfile and devcontainer.json have been added. I’d recommend reading through their contents since you can customize a lot more from the default values they provide you. Versions of these files from my experimentation are <a href="https://github.com/ryanofarrell/public/tree/main/projects/docker/.devcontainer" target="_blank">here</a>.</p>

<h3 id="3-open-the-project-folder-in-the-container">3. Open the project folder in the container</h3>

<p>Now that you’ve specified the development environment, you have to re-open the current folder <em>within</em> that environment. To do so, execute the ‘Open workspace in container’ command and browse to the current folder (that has the .devcontainer folder within it):</p>

<figure class="align-center">
  <img src="/assets/images/post-10/open-folder-in-container.png" alt="Open folder in container" /></figure>

<p>This will re-launch VSCode and start the container process. You’ll see a notification in the bottom right that this is happening - if you click ‘show log’ you’ll get much more information that should look like this:</p>

<figure class="align-center">
  <img src="/assets/images/post-10/vscode-output-docker-build.png" alt="VSCode output of Docker build" /></figure>

<p>You can follow along, but I want to highlight the <strong>blue</strong> text - this is actually the step that executes the Dockerfile. You can open the Dockerfile and see the one-to-one match of the steps to the commands in blue.</p>

<p>And there you have it - you are ready to write your code in a clean Docker Python environment! You can start writing .py files or .ipynb files, installing packages via conda or pip in the terminal, and running your code.</p>

<h2 id="how-to-share-your-docker-environment">How to share your Docker environment</h2>

<p>It’s one thing to develop your code inside of a container, but one of the main reasons you want to do this is so others can execute your code without any worry about packages, computer type, chip architecture, etc. This method defines the container using code in the Dockerfile, so it’s fairly straightforward for others to replicate it - all they need is the Dockerfile and the specifications of the Python environment.</p>

<h3 id="save-your-python-virtual-environment-to-an-environmentyml-file">Save your Python virtual environment to an environment.yml file</h3>

<p>With your environment activated, in the terminal type</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">conda</span><span class="w"> </span><span class="nx">env</span><span class="w"> </span><span class="nx">export</span><span class="w"> </span><span class="nt">--file</span><span class="w"> </span><span class="nx">environment.yml</span><span class="w">
</span></code></pre></div></div>

<p>This will create a file <em>environment.yml</em> that includes the entire package specifications for the currently activated environment. An example of this file is <a href="https://github.com/ryanofarrell/public/blob/main/projects/docker/environment.yml" target="_blank">here</a>.</p>

<h3 id="ensuring-your-environment-gets-installed-within-dockerfile">Ensuring your environment gets installed within Dockerfile</h3>

<p>The last thing you need to do is ensure the code in your Dockerfile that installs the Python virtual environment is uncommented. The lines you need to uncomment are:</p>

<div class="language-docker highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">COPY</span><span class="s"> environment.yml* .devcontainer/noop.txt /tmp/conda-tmp/</span>
<span class="k">RUN if</span> <span class="o">[</span> <span class="nt">-f</span> <span class="s2">"/tmp/conda-tmp/environment.yml"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then </span><span class="nb">umask </span>0002 <span class="o">&amp;&amp;</span> /opt/conda/bin/conda <span class="nb">env </span>update <span class="nt">-n</span> base <span class="nt">-f</span> /tmp/conda-tmp/environment.yml<span class="p">;</span> <span class="k">fi</span> <span class="se">\
</span>    <span class="o">&amp;&amp;</span> <span class="nb">rm</span> <span class="nt">-rf</span> /tmp/conda-tmp
</code></pre></div></div>

<p>This little snippet copies your recently-created environment.yml file to the container, then executes a conda command to install the required files into the container’s base environment. The container’s base environment ends up having the same packages as the environment from which the <em>conda env export –file environment.yml</em> command was run.</p>

<p>And, now your Python code is 100% Dockerized, and whomever has access to your Python code and the contents of your .devcontainer folder will be able to open the folder within a Docker container <a href="#3-open-the-project-folder-in-the-container">(step 3)</a> and run it simply!</p>]]></content><author><name>Ryan O'Farrell</name></author><category term="posts" /><category term="docker" /><category term="python" /><category term="visual studio code" /><summary type="html"><![CDATA[How to use Docker in VSCode to create repeatable, 100% shareable Python code for analytics and data science projects]]></summary></entry><entry><title type="html">Learnings from Software Engineering at Google, part 1: What is Software Engineering?</title><link href="https://www.ryanof.com/posts/2022-03-01-software-engineering-google-part-1.html" rel="alternate" type="text/html" title="Learnings from Software Engineering at Google, part 1: What is Software Engineering?" /><published>2022-03-01T05:15:00-05:00</published><updated>2022-03-01T05:15:00-05:00</updated><id>https://www.ryanof.com/posts/software-engineering-google-part-1</id><content type="html" xml:base="https://www.ryanof.com/posts/2022-03-01-software-engineering-google-part-1.html"><![CDATA[<figure class="align-right">
  <img src="https://images-na.ssl-images-amazon.com/images/I/41uvuuFt06S._SX379_BO1,204,203,200_.jpg" alt="SWE at Google" /></figure>

<p>This post is part 1 of an unknown number of posts I make while reading <a href="https://www.amazon.com/Software-Engineering-Google-Lessons-Programming/dp/1492082791/ref=sr_1_1?keywords=software+engineering+at+google&amp;qid=1645999024&amp;sr=8-1">“Software Engineering at Google: Lessons Learned from Programming Over Time”</a>. It will be based on a hybrid of the best practices from the book with my own knowledge, and will be applicable primarily to non-software engineers (sorry SWEs, you can just read the book).</p>

<h2 id="the-parallels-between-software-engineering-and-your-job">The parallels between software engineering and your job</h2>

<p>The fundamental goal of a software engineer (SWE) or team of SWEs is to create software that produces value for their customers. The key point is that a software engineer’s Product is software but their end state is being a <strong>value-add to their customers</strong>. The <em>engineering</em> portion of software engineering relates to the culture, processes, and tools to deliver the software (deliver the value).</p>

<p>There are probably a multitude of ways you deliver value to your customers: for the sake of this post (and subsequent posts) I will address these methods of value-delivery as your capital-p <strong>Products</strong>. These Products are all the things you do and deliver that justify your existence in a company. And following the same logic as above, the culture, processes, and tools to deliver your Products can be considered the engineering portion of your job.</p>

<h2 id="software-engineering-many-people-working-together-to-produce-improve-and-maintain-software-over-time">Software engineering: Many people working together to produce, improve, and maintain <em>software</em> over time</h2>
<p>The key distinction the book makes between programming and software engineering comes from two dimensions: duration and scalability</p>

<ul>
  <li>The <strong>duration</strong> of a programming task is short; write code so that it runs, then move on. The duration of software engineering is long; write code that can exist, be improved, and be maintained over years, maybe decades</li>
  <li>There are no requirements on <strong>scalability</strong> of programming task; it can be localized to one person; software engineering requires team scalability in addition to technical scalability (infrastructure, CPUs, etc.); rarely will a software engineering task involve only one person</li>
</ul>

<p>Because of these differences in duration and scalability, there are differences in the tools, processes, and culture required to best deliver value. You can no longer think just about issues from a programming lens; you must instead think about software engineering issues.</p>

<figure class="align-left">
  <img src="/assets/images/post-09/people-time-products.jpeg" alt="All teams are people working on products over time" /><figcaption align="center">
      All teams are people working on products over time

    </figcaption></figure>

<h2 id="a-non-technical-version-many-people-working-together-to-produce-improve-and-maintain-products-over-time">A non-technical version: Many people working together to produce, improve, and maintain Products over time</h2>
<p>If we replace ‘software’ with the generic ‘Product’ described above, you can see how the problem sets significantly overlap. You and your teams face a very similar set of problems as software engineers:</p>

<ul>
  <li>Your Products will have some usable lifespan, and over that time your Products will need to be improved, maintained, deprecated, discontinued, replaced, etc. How you engineer your Products will determine how challenging it is to manage that lifecycle.</li>
  <li>Your Products will be worked on by many different people over this time due to inevitable turnover on your team. The way your Products are engineered will have implications on how easily they scale across people.</li>
</ul>

<p>Given overlapping problems, you can learn a lot about how to improve your Product/time/people relationships by studying the best practices of software engineering.</p>

<h2 id="be-cognizant-of-tradeoffs-especially-speed-vs-scalability">Be cognizant of tradeoffs, especially speed vs scalability</h2>
<p>Tradeoffs are inevitable, but you should be transparent in your decisions and strive for a culture where changing a decision due to new information is accepted as a best practice. One of the primary tradeoffs to think about between going fast and building for the future. Consider two teams addressing a need:</p>

<ul>
  <li>Team 1 is focused only on getting the Product out the door, and therefore works in silos, does things manually, does not document how they got to outcomes, and is very dependent on one or two people</li>
  <li>Team 2 understand that the Product will need to be around for a few years, and spends time properly designing the Product, documents how to recreate key portions of the Product, cross-trains for skills sharing</li>
</ul>

<figure class="align-right">
  <img src="/assets/images/post-09/tradeoffs.jpeg" alt="tradeoffs" /><figcaption align="center">
      Be cognizant of the tradeoffs that exist when making decisions

    </figcaption></figure>

<p>There is not a universal ‘better option’; team 1’s approach likely works better in competitive first-to-market-wins environments, whereas team 2’s approach may very well scale more but they may miss the opportunity. One thing is for sure: team 1 will eventually be addressing issues in the future that they are neglecting today. This speed-vs-scalability tradeoff is one that must be made consciously, with the understanding that time must be allocated in the future pay down the cost of speed.</p>

<p>An often hidden cost of speed is the dependency on exceptional performance. “Go fast” is often used synonymously with “work harder” or “work more hours”, but <a href="/posts/2021-02-02-outcomes-are-random.html">reliance on exceptionality is not a sustainable model for teams</a>. It is best to ensure there are processes to promote sustainable pace, rather than an always-go-full-speed mentality.</p>

<h2 id="who-is-responsible-for-scalability">Who is responsible for scalability?</h2>

<p>Incentives are usually a great way to predict behavior, therefore leadership is responsible for the culture of scalability. Scalability looks different in different domains, so consider the following pattern: a team member creates a custom, high-visibility Product on a regular cadence. This person is very good at their job and enjoys creating this Product.</p>

<p>Is this team member incentivized to teach other people how to create this Product? <strong>No</strong>. Are they incentivized to document their process? <strong>No</strong>. Purely from a work-output standpoint, their value to the company is inversely related to the number of people who can also do their job (basic supply and demand). They actually are incentivized to make their job appear more difficult in order to deter anyone from learning it.</p>

<p>It falls on leadership to address these incentive problems. Some ways of doing this:</p>

<ul>
  <li>mandatory cross training on all key Products</li>
  <li>Product whiteboard sessions (equivalent to a code review, where the Product and its creation process are reviewed by the team for simplicity/accuracy)</li>
  <li>promoting knowledge sharing (creating the culture)</li>
  <li>including ‘sustainability of Product’ as an evaluation metric</li>
</ul>

<p>All of these create a top-down incentive for team members to create scalable Products.</p>

<h2 id="key-takeaways">Key takeaways</h2>

<ul>
  <li>Software engineering differs from programming in the added dimensionality of time and people</li>
  <li>Your organization also must consider the dimensions of time and people when building your Products</li>
  <li>All tradeoffs should be consciously addresses, especially the tradeoffs between speed and scalability</li>
  <li>Leadership is responsible for incentivizing scalability</li>
</ul>]]></content><author><name>Ryan O'Farrell</name></author><category term="posts" /><category term="organizational effectiveness" /><category term="leadership" /><category term="software engineering" /><summary type="html"><![CDATA[This post abstracts the software engineering principles and best practices used at Google into learnings that can be applied to all domains. Part 1 looks at chapter 1 of the book: What is Software Engineering?]]></summary></entry><entry><title type="html">A**holes and S**theads: Emotional Intelligence in Corporate America</title><link href="https://www.ryanof.com/posts/2022-01-03-emotional-intelligence-at-work.html" rel="alternate" type="text/html" title="A**holes and S**theads: Emotional Intelligence in Corporate America" /><published>2022-01-03T20:15:00-05:00</published><updated>2022-01-03T20:15:00-05:00</updated><id>https://www.ryanof.com/posts/emotional-intelligence-at-work</id><content type="html" xml:base="https://www.ryanof.com/posts/2022-01-03-emotional-intelligence-at-work.html"><![CDATA[<p>You may have heard of emotional intelligence, but I guarantee you haven’t read an article that so perfectly captures what it is, why it’s important, and how to become more emotionally intelligent…</p>

<p>…unless you’ve previously read this article, in which case: thank you for reading.</p>

<h1 id="what-is-emotional-intelligence">What is Emotional Intelligence?</h1>
<p>A 1990 paper by Peter Salovey and John D. Mayer (no relation to ‘Crash in to Me’) set the stage for defining what emotional intelligence is. The exact definition they created is:</p>

<blockquote>
  <p>The subset of social intelligence that involves the ability to monitor one’s own and others’ feelings and emotions, to discriminate among them and to use this information to guide one’s thinking and actions (Salovey and Mayer, 1990)</p>
</blockquote>

<p>From a high level, the pattern used in this definition of emotional intelligence is information gathering (monitor emotion), analyzing (discriminate different emotions), and decision making (guide actions). You may notice that this pattern very much parallel’s the pattern of most data analyses: gather data, find insights, use insight to do something; this probably has something to do with the fact that our brains are very complicated computers, but I digress. I actually prefer this snippet from the paper as a simple definition of emotional intelligence:</p>

<blockquote>
  <p>The recognition and use of one’s own and others’ emotional states to solve problems and regulate behavior (Salovey and Mayer, 1990)</p>
</blockquote>

<p>Going a level deeper, there are four main buckets of emotional intelligence that loosely follow the first definition above:</p>

<figure class="align-right">
  <img src="/assets/images/post-08/emotional-intelligence.jpeg" alt="The factors of emotional intelligence" /><figcaption align="center">
      Salovey and Mayer’s breakdown of emotional intelligence

    </figcaption></figure>

<ol>
  <li><strong>Self emotional appraisal (SEA)</strong>: How well can one sense, acknowledge, and understand <em>their own emotions</em>. Those who excel at SEA will know their emotions before other people notice them.</li>
  <li><strong>Others’ emotional appraisal (OEA)</strong>: How well can one sense, acknowledge, and understand <em>the emotions of others</em>. Those who excel at OEA will be able to read others’ emotions before those people even notice their own emotions.</li>
  <li><strong>Regulation of emotion (ROE)</strong>: How well can one <em>control their emotional state</em>, either through moderation of emotion or exacerbation of emotion.</li>
  <li><strong>Use of emotion (UOE)</strong>: How well can one <em>channel their emotions</em> towards positive support of their performance or goals</li>
</ol>

<p>People who are emotionally intelligent do well at understanding both their own emotions and the emotions of others, can control those emotions to prevent them from overwhelming themselves, and can channel the emotions to positive uses. Sounds like a pretty useful skill to have in the workplace!</p>

<h1 id="the-benefits-of-emotional-intelligence-at-work">The Benefits of Emotional Intelligence at Work</h1>

<p>There have been quite a few studies and reports about the effect of emotional intelligence on all aspects of work performance, satisfaction, turnover, etc.</p>

<p><a href="https://www.sciencedirect.com/science/article/pii/S1048984302000991?via%3Dihub" target="_blank">Chi-Sum Wong and Kenneth Law in 2002</a> found a complicated yet positive relationship between emotional intelligence and job outcomes, factoring in the emotional labor required for each job (emotional labor is the effort required to present a specific emotion at work; think of a flight attendant being nice all the time compared to an assembly line worker):</p>

<ul>
  <li>Job performance is significantly correlated with emotional intelligence and moderated by emotional labor</li>
  <li>Emotional intelligence has a strong positive effect on job satisfaction regardless of the emotional labor required of the job.</li>
  <li>Emotional intelligence might only have a desirable effect on organizational commitment and turnover intention in jobs that require high emotional labor while the effect is undesirable in jobs that require low emotional labor (may be explained by the fact that highly emotionally intelligent employees may be put off by a lack of emotional labor required at their job)</li>
</ul>

<figure class="align-center">
  <img src="/assets/images/post-08/wong-law-moderated.jpeg" alt="EI is moderated by emotional labor" /><figcaption align="center">
      Wong &amp; Law’s concept of emotional labor moderating the EI-performance relationship

    </figcaption></figure>

<p>The Emotional Intelligence Consortium (a real thing, believe it or not) published <a href="https://www.eiconsortium.org/reports/business_case_for_ei.html" target="_blank">19 examples of emotional intelligence financially benefitting businesses</a> - some highlights:</p>
<ul>
  <li>Experienced partners in a multinational consulting firm were assessed on the emotional intelligence competencies plus three others. Partners who scored above the median on 9 or more of the 20 competencies delivered $1.2 million more profit from their accounts than did other partners – a 139 percent incremental gain</li>
  <li>In a national insurance company, insurance sales agents who were weak in emotional competencies such as self-confidence, initiative, and empathy sold policies with an average premium of $54,000. Those who were very strong in at least 5 of 8 key emotional competencies sold policies worth $114,000</li>
  <li>The Air Force found that by using emotional intelligence to select recruiters, they increased their ability to predict successful recruiters by nearly three-fold. The immediate gain was a saving of $3 million annually. These gains resulted in the Government Accounting Office submitting a report to Congress, which led to a request that the Secretary of Defense order all branches of the armed forces to adopt this procedure in recruitment and selection</li>
</ul>

<figure class="align-left">
  <img src="/assets/images/post-08/ahangar-ei-executives.jpeg" alt="High EI executives perform better" /><figcaption align="center">
      Ahangar’s results that high-EI executives perform better

    </figcaption></figure>

<p>A <a href="https://www.researchgate.net/publication/221923491_Emotional_Intelligence_The_Most_Potent_Factor_of_Job_Performance_Among_Executives" target="_blank">2012 study by Reza Gharoie Ahangar</a> examined the relationship between emotional intelligence and job performance for 200 Iranian executives and found significant relationships between higher emotional intelligence and better performance.</p>

<p>And a <a href="https://www.frontiersin.org/articles/10.3389/fpsyg.2020.00240/full#h4" target="_blank">2020 study of 400 secondary school leaders in Pakistan</a> found a strong correlation between emotional intelligence and job satisfaction (Suleman, Ali Syed, Mahmood, Hussain)</p>

<p>Phil Knight, the founder of Nike, wrote a memoir of his company’s journey from founding to IPO (Shoe Dog, a great read) and almost every problem described within was an emotional problem: his emotions, his family’s emotions, his team’s emotions, the athlete’s emotions. This is why emotional intelligence is strongly related to success: the ability to sense emotions (yours and others), understand the causes, and channel those emotions in a positive direction is immensely powerful in moving an organization forward. It’s often not the problems that prevent progress, it’s people’s emotion-driven objections with the solutions.</p>

<p>There are likely hundreds of other studies, reports, publications supporting the link between emotional intelligence and job outcomes (performance, satisfaction, turnover, etc.), and outside of work emotional intelligence is obviously an invaluable skill as well. If these studies are true, what can be done to get better?</p>

<h1 id="how-to-become-more-emotionally-intelligent">How to Become More Emotionally Intelligent:</h1>

<figure class="align-right">
  <img src="https://cdn0.tnwcdn.com/wp-content/blogs.dir/1/files/2009/12/pyramid-of-shit-1.jpg" alt="High EI executives perform better" /><figcaption align="center">
      A**holes and s**theads

    </figcaption></figure>

<p>Stop viewing people as a**holes and s**theads. Raise your hand if you’ve seen this cartoon before:</p>

<p>While juvenile, the cartoon represents a culture of distrust and a lack of empathy that exists at many companies. Managers often view their teams as incompetent, and direct reports only see the worst of their managers. With this in mind, let me propose a more empathetic way of viewing one another:</p>

<ul>
  <li>You are a manager. You try not to let busy work get to your team and handle many simple incoming requests. You do your best to shield them from meetings and represent your division at important cross-divisional meetings. You are frustrated because your direct reports seem to not understand the business problems, and take too long to turn around the things you ask them.
    <ul>
      <li><strong>An empathetic view</strong>: could it be the case that your direct reports feel like they are left in the dark on direction/priority because they do not get to hear the important conversations that occur in the meetings? Or that they don’t get the chance to work on their skills because all of the simple requests are filtered out before they get to them; the only requests they get are the most challenging, which they are underprepared for due to lack of practice?</li>
    </ul>
  </li>
  <li>You look at your manager and think about the day you get to them her you quit. All they do is keep you in the dark then dump huge projects on you with no context and a tight timeline. Then, they take your work and present it to leadership and get all the credit
    <ul>
      <li><strong>An empathetic view</strong>: could it be the case that your manager actually shields you from a lot of really terrible work, and the stuff that is left over may be the best of the worst? Or that they have advocated for you to be able to present your projects to leadership, but leadership has such tight timelines that the ‘presentation’ becomes a 10-minute grilling session that would seriously affect the motivation of an individual contributor?</li>
    </ul>
  </li>
</ul>

<p>So how do we bridge the gap between current state (a**holes and s**theads) and a more empathetic view? <strong>Feedback loops and a commitment to understanding</strong>.</p>

<p>Feedback loops are an immensely powerful tool for change. Organizations without feedback loops are doomed to remain stationary, whereas ones with feedback loops will inevitable evolve over time (not all feedback loops cause positive change, but that is a different conversation).</p>

<p>How do feedback loops build emotional intelligence? Consider this snippet from the first section of this post:</p>

<blockquote>
  <p>From a high level, the pattern used in this definition of emotional intelligence is <strong>information gathering</strong> (monitor emotion), <strong>analyzing</strong> (discriminate different emotions), and <strong>decision making</strong> (guide actions). You may notice that this pattern very much parallel’s the pattern of most data analyses: gather data, find insights, use insight to do something; this probably has something to do with the fact that our brains are very complicated computers, but I digress. - Me, 1,000 words ago</p>

</blockquote>

<figure class="align-left">
  <img src="/assets/images/post-08/feedback-loop.jpeg" alt="Feedback loops improve EI" /><figcaption align="center">
      Feedback loops with commitments to understanding improve EI

    </figcaption></figure>

<p>Feedback loops are the unavoidable first step in this pattern: information gathering. People will not evolve unless they receive feedback that evolution is necessary; your manager will not change unless they receive feedback that their current method is causing problems; your team will not get better unless you start the hard conversation about performance.</p>

<p>With a feedback loop in place, there also must be a concerted effort towards <strong>understanding the feedback</strong>. The feedback you receive must not be discarded or ignored; you must make an effort to understand <strong>why</strong> the feedback exists, which requires an exercise in reconciling perspectives and worldviews. Some of these reconciliations may be:</p>

<ul>
  <li>Why does your manager think you are underperforming (their perspective) when you are the rockstar of the team (your perspective)</li>
  <li>Why does your report think your management style is suffocating (their perspective) when you do your best to give them room (your perspective)</li>
</ul>

<p>To reconcile the perspectives you must put yourself in other people’s shoes to understand where their perspective and your perspective differ. Reality is likely somewhere in the middle (it almost always is), but the process of evaluating someone else’s worldview will cause you to better understand their emotions in future situations.</p>

<p>Over time the process of <em>feedback loop → worldview reconciliation → understanding other perspective</em> will become second nature, and considering others’ perspectives and emotions will become a subconscious part of your interactions at work…making you a more emotionally intelligent person.</p>]]></content><author><name>Ryan O'Farrell</name></author><category term="posts" /><category term="organizational effectiveness" /><category term="emotional intelligence" /><summary type="html"><![CDATA[What is emotional intelligence, why does it matter, and how to get better]]></summary></entry><entry><title type="html">How to solve problems at work</title><link href="https://www.ryanof.com/posts/2021-10-02-problem-solving.html" rel="alternate" type="text/html" title="How to solve problems at work" /><published>2021-10-02T11:00:00-04:00</published><updated>2021-10-02T11:00:00-04:00</updated><id>https://www.ryanof.com/posts/problem-solving</id><content type="html" xml:base="https://www.ryanof.com/posts/2021-10-02-problem-solving.html"><![CDATA[<p>In a corporate environment, problem solving is the key to standing out, making an impact, and getting ahead. In my experience, almost all problem solving follows the below three phases, typically in order. The three phases are:</p>

<ol>
  <li>
    <p><strong>Definition</strong>: The problem needs to be defined</p>
  </li>
  <li>
    <p><strong>Desire</strong>: There must be desire to solve the problem</p>
  </li>
  <li>
    <p><strong>Delivery</strong>: The company must deliver a solution to the problem</p>
  </li>
</ol>

<figure class="align-center">
  <img src="/assets/images/post-07/definition-desire-delivery.jpeg" alt="Definition, desire, and delivery" /><figcaption align="center">
      The three steps to problem solving at work

    </figcaption></figure>

<h1 id="definition">Definition</h1>

<p>Problems cannot be solved until they are defined.</p>

<p>Problems typically start as anecdotes, but they cannot stay as anecdotes forever. Definition usually occurs when good analysts piece together anecdotes into a compelling data story.</p>

<p>Problems can be defined in more than one way, and it is best to define the problem in terms of the decision making audience:</p>

<ul>
  <li>
    <p>An executive will care about top- and bottom-line impact</p>
  </li>
  <li>
    <p>An individual contributor will care a out how their lives can be easier</p>
  </li>
</ul>

<p>Problem definitions should be unimpeachable - they need to be known as ‘the truth’, filled with facts and data.</p>

<p>Somtimes it is better to decouple the problem definition from the problem solution; getting agreement on a definition is easier when the solution is not also there as a potential punching bag.</p>

<h1 id="desire">Desire</h1>

<p>Problem solving can only occur when there is desire to solve the problem.</p>

<p>Organizations also need to want to solve their problems. Believe it or not, there are many reasons people would not want to solve a problem, including:</p>

<ul>
  <li>
    <p>They have other problems that are higher priority in their mind (I’ll get to that later)</p>
  </li>
  <li>
    <p>They currently benefit from the problem, either through job security or politics or self-importance (my team gets attention from executives because of the problem)</p>
  </li>
  <li>
    <p>They are not incentivised to solve the problem (they don’t pay me to deal with this)</p>
  </li>
  <li>
    <p>They may not agree with the problem definition (that’s not the problem…this is the problem)</p>
  </li>
  <li>
    <p>They may disagree that the problem is a problem (it’s not a bug it’s a feature)</p>
  </li>
</ul>

<p>All of these challenges exist, and any one can be big enugh to derail the problem solving process. People typically do not outright say their reason for not having 100% desire, so you often need to have candid conversations to draw out these reasons. This takes intuition, experience, and understanding of people’s motivations.</p>

<p>Beware of fake desire: desire needs to be genuine in order to actually solve the problem. Fake desire is hard to spot, but a classic symptom is people who are comfortable identifying a problem around peers or subordinates, but do not use the same language around their superiors.</p>

<h1 id="delivery">Delivery</h1>

<p>Delivery/execution is the work done to actually solve the problem; the other two are focused on organizational alignment.</p>

<p>This step is much larger than the other two and is what companies should be focused on. If companies focus on the other two then they will be unsuccessful - organizational alignment should not take more work than solution delivery.</p>

<p>There are many ways to fail in delivery: bad project management, bad ideas, poor execution, not 100% desire by all required parties, changing of priorities. Getting to a point where delivery issues are the main problems of a company can be viewed as a good thing, since that means that the organizational alignment portion of the problem solving process is effective and delivery improvement can be the focus.</p>]]></content><author><name>Ryan O'Farrell</name></author><category term="posts" /><category term="organizational effectiveness" /><category term="problem solving" /><summary type="html"><![CDATA[Problem solving requires definition, desire, and delivery]]></summary></entry><entry><title type="html">Who Really Won the 2020* Tokyo Olympics?</title><link href="https://www.ryanof.com/posts/2021-08-10-who-really-won-2020-toyko-olympics.html" rel="alternate" type="text/html" title="Who Really Won the 2020* Tokyo Olympics?" /><published>2021-08-10T21:40:00-04:00</published><updated>2021-08-10T21:40:00-04:00</updated><id>https://www.ryanof.com/posts/who-really-won-2020-toyko-olympics</id><content type="html" xml:base="https://www.ryanof.com/posts/2021-08-10-who-really-won-2020-toyko-olympics.html"><![CDATA[<p>So we know USA won overall medals and gold medals, but what are the deeper cuts? Which countries outperformed their population? Which events did Europe stand out in? What drove USA’s medal victory over China?</p>

<p>To analyze this, I used medal points: bronze medals receive 1 point, silver medals receive 2, and gold receive 3. Also, the Russian Olympic Committee is being treated as the representatives from the country of Russia (well, duh).</p>

<p>Code for this project is <a href="https://github.com/ryanofarrell/public/tree/main/projects/olympics" target="_blank">here</a>.</p>

<h1 id="superlatives">Superlatives</h1>

<ul>
  <li><strong>Best country</strong>: USA!</li>
  <li><strong>Most efficient country</strong>: New Zealand</li>
  <li><strong>Best program</strong>: USA swimming &amp; diving</li>
  <li><strong>Most efficient program</strong>: New Zealand canoe &amp; rowing</li>
  <li><strong>Best continent</strong>: Europe</li>
  <li><strong>Most efficient continent</strong>: Oceania</li>
  <li><strong>Best continent program</strong>: European cycling (winning 75% of all medal points)</li>
  <li><strong>Most efficient continent program</strong>: Oceania canoe &amp; rowing</li>
</ul>

<h1 id="country-winners">Country Winners</h1>

<figure class="align-center">
  <img src="/assets/images/post-06/country_points.jpeg" alt="Country winners" /><figcaption align="center">
      Top 15 medal point countries, 2020 Tokyo Olympics

    </figcaption></figure>

<p>Let’s start with the overall medal point count: USA comes out on top with 230 points, ahead of China’s 193 and Russia’s 139. USA also eeked out the gold medal count win with 39 golds compared to China’s 38 golds.</p>

<figure class="align-center">
  <img src="/assets/images/post-06/country_points_perPop.jpeg" alt="Country efficiency winners" /><figcaption align="center">
      Top 15 medal efficiency countries, 2020 Tokyo Olympics

    </figcaption></figure>

<p>On a per-population basis, things don’t look as bright for the Americans who fall out of the top 15. In fact, there are two significant outliers with New Zealand (population 4.5M) and Jamaica (population 2.7M) standing out above a series of mostly-European countries. For context, USA scores 7.2 points per 10M population, good for 51st overall.</p>

<p>Note that this data has a minimum medal point threshold of 15 – without that threshold the country of San Marino (population 32k) would blow the competition away with their 4 medal points equating to 1,221 points per 10M population.</p>

<h1 id="country-event-winners">Country Event Winners</h1>

<figure class="align-center">
  <img src="/assets/images/post-06/countryEvent_points.jpeg" alt="Country-event winners" /><figcaption align="center">
      Top 15 country points per event, 2020 Tokyo Olympics

    </figcaption></figure>

<p>USA absolutely dominated the swimming and diving competitions, receiving 1.5 points per event – equivalent of winning a gold in every other event. The top event winners all seem to be the top medal getters, with the exception being the British and Dutch cycling teams, which won 1.3 and 1.1 points per event, respectively.</p>

<figure class="align-center">
  <img src="/assets/images/post-06/countryEvent_points_perPop.jpeg" alt="Country-event efficiency winners" /><figcaption align="center">
      Top 15 country points per event efficiency, 2020 Tokyo Olympics

    </figcaption></figure>

<p>When normalizing for population, one again New Zealand and Jamaica stand out. New Zealand won 6 golds and 2 silvers in canoe &amp; rowing events, outstanding for a country with as many citizens as Detroit. Jamaica athletics (track &amp; field) may bring back memories of Usain Bolt and all the great Jamaican sprinters over the years – this year they continued to churn out an impressive amount of medals for such a small country. Take note of the European cycling performers – numbers 3, 4, 5, and 11 on the top 15 are European cycling programs.</p>

<h1 id="continent-winners">Continent Winners</h1>

<figure class="align-center">
  <img src="/assets/images/post-06/continent_points.jpeg" alt="Continent winners" /><figcaption align="center">
      Medal points by continent, 2020 Tokyo Olympics

    </figcaption></figure>

<p>Europe winning this makes a lot of sense when you think about it: many very developed countries, each with dreams of winning medals, all counted together. I was surprised to see Oceania out-achieve both South America and Africa.</p>

<figure class="align-center">
  <img src="/assets/images/post-06/continent_points_perPop.jpeg" alt="Continent efficiency winners" /><figcaption align="center">
      Medal efficiency by continent, 2020 Tokyo Olympics

    </figcaption></figure>

<p>Oceania is a runaway winner on continent medals per 100M population. For being the least populated continent in the Olympics (population 43M; Antarctica did not participate this year) they really out-punched their weight. For context, scaling Oceania up to the size of Asia would mean that they would win 13,900 medal points, equivalent to over 6 total Olympic games.</p>

<h1 id="continent-event-winners">Continent Event Winners</h1>

<figure class="align-center">
  <img src="/assets/images/post-06/contEvent_points.jpeg" alt="Continent-event winners" /><figcaption align="center">
      Continent points per event, 2020 Tokyo Olympics

    </figcaption></figure>

<p>Looking at the event performance for each continent, it is clear why Europe won the most medals. They are 1st 9 of 11 event groups, with runaway victories in cycling and canoe &amp; rowing events.</p>

<p>Think about what winning 4.4 medal points per cycling event means: on average Europe finished with gold, bronze, and 1/5th of silver.</p>

<figure class="align-center">
  <img src="/assets/images/post-06/contEvent_points_perPop.jpeg" alt="Continent-event efficiency winners" /><figcaption align="center">
      Continent points per event per 100M population, 2020 Tokyo Olympics

    </figcaption></figure>

<p>Normalizing by population, Oceania once again dominates the results. The Australian and New Zealand swimmers stand out along with the aforementioned canoe &amp; rowing programs.</p>

<h1 id="usa-vs-china">USA vs China</h1>

<figure class="align-center">
  <img src="/assets/images/post-06/chinaVsUsa.jpeg" alt="USA vs China" /><figcaption align="center">
      China vs USA medal points by gender and event, 2020 Tokyo Olympics

    </figcaption></figure>

<p>I took a deeper dive into the USA vs China medal race to see where each country was getting their medals from – here’s what I found:</p>

<ul>
  <li>China doubled-up USA in artistry (gymnastics), driven completely from 0 points by USA’s men (the women tied with China)</li>
  <li>USA dominated China in athletics (track &amp; field), winning 55 points to China’s 11; 35 of those USA points were won by female or mixed competitors</li>
  <li>While China was a respectable second place in swimming and diving, USA was #1 by a long shot, gaining 22 points on China in those events</li>
  <li>China clawed back 10 points by finishing gold-silver in mixed doubles badminton and table tennis…who knew those were Olympic sports!</li>
</ul>

<h1 id="event-groupings">Event Groupings</h1>

<p>The lower-level events were grouped based on the following rules:</p>

<h3 id="artistry">Artistry</h3>
<p>Gymnastics, Artistic Swimming, Equestrian</p>

<h3 id="athletics">Athletics</h3>
<p>Athletics (track &amp; field), Modern Pentathlon, Triathlon</p>

<h3 id="canoe--rowing">Canoe &amp; Rowing</h3>
<p>Canoe, Rowing</p>

<h3 id="combat-skill">Combat Skill</h3>
<p>Taekwondo, Karate, Judo</p>

<h3 id="combat-striking">Combat Striking</h3>
<p>Fencing, Boxing</p>

<h3 id="shooting--archery">Shooting &amp; Archery</h3>
<p>Shooting, Archery</p>

<h3 id="swimming--diving">Swimming &amp; Diving</h3>
<p>Swimming, Diving</p>

<h3 id="traditional--team">Traditional &amp; Team</h3>
<p>Baseball, Softball, Beach Volleyball, Field Hockey, Handball, Rugby, Soccer, Volleyball, Water Polo, Basketball, Tennis, Golf, Table Tennis, Badminton</p>

<h3 id="weightlifting--wrestling">Weightlifting &amp; Wrestling</h3>
<p>Weightlifting, Wrestling</p>]]></content><author><name>Ryan O'Farrell</name></author><category term="posts" /><category term="olympics" /><category term="data analysis" /><summary type="html"><![CDATA[Which countries outperformed their population? Which events did Europe stand out in? What drove USA’s medal victory over China? Find out!]]></summary></entry><entry><title type="html">You should build something</title><link href="https://www.ryanof.com/posts/2021-07-14-you-should-build-something.html" rel="alternate" type="text/html" title="You should build something" /><published>2021-07-14T21:07:00-04:00</published><updated>2021-07-14T21:07:00-04:00</updated><id>https://www.ryanof.com/posts/you-should-build-something</id><content type="html" xml:base="https://www.ryanof.com/posts/2021-07-14-you-should-build-something.html"><![CDATA[<p>Catchy title, huh? Now you’re hooked! Blogging 101…</p>

<p>Now that you’re here, this post is about why <strong>everyone should build something, anything, with technology</strong>. Something big, something small, something useful, something fun, anything to get real-world experience using technology. Two reasons:</p>

<ul>
  <li>Building something gives you knowledge and creates proof of knowledge</li>
  <li>Building something teaches you about technology, the best leverage available</li>
</ul>

<h1 id="building-gives-you-knowledge-and-proof">Building gives you knowledge (and proof)</h1>

<figure class="align-right">
  <img src="/assets/images/post-05/trade.jpeg" alt="Trade offer" /><figcaption align="center">
      The gentleman’s B

    </figcaption></figure>
<p>The <strong>“gentleman’s B”</strong> concept was fairly common in my MBA program. It was a unwritten and unspoken contract between students and teachers, where the student ‘agrees’ to put forth an adequate-yet-uninspiring amount of effort (going to class, not being disruptive, completing the assignments, not bombing the tests) and the teacher ‘agrees’ to not give them a grade below a B.</p>

<p>This is one of the problems with university, and generally all credentials. <strong>You end up with approximately the same ‘proof of knowledge’ as everyone else</strong>: a diploma. You can have a good GPA, but GPAs are often inflated and buoyed by easy classes (Wildlife Issues was a favorite at UF undergrad). Extracurriculars and leadership positions are important, but often those are popularity contests.</p>

<p>Much of your career success is the result of people believing you can deliver, resulting in you getting more opportunities. The key thing is <strong><em>belief</em></strong>; it doesn’t matter if you can <strong>actually</strong> deliver as long as decision makers <strong>believe</strong> you can. Belief gets you opportunities, but <strong>belief requires communication</strong>. Take the below image: when your ability exceeds your communication of said ability, additional ability is un-communicated and, in a sense, wasted.</p>

<figure class="align-center">
  <img src="/assets/images/post-01/comm-ineff.jpeg" alt="Communication inefficiency" /><figcaption align="center">
      When your actual ability exceeds your ability to communicate, ability is wasted

    </figcaption></figure>

<p><a href="/posts/2021-01-12-why-im-starting-to-write.html" target="_blank">One of the reasons I started this blog</a> was to shrink the communication inefficiency in my life. In a sense, this blog is me building something tangible that (hopefully) communicates that I have the ability to think complex thoughts, put together an argument, and tell a compelling story.</p>

<p>(If you’ve read this far, let me know if it’s working!)</p>

<p>Technology and code is the truest blank canvas there is. You start with an idea and the rest depends on your knowledge and resourcefulness. If you can take an idea or problem, no matter how small or trivial it feels, and deliver a solution you have created tangible <strong>proof-of-knowledge</strong> that communicates your ability the way no degree or certification can ever duplicate.</p>

<figure class="align-left">
  <img src="/assets/images/post-05/t-shape-skills.jpeg" alt="T-shape skills" /><figcaption align="center">
      T-shaped skills are broad in many areas and deep in one specialty

    </figcaption></figure>

<p>When you build you also will start to develop T-shaped skills: you still have your deep specialized knowledge in a specific area (the vertical line in the T), but you will be adding broad-yet-shallow expertise in adjacent skills (the horizontal portion of the T).</p>

<p>You will likely learn some combination of front-end web development, server-side data processing and serving, code versioning, deployment, APIs, HTTP requests, mobile development, and much more. These are all skills that are used throughout the entire world in every company and every application you interact with on a daily basis. Knowing even a moderate amount about the technology you use and rely on is a huge help in understanding <strong>how important technology is</strong> and <strong>how it can be used to scale your impact</strong>.</p>

<p>The best part about learning these technology skills is that <strong>you will learn them quickly</strong>. Learning is always fastest when learning new things, and getting 25% competent in new technology skills is much easier than getting the final 25% competent in your specialized skill.</p>

<figure class="align-center">
  <img src="/assets/images/post-05/diminishing-returns.jpeg" alt="Diminishing returns" /><figcaption align="center">
      Learning is fastest prior to the point of diminishing returns

    </figcaption></figure>

<h1 id="technology-is-how-you-scale-your-impact">Technology is how you scale your impact</h1>

<p>Even if your job is not directly in technology, <strong>your impact is derived from technology</strong>. Consider this blog: all I have full ownership over is the words I am writing. The platform, WordPress, is built on technology that allows me to scale my thoughts out to millions of people (yes, there are millions of people reading this).</p>

<p><strong>Technology is the best form of leverage to scale your impact and ideas</strong>. If my ideas were shared only with my friends my potential audience would be small (<em>ooh…self-burn</em>). Using technology, the audience is as many people as can read English.</p>

<p>A <a href="https://twitter.com/naval/status/1002103360646823936" target="_blank">very smart Twitter thread</a> by venture capitalist <a href="https://nav.al/" target="_blank">Naval Ravikant</a> talks about the power and sources of leverage. He offers three sources of leverage:</p>

<ul>
  <li><strong>Capital</strong> (have more money)</li>
  <li><strong>Labor</strong> (have more people working for you)</li>
  <li><strong>Technology</strong> (he calls this ‘code and media’)</li>
</ul>

<p>Technology gives you leverage, and that leverage is <strong>cost-effective</strong> and <strong>permissionless</strong> (ideas also stolen from above thread). Diving in to those concepts:</p>

<ul>
  <li>Capital is, by its nature, the polar opposite of cost-effective and typically requires someone’s permission (someone has to invest in your ideas or project)</li>
  <li>Labor requires permission, since people need to follow you for you to be their leader. Labor is also not cheap.</li>
</ul>

<p>Let’s go deep in how technology fares with cost and permission:</p>

<ul>
  <li><strong>Technology is cost-effective</strong>: It has never been cheaper to build with technology. You can build a web app completely in the cloud with pretty much all cloud providers ($<a href="https://firebase.google.com/pricing" target="_blank">minimal</a>, my favorite is <a href="https://firebase.google.com/firebase-and-gcp" target="_blank">GCP Firebase</a>), test-deploy locally on a <a href="https://www.raspberrypi.org/" target="_blank">Raspberry Pi</a> (<a href="https://www.raspberrypi.org/products/raspberry-pi-4-model-b/" target="_blank">$35</a>), or host it on <a href="https://www.heroku.com/home" target="_blank">Heroku</a> (<a href="https://www.heroku.com/pricing" target="_blank">$free</a>). You can develop a iOS and Android apps using <a href="https://expo.io/" target="_blank">Expo</a>, with iterative re-loading and testing. You can deploy APIs and make some money on the side with <a href="https://rapidapi.com/" target="_blank">RapidAPI</a>. You can build machine learning models using <a href="https://scikit-learn.org/stable/" target="_blank">scikit-learn</a> in Python ($free).</li>
  <li><strong>Technology is permissionless</strong>: You are completely free to build whatever you want, wherever you want, however you want (within the laws of this country). You can build without anyone thinking your idea is good. You can build regardless if you are good at building. You can build while rocking your baby to sleep. You can build then stop then build more when you have more time. There are no rules; you need no permission.</li>
</ul>
<figure class="align-right">
  <img src="/assets/images/post-05/impact.jpeg" alt="Impact of technology" /><figcaption align="center">
      Small gains in tech skills produces large increases in impact

    </figcaption></figure>

<p>With technology being the best source of leverage available on planet Earth, getting somewhat competent in the tools, concepts, and methods used throughout technology can be a huge multiplier on your impact. In a very real sense, understanding technology enables you to bridge the gap between ideas and solutions, even if you are not the one who ends up building the solution systems. If you do end up finding a true calling building things with technology, the entire world opens up to you, with the only constraint being the problems you choose to solve.</p>

<p>To summarize, building with technology is a no-lose proposition:</p>

<ul>
  <li>Worst case you learn fundamental tech concepts used throughout society while showing you can deliver</li>
  <li>Best case you learn to capitalize on the best form of leverage available to multiply your impact</li>
</ul>]]></content><author><name>Ryan O'Farrell</name></author><category term="posts" /><category term="building" /><category term="growth" /><category term="technology" /><summary type="html"><![CDATA[Building things with technology is a differentiator that teaches you about the best form of leverage available on Earth.]]></summary></entry><entry><title type="html">My Review: Georgia Tech’s Online Masters in Analytics</title><link href="https://www.ryanof.com/posts/2021-04-28-my-review-omsa.html" rel="alternate" type="text/html" title="My Review: Georgia Tech’s Online Masters in Analytics" /><published>2021-04-28T10:43:00-04:00</published><updated>2021-04-28T10:43:00-04:00</updated><id>https://www.ryanof.com/posts/my-review-omsa</id><content type="html" xml:base="https://www.ryanof.com/posts/2021-04-28-my-review-omsa.html"><![CDATA[<p>In a week or two I am graduating from Georgia Tech’s Online Master of Science in Analytics (OMSA) program. This post could be considered my ‘review’ of the program, although it is more of a recap and summarization and less of a critique…enjoy!</p>

<h1 id="why-i-decided-on-omsa">Why I decided on OMSA</h1>

<p>I decided I wanted to get a second masters degree in mid 2018 when I was working for IBM around some incredibly smart people who had so much technical knowledge. I was in a project manager role and had a strong sense of imposter syndrome trying to wrap my head around what it is I was supposed to be managing (I still don’t know what an <a href="https://en.wikipedia.org/wiki/OLAP_cube" target="_blank">analytics cube</a> is).</p>

<p>When considering the <a href="https://expertprogrammanagement.com/2017/06/the-5-types-of-power/" target="_blank">sources of power</a> outlined below, I tend to think that the ones in the ‘personal power’ category as more authentic and legitimate, and I have always admired those who have strong expertise in technical subjects. I decided I wanted to get more technical depth, and have always enjoyed analyzing data, so figured an analytics degree would be up my alley.</p>

<figure class="align-left">
  <img src="/assets/images/post-04/5-types-of-power.jpeg" alt="5 types of power" /><figcaption align="center">
      The 5 types of power

    </figcaption></figure>

<p>I am already a graduate of a 2-year full-time MBA so more full-time school was a no-go. Conveniently, Georgia Tech had a fully-online 2ish year analytics program that was very affordable, so I got together my resume, asked for recommendations, and applied.</p>

<p>I ended up getting accepted to OMSA in fall of 2018 to start in the Fall 2019 term. I was somewhat disappointed since I wanted to start right away, but luckily there was the option to take some courses for credit prior to starting in the program (more on that later).</p>

<h1 id="my-omsa-experience-the-good-the-meh-and-the-bad">My OMSA experience: The good, the meh, and the bad</h1>

<h2 id="the-good">The good</h2>
<ul>
  <li><strong>Exposure to some of the best professors in the country</strong>: Georgia Tech is ranked as the <a href="https://www.usnews.com/best-graduate-schools/top-engineering-schools/eng-rankings" target="_blank">#8 best engineering school</a> in the country; the OMSA program is a combination of industrial engineering courses (<a href="https://www.usnews.com/best-graduate-schools/top-engineering-schools/industrial-engineering-rankings" target="_blank">#1 in US</a>), computer science and engineering (<a href="https://www.usnews.com/best-graduate-schools/top-engineering-schools/computer-engineering-rankings" target="_blank">#5 in US</a>), and business information systems (<a href="https://www.usnews.com/best-graduate-schools/top-business-schools/information-systems-rankings" target="_blank">#5 in US</a>)…can’t beat that</li>
  <li><strong>Exposure to fascinating content and concepts</strong>: This may be applicable to all analytics degrees, but it’s worth emphasizing how much I’ve learned. Before starting, machine learning was more like the movie Smart House; now, I know <a href="/posts/2021-03-11-how-to-improve-your-life-with-optimization.html" target="_blank">it’s all just optimization in disguise</a> (well, mostly)</li>
</ul>

<!-- Courtesy of embedresponsively.com -->

<div class="responsive-video-container">
    <iframe src="https://www.youtube-nocookie.com/embed/RxUZb3WnTpo" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
  </div>

<ul>
  <li><strong>The cost</strong>: The degree cost me $10,430. Compare that to the other top programs <a href="https://www.kdnuggets.com/2020/09/best-online-masters-data-science-analytics-online.html" target="_blank">here</a>: Carnegie Mellon ($67k), Cal Berkeley ($73k), Harvard ($35k). It’s incredible that the program is so affordable.</li>
  <li><strong>The Micromasters option</strong>: I had two semesters of waiting between when I got accepted to when I started the program. Conveniently, GaTech offers three OMSA courses via a Micromasters certificate that counts for credit towards your degree. I took those courses before starting the actual program, and scored well enough to get transfer-credit for all three. Taking the courses through the MM is cheaper than taking the same course through GaTech, but there is no guarantee you will get credit (GaTech is weirdly vague about what grade you need in the MM courses to get transfer credit).</li>
  <li><strong>The Slack community</strong>: One of the cons of a fully-online program is no hallway conversations, classroom discussions, etc. OMSA’s equivalent is a very active Slack workspace, with channels for all the classes. While I did not participate very often in the main discussions, I found the Slack very valuable for reading others’ thoughts and getting help in my classes.</li>
</ul>

<h2 id="the-meh">The meh</h2>
<ul>
  <li><strong>I self-taught many things</strong>: Without the financial skin-in-the-game, I doubt I would have had the discipline to actually learn these concepts, but in the online setting I was often googling the concepts and learning on my own. A few classes I didn’t even watch the lectures at all, and learned while doing the homework and projects. Comparing to my MBA, where in-class discussion of concepts was a key value-add, I wonder if those discussions even occur in the in-person version of an analytics degree, since concepts are more technical/math-heavy.</li>
  <li><strong>I paid for a piece of paper</strong>: I will soon have three expensive pieces of paper. I enjoy learning, but I realize there are better ways to learn than lecture-homework-lecture-project-exam-grade-repeat. This is (99.99% chance) my last formal degree – the rest will be learning-by-doing with hobbies/personal projects.</li>
  <li><strong>It is a lot of work</strong>: Expected, but worth noting. I spent many weeknights staying up late watching lectures or doing homework, and basically dedicated one of my weekend days to the program. I am lucky to have a great support system which made things easier, but it definitely is not for the faint of heart; expect it to be a grind.</li>
</ul>

<h2 id="the-bad">The bad</h2>
<ul>
  <li><strong>Some courses were flat-out bad</strong>: This happens in academia, but is still worth noting. Typos in homeworks, boring/bland lectures, and confusing test questions were not common but existed in pockets.</li>
  <li><strong>I did not take advantage of office hours</strong>: I didn’t once participate in office hours (not a complaint on the program; I never prioritized it), so I felt somewhat disconnected from the instructors. I mostly used Slack channels to ask questions on homework to my peers.</li>
</ul>

<h1 id="highlights">Highlights</h1>
<h2 id="favorite-classes">Favorite classes</h2>
<ul>
  <li><strong>Computing for Data Analytics</strong> (CSE6040): The first course I took in spring 2019. Best exam format (24-hour Jupyter notebooks with hidden test-case cells; if your notebook runs end-to-end you get a 100%), very cool concepts</li>
  <li><strong>Computational Data Analytics</strong> (ISYE6740): Aka machine learning 1, very tough assignments but I learned a lot. Did a great job balancing math, coding, and concepts.</li>
</ul>

<h2 id="most-memorable-concept">Most memorable concept</h2>
<p><strong>Spectral clustering</strong>: Clustering is often done by distances (how close is a point to the other points). Spectral clustering uses graph theory and an adjacency matrix to properly cluster atypical shapes (see the circles in the below image; <a href="https://scikit-learn.org/stable/auto_examples/cluster/plot_cluster_comparison.html#sphx-glr-auto-examples-cluster-plot-cluster-comparison-py" target="_blank">source</a>)</p>

<figure class="align-center">
  <img src="/assets/images/post-04/spectral-clustering.jpeg" alt="Spectral clustering" /><figcaption align="center">
      Clustering techniques

    </figcaption></figure>

<h2 id="my-course-schedule">My course schedule</h2>
<ul>
  <li><strong>Spring 2019</strong> (2 Micromasters classes): Computing for Data Analytics; Data Analytics in Business</li>
  <li><strong>Summer 2019</strong> (1 Micromasters): Introduction to Analytics Modeling</li>
  <li><strong>Fall 2019</strong> (2): Bayesian Statistics; Simulation</li>
  <li><strong>Spring 2020</strong> (1): Data &amp; Visual Analytics</li>
  <li><strong>Summer 2020</strong> (2): Computational Data Analytics; Data Analysis for Continuous Improvement</li>
  <li><strong>Fall 2020</strong> (2): Deterministic Optimization; Regression</li>
  <li><strong>Spring 2021</strong> (1): Practicum (employer-sponsored capstone project)</li>
</ul>

<h2 id="biggest-oh-st-moment">Biggest ‘OH S**T’ moment</h2>
<p>I got my dates mixed up and forgot to submit my final assignment for Data Analysis for Continuous Improvement, which was worth something like 40% of my grade. This was going to delay my graduation a semester and cost money…I was not happy. After throwing a temper tantrum, I messaged the instructor who was very understanding and let me submit late for no penalty. Thanks Lee!</p>

<h2 id="biggest-challenge">Biggest challenge</h2>

<p>I was taking two pretty tough classes in Fall 2019 (Bayesian Statistics and Simulation) while traveling 4-days a week for work. On top of that, my wife and I got a dog, bought a house and moved, all within a 3-month span.</p>

<p>I not-so-fondly remember sitting at the kitchen table doing a Simulation exam on a Sunday night after moving the day before. Boxes were everywhere and my wife was unpacking, but I had to do this exam before 11:55pm that night, and was getting on a plane the next morning. That was tough; I am lucky to have a great support system.</p>]]></content><author><name>Ryan O'Farrell</name></author><category term="posts" /><category term="analytics" /><category term="data science" /><category term="education" /><summary type="html"><![CDATA[Learn about my experience in GaTech’s Online Masters in Analytics degree program: the good, the bad, the unexpected.]]></summary></entry></feed>