<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Erika Pullum</title><link>https://erikapullum.com/</link><description>Erika Pullum's personal website</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 14 Feb 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://erikapullum.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Snapshot Your Metrics Models</title><link>https://erikapullum.com/blog/snapshot-metrics/</link><pubDate>Mon, 14 Feb 2022 00:00:00 +0000</pubDate><guid>https://erikapullum.com/blog/snapshot-metrics/</guid><description>&lt;h2 id="why-snapshot-your-metrics"&gt;Why Snapshot Your Metrics?&lt;/h2&gt;
&lt;p&gt;Metrics like your company&amp;rsquo;s financials are important. Your stakeholders have
some of these numbers memorized. They trust you to make sure these numbers are
right. They&amp;rsquo;ll notice right away if historical values change when they
shouldn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;A classic post on the dbt Discourse explains how to use snapshots to ensure
your metrics aren&amp;rsquo;t changing on you. &lt;a href="https://discourse.getdbt.com/t/build-snapshot-based-tests-to-detect-regressions-in-historic-data/1478"&gt;Build Snapshot-BasedTests to Detect Regressions in Your Historic Data&lt;/a&gt;
was written in 2020 by &lt;a href="https://www.linkedin.com/in/evgeny-rubtsov-48884322/"&gt;Evgeny Rubtsov&lt;/a&gt;.
Back then it required custom tests and a special macro.&lt;/p&gt;
&lt;p&gt;I implemented this recently for one of our financial models. I took advantage of
✨new✨ dbt features to avoid writing anything custom. Here&amp;rsquo;s how it works.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;📸 Create a snapshot of your important metric model&lt;/li&gt;
&lt;li&gt;🧪 Add a test to ensure &lt;code&gt;dbt_valid_to&lt;/code&gt; is always null, meaning your data hasn&amp;rsquo;t changed&lt;/li&gt;
&lt;li&gt;😎 Rest easy knowing regressions will pop up as test failures&lt;/li&gt;
&lt;li&gt;🛠️ If failures do occur, update your test after root cause investigation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Fortunately (unfortunately?) the system worked and my test did detect a
regression. I was able to take quick action before our stakeholders noticed.
I also dug in on the root cause so we can be assured this won&amp;rsquo;t happen again.&lt;/p&gt;
&lt;h3 id="1-make-a-snapshot-of-your-model"&gt;1. Make a Snapshot of Your Model&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s say you have a financial model, like sales by month by customer. Your
model might look something like this:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;month_of&lt;/th&gt;
 &lt;th&gt;customer_id&lt;/th&gt;
 &lt;th&gt;sales&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;2022-01-01&lt;/td&gt;
 &lt;td&gt;8675&lt;/td&gt;
 &lt;td&gt;2000&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2022-01-01&lt;/td&gt;
 &lt;td&gt;5309&lt;/td&gt;
 &lt;td&gt;9000&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In this case, we don&amp;rsquo;t have a unique key we can use in our snapshot. We&amp;rsquo;ll have
to make one. This is quite easy to do with &lt;a href="https://github.com/dbt-labs/dbt-utils#surrogate_key-source"&gt;&lt;code&gt;dbt_utils.surrogate_key&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-- assume your real model is above this point
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-- add a surrogate key like so
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;select
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; month_of
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;, customer_id
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;, sales
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;, {{ dbt_utils.surrogate_key([&amp;#39;month_of&amp;#39;, &amp;#39;customer_id&amp;#39;]) }} as surrogate_key
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from final
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next up let&amp;rsquo;s make our snapshot.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{% snapshot sales_snapshot %}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; config(
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; target_database=&amp;#39;analytics&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; target_schema=&amp;#39;analytics_snapshots&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; unique_key=&amp;#39;surrogate_key&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; strategy=&amp;#39;check&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; check_cols=[&amp;#39;month_of&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; , &amp;#39;customer_id&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; , &amp;#39;sales&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;select
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from {{ ref(&amp;#39;sales&amp;#39;) }}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;where month_of &amp;lt;= current_date - interval &amp;#39;1 day&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{% endsnapshot %}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s break down what&amp;rsquo;s going on in the snapshot. We&amp;rsquo;re snapshotting our sales
model, with the &lt;code&gt;check&lt;/code&gt; strategy. This means every time the snapshot runs, it
will compare the previous values of the columns specified in the &lt;code&gt;check_cols&lt;/code&gt;
list against their current values.&lt;/p&gt;
&lt;p&gt;If there&amp;rsquo;s a difference, a new row will be inserted into the snapshot with the
new values. On the old row, the &lt;code&gt;dbt_valid_to&lt;/code&gt; timestamp will be updated to the
time the snapshot ran. The newly inserted row will have a &lt;code&gt;dbt_valid_from&lt;/code&gt; equal
to this time, and a &lt;code&gt;dbt_valid_to&lt;/code&gt; that&amp;rsquo;s null.&lt;/p&gt;
&lt;p&gt;We can give ourselves a grace period with the &lt;code&gt;where&lt;/code&gt; line in the SQL query.&lt;/p&gt;
&lt;h3 id="2-adding-tests"&gt;2. Adding Tests&lt;/h3&gt;
&lt;p&gt;We&amp;rsquo;ll see a change in the snapshot model if something changes. Let&amp;rsquo;s add a test
to notify us if this happens. Back in 2020, a custom test was required. Now,
&lt;code&gt;dbt_utils&lt;/code&gt; has you covered with &lt;code&gt;expression_is_true&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;Love that I never have to write custom tests in dbt. There&amp;#39;s almost always a way to do it with dbt_utils instead!&lt;br&gt;&lt;br&gt;Haven&amp;#39;t had to use dbt-expectations yet but I&amp;#39;ve heard lots of great things.&lt;/p&gt;&amp;mdash; Erika Pullum she/hers (@erikapullum) &lt;a href="https://twitter.com/erikapullum/status/1489246319474524160?ref_src=twsrc%5Etfw"&gt;February 3, 2022&lt;/a&gt;&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;models&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sales_snapshot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;dbt_utils.expression_is_true&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dbt_valid_to is null&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If our metrics change, the snapshot will insert new rows. The test will fail.
We&amp;rsquo;ll know a problem has occurred an we can investigate and determine what
caused it.&lt;/p&gt;
&lt;p&gt;The test failing tells us that something changed in the source that shouldn&amp;rsquo;t
have. This is good, because we&amp;rsquo;ll know about the problem. We need to fix the
test though, because a failure every day could cause us to miss something else
that&amp;rsquo;s important.&lt;/p&gt;
&lt;h3 id="3-updating-the-test-after-a-problem"&gt;3. Updating the Test After a Problem&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s say one of our sales numbers changed, for &lt;code&gt;customer_id&lt;/code&gt; &lt;code&gt;8675&lt;/code&gt;. The
snapshot will now have two records for that customer:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;month_of&lt;/th&gt;
 &lt;th&gt;customer_id&lt;/th&gt;
 &lt;th&gt;sales&lt;/th&gt;
 &lt;th&gt;dbt_valid_from&lt;/th&gt;
 &lt;th&gt;dbt_valid_to&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;2022-01-01&lt;/td&gt;
 &lt;td&gt;8675&lt;/td&gt;
 &lt;td&gt;2000&lt;/td&gt;
 &lt;td&gt;2022-01-02&lt;/td&gt;
 &lt;td&gt;2022-02-14&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2022-01-01&lt;/td&gt;
 &lt;td&gt;8675&lt;/td&gt;
 &lt;td&gt;3000&lt;/td&gt;
 &lt;td&gt;2022-02-14&lt;/td&gt;
 &lt;td&gt;null&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Our test will be failing due to the first row in the table, and we&amp;rsquo;ll get a
message something like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;06:10:53 Completed with 1 error and 0 warnings:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;06:10:53
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;06:10:53 Failure in test dbt_utils_expression_is_true_sales_snapshot_dbt_valid_to_is_null (snapshots/snapshots.yml)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;06:10:53 Got 1 result, configured to fail if &amp;gt;0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Since we&amp;rsquo;ve understood the failure mode already, we need to fix the failing
test. It has done its job by alerting us &amp;ndash; we don&amp;rsquo;t want it failing every day!&lt;/p&gt;
&lt;p&gt;One method for fixing the failing test is to remove, edit, or update the rows in
the snapshot. Since dbt &lt;code&gt;0.21.0&lt;/code&gt; severity configurations mean we can get the
test back to passing without modifying the snapshot table.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.getdbt.com/reference/resource-configs/severity"&gt;Severity configurations&lt;/a&gt;
let us specify a severity of &lt;code&gt;error&lt;/code&gt; or &lt;code&gt;warn&lt;/code&gt; for a test. They also allow us to
specify the number of result rows the test must return to be considered failure.&lt;/p&gt;
&lt;p&gt;This error message gave us exactly what we need to get the test passing. We can
update the severity configs so that the test is passing again.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;models&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sales_snapshot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;dbt_utils.expression_is_true&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dbt_valid_to is null&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;#update when exceptions occur&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;severity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;error&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;error_if&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;gt;1&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;warn_if&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;gt;1&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This requires a PR, which is probably a good thing! This gives you an
opportunity to document what caused the failure, what corrective actions you
took, and why the change to the test is needed.&lt;/p&gt;
&lt;h2 id="what-should-you-snapshot-like-this"&gt;What Should You Snapshot Like This?&lt;/h2&gt;
&lt;p&gt;This strategy is effective, but it takes work to maintain it. What types of
models is it good for?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Models that cannot be wrong, like financials or key KPIs&lt;/li&gt;
&lt;li&gt;Data that&amp;rsquo;s aggregated by a date dimension, like a week or a month&lt;/li&gt;
&lt;li&gt;Metrics that shouldn&amp;rsquo;t change after a certain amount of time&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Have thoughts? Find me on Twitter and let me know!&lt;/p&gt;</description></item><item><title>Analytics Engineering Dotfiles</title><link>https://erikapullum.com/blog/analytics-eng-dotfiles/</link><pubDate>Mon, 29 Nov 2021 00:00:00 +0000</pubDate><guid>https://erikapullum.com/blog/analytics-eng-dotfiles/</guid><description>&lt;h2 id="what-are-dotfiles-anyway"&gt;What are dotfiles, anyway?&lt;/h2&gt;
&lt;p&gt;Dotfiles are configuration as code for your development environment. The name
originates from files like &lt;code&gt;.gitignore&lt;/code&gt; or &lt;code&gt;.zshrc&lt;/code&gt;, which start with a &lt;code&gt;.&lt;/code&gt; and
became referred to as dotfiles.&lt;/p&gt;
&lt;p&gt;One of the cool things about &lt;a href="https://dotfiles.github.io/"&gt;dotfiles in the software world&lt;/a&gt;
is that they&amp;rsquo;re frequently shared. You can learn from what other people have
done. I was introduced to dotfiles as a concept by a software engineering
colleague of mine.&lt;/p&gt;
&lt;p&gt;There don&amp;rsquo;t seem to be many examples of analytics engineering dotfiles out
there. What I did find is usually called &amp;ldquo;setup&amp;rdquo; and not dotfiles&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Here are some examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://discourse.getdbt.com/t/how-we-set-up-our-computers-for-working-on-dbt-projects/243"&gt;Canonical Claire Carroll - How we Set Up Our Computers for Working with dbt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discourse.getdbt.com/t/setting-up-vscode-to-use-with-the-dbt-cli/3291"&gt;Anders on VSCode setup for the dbt CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/gitlab-data/analytics/-/blob/master/admin/onboarding_script.zsh"&gt;GitLab&amp;rsquo;s Onboarding Script&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="to-fork-or-not-to-fork"&gt;To Fork or Not to Fork&lt;/h2&gt;
&lt;p&gt;It turns out there&amp;rsquo;s a whole debate on &lt;a href="https://zachholman.com/2010/08/dotfiles-are-meant-to-be-forked/"&gt;whether&lt;/a&gt;
or &lt;a href="https://www.anishathalye.com/2014/08/03/managing-your-dotfiles/"&gt;not&lt;/a&gt; you should
fork someone else&amp;rsquo;s dotfiles. Forking in this context means copying someone
else&amp;rsquo;s approach for your own environment.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re new to working with dbt, my dotfiles might make a good starting point.
However, dotfiles &lt;strong&gt;are&lt;/strong&gt; highly personal. What works for me might not work for
you. Even if my exact setup is perfect for you, you&amp;rsquo;d need to learn what I know
to get the same efficiency I do. Your pain points might not be the same as mine,
and things I love might not work for you at all.&lt;/p&gt;
&lt;p&gt;With that said, please do &lt;strong&gt;fork away&lt;/strong&gt;! I tried to do a good job documenting
what&amp;rsquo;s going on in comments and on the repo. I&amp;rsquo;d love to see pull requests, issues,
and contributions to this repo. We&amp;rsquo;re still in the early days of analytics
engineering as a discipline. I don&amp;rsquo;t think we can share enough.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m just getting started with customizing my command line environment. I&amp;rsquo;m sure
there&amp;rsquo;s a lot that could be improved here. Like &lt;a href="https://en.wikipedia.org/wiki/Stone_Soup"&gt;Stone Soup&lt;/a&gt;,
I&amp;rsquo;m hoping that by putting this out in the world, people will be moved to
show up and put something in the pot.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/erika-e/dotfiles"&gt;Erika&amp;rsquo;s analytics engineering dotfiles on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="a-little-bit-of-erika-by-your-side"&gt;A Little Bit of Erika by Your Side&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s some of the things the dotfiles do that I think are pretty neat.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🍺 Manage installed software and packages with Homebrew&lt;/li&gt;
&lt;li&gt;🦾 Optimize VSCode for working with dbt by installing &lt;a href="https://github.com/erika-e/dotfiles/tree/main/vscode"&gt;lots of good extensions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;👩‍🔬 Clone a dbt project so you can easily test your setup on a new computer&lt;/li&gt;
&lt;li&gt;✨ Add aliases for common dbt CLI operations&lt;/li&gt;
&lt;li&gt;🔎 Make validating data for dbt PRs easy with dbt-audit-helper automation&lt;/li&gt;
&lt;li&gt;🤘 Make adding to your dbt project easier with shell script customization for dbt-codegen&lt;/li&gt;
&lt;li&gt;🧹 Basic SQLfluff setup for dbt to make linting SQL easy&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="making-the-dotfiles"&gt;Making the Dotfiles&lt;/h2&gt;
&lt;p&gt;I wanted the dotfiles to be simple and approachable. By approachable, I mean
that I wanted them to be easily understandable to someone with an analytics
background&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt; and solid dbt experience.&lt;/p&gt;
&lt;p&gt;I balanced my desire to have this be general and useful with the need to keep my
own configurations centralized. I chose tools that are free to use. For now,
I&amp;rsquo;ve chosen not to bring in a dotfile utility.&lt;/p&gt;
&lt;p&gt;I kept things simple, until I couldn&amp;rsquo;t. For example, I started with all the files
in one root directory. I thought people might have trouble figuring out what was
what, so I added some documentation. It still seemed confusing, so I added
subdirectories. That inspired me to add READMEs for each tool&amp;rsquo;s configs.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sure things will continue to evolve. There are some tools I&amp;rsquo;ve used, like
Terraform, that I&amp;rsquo;m not currently working with and didn&amp;rsquo;t include for that reason.&lt;/p&gt;
&lt;h2 id="about-configuring-your-shell"&gt;About Configuring Your Shell&lt;/h2&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;I found shell configuration intimidating and procrastinated on it for a long time even though I use the command line a lot.&lt;br&gt;&lt;br&gt;It&amp;#39;s amazing to have automation for common tasks, even stuff that saves a few keystrokes adds up throughout the day.&lt;/p&gt;&amp;mdash; Erika Pullum (Swartz) she/hers (@erikapullum) &lt;a href="https://twitter.com/erikapullum/status/1453814316071854084?ref_src=twsrc%5Etfw"&gt;October 28, 2021&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Shell configuration has been life changing for my daily workflows. I wish I&amp;rsquo;d done
it sooner. In the course of building the dotfiles shell scripts I learned some
nifty new command line tools.&lt;/p&gt;
&lt;p&gt;I highly recommend investing time in learning the ins and outs of the tools you
use every day. A little bit goes a long way.&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Sometimes it feels like tooling and practices in the data world are a few
years behind the software engineering world. Some of that is terminology,
like dotfiles vs. setup. However, the problems data folks are solving are
different and the data tooling isn&amp;rsquo;t as good as it should be - yet.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Yep, that&amp;rsquo;s a Mambo #5 Joke. Hope it&amp;rsquo;s not stuck in your head now.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;I realized after I wrote most of this post that some concepts in the
dotfiles might not be intuitive to the person I&amp;rsquo;m describing if they haven&amp;rsquo;t
come across them before. For example, someone who has mostly worked with dbt
Cloud might not be very familiar with shell customization. Trying to explain
everything felt like it would overload this post. If there&amp;rsquo;s something you&amp;rsquo;d
really like to see me write more about, let me know on Twitter!&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Upskilling Analysts</title><link>https://erikapullum.com/blog/upskilling-analysts/</link><pubDate>Sun, 17 Oct 2021 00:00:00 +0000</pubDate><guid>https://erikapullum.com/blog/upskilling-analysts/</guid><description>&lt;p&gt;A few weeks ago, I got curious about how organizations can intentionally retrain analysts for data science roles.&lt;/p&gt;
&lt;p&gt;This post is the result of a few conversations with data leaders who have been there, done that, and my own research on the topic.&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;Has anyone intentionally retrained analysts into jr DS roles as a strategy in their org?&lt;br&gt;&lt;br&gt;Can I pick your brain about it?&lt;br&gt;&lt;br&gt;Saw a case study on the topic that piqued my interest, along with the convo I had with &lt;a href="https://twitter.com/sethrosen?ref_src=twsrc%5Etfw"&gt;@sethrosen&lt;/a&gt; the other day.&lt;/p&gt;&amp;mdash; Erika Swartz (@eswartz) &lt;a href="https://twitter.com/eswartz/status/1301978853854806017?ref_src=twsrc%5Etfw"&gt;September 4, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2 id="who-are-you-calling-analyst-anyway"&gt;Who Are You Calling Analyst, Anyway?&lt;/h2&gt;
&lt;p&gt;When you hear the word analyst, what kind of role do you imagine?&lt;/p&gt;
&lt;p&gt;The actual job duties of someone with a title that contains the world analyst have an astounding breadth.&lt;/p&gt;
&lt;p&gt;Analyst capabilities can be divided into three broad areas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;business acumen&lt;/li&gt;
&lt;li&gt;domain expertise&lt;/li&gt;
&lt;li&gt;technical skills&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Analysts use these capabilities to make decisions, help others make decisions, or solve problems for their organization.&lt;/p&gt;
&lt;p&gt;The diversity of analyst duties is important to think about when you think about retraining analysts to be data scientists. Data science may not be an end goal for every analyst, and the learning curve will be steeper for some analysts than others.&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;Q: To get into data science is an Analyst role a good starting point?&lt;br&gt;&lt;br&gt;A: (from a hiring manager, not me) when hiring, it's a red flag. With Data Sciencey stuff on a resume but applying for an analyst job, it seems like it's a stepping stone. We want folks who want to be analysts&lt;/p&gt;&amp;mdash; Seth Rosen (@sethrosen) &lt;a href="https://twitter.com/sethrosen/status/1301512636295770114?ref_src=twsrc%5Etfw"&gt;September 3, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2 id="considerations-for-data-leaders"&gt;Considerations for Data Leaders&lt;/h2&gt;
&lt;p&gt;This post is for leaders who want to increase their organization&amp;rsquo;s data science capabilities or output by upskilling analysts.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This post is not about how individuals retraining themselves for data science roles, but I think y&amp;rsquo;all are awesome, too!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;To get your program off the ground in the first place, you&amp;rsquo;ll need to answer some key questions. Each section below addresses a strategic consideration you&amp;rsquo;ll have to assess as you design and pitch your program.&lt;/p&gt;
&lt;h2 id="why-reskill-analysts"&gt;Why Reskill Analysts?&lt;/h2&gt;
&lt;p&gt;Analysts are already insiders. They have hard-won understanding of your organization&amp;rsquo;s data, knowledge of its business processes, and the trust of its decision makers.&lt;/p&gt;
&lt;p&gt;The best analysts can listen to a business problem and a list of wants, and instead of just delivering data, solve the heart of the need, delivering a quick and accurate answer.&lt;/p&gt;
&lt;p&gt;The business acumen and domain expertise analysts have gives them a running start on solving data problems. The problems that come their way are a good representation of questions that are hard to answer within your organization, which is useful for finding potential data science projects.&lt;/p&gt;
&lt;p&gt;Domain expertise allows analysts to communicate concepts in ways that decision makers can understand and relate to. They know what concerns are likely to come up, and will be able to answer them.&lt;/p&gt;
&lt;p&gt;Great data scientists often have some or all of these competencies, too. For the data leaders I talked to, leveraging the experience of analysts was an intentional strategy to speed up the scaling up of their data teams.&lt;/p&gt;
&lt;h2 id="how-will-you-retrain-your-analysts"&gt;How Will You Retrain Your Analysts?&lt;/h2&gt;
&lt;p&gt;In running an upskilling program, you need to identify the skills you are expecting your analyst team to acquire, and provide resources.&lt;/p&gt;
&lt;p&gt;Data leaders I spoke to had a variety of strategies, platforms, and resources from formal training to supported self-study.&lt;/p&gt;
&lt;p&gt;Best practices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Carefully consider the relevance of any training you assign&lt;/li&gt;
&lt;li&gt;Ensure a smooth &amp;lsquo;hello world&amp;rsquo; experience&lt;/li&gt;
&lt;li&gt;Great documentation makes learning easier&lt;/li&gt;
&lt;li&gt;Create space for daily practice&lt;/li&gt;
&lt;li&gt;Assess progress to identify deficiencies and provide individual coaching&lt;/li&gt;
&lt;li&gt;Give analysts the chance to practice and reinforce their skills on real projects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other considerations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Who do the analysts report to while they are retraining?&lt;/li&gt;
&lt;li&gt;What incentives are in place to encourage learning and reward those who upskill?&lt;/li&gt;
&lt;li&gt;How will you create safety if an analyst chooses not to continue?&lt;/li&gt;
&lt;li&gt;How many analysts can you retrain at a time? Will you do multiple waves?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="so-i-dont-need-data-scientists"&gt;So I Don&amp;rsquo;t Need Data Scientists?&lt;/h2&gt;
&lt;p&gt;Nope, you need data scientists, too.&lt;/p&gt;
&lt;p&gt;The leaders I talked to hired data scientists, leveraged internal talent, or acted themselves in this capacity — to mentor and work with the upskilling analyst team. If you are not the talent, you&amp;rsquo;ll need to justify hiring it or borrowing it from another part of your org.&lt;/p&gt;
&lt;p&gt;Data scientist mentors to the analysts played important roles including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mentoring on technical skills unique to data science like:
&lt;ul&gt;
&lt;li&gt;Building and testing data pipelines&lt;/li&gt;
&lt;li&gt;Feature engineering&lt;/li&gt;
&lt;li&gt;Model selection and evaluation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Helping analysts navigate new platforms and tools&lt;/li&gt;
&lt;li&gt;Pairing to work on a project&lt;/li&gt;
&lt;li&gt;Helping connect the dots for concepts or ideas&lt;/li&gt;
&lt;li&gt;Encouraging and supporting skill development&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Support of experienced practitioners is critical for upskilling analysts to reinforce their learning by applying their skills.&lt;/p&gt;
&lt;h2 id="but-is-it-really-data-science"&gt;But is it &amp;ldquo;Really&amp;rdquo; Data Science?&lt;/h2&gt;
&lt;p&gt;And do you care, if you&amp;rsquo;re &lt;a href="https://locallyoptimistic.com/post/lean-data-science/"&gt;helping the company increase ROI or satisfy customers&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;Data science is a discipline that has been highly and widely hyped for years. Business leaders will have preconceived understandings or misunderstandings of data science. These can work for you, if an outstanding business result can be achieved with a technically simple and straightforward solution. It can also work against you, if a business leader expects data science to deliver miracles, and has little patience for projects that take time to impact business results.&lt;/p&gt;
&lt;p&gt;With business leaders, clarify expectations early and often. Engage them in decisions about project direction and ensure they understand the nature of data science.&lt;/p&gt;
&lt;p&gt;Consider where your org is on the maturity curve and the motivational fit of the talent you assign to each project.&lt;/p&gt;
&lt;p&gt;An upskilling analyst may be incredibly motivated by a simple data science solution that wins widespread praise. An analyst that feels pressure to learn too much, too soon (to keep their job) may be burned out by a high profile project, even if they are successful. A trained data scientist may be frustrated that no one is interested in a more complex solve or bored because they aren&amp;rsquo;t technically challenged.&lt;/p&gt;
&lt;h2 id="can-you-manage-your-stakeholders"&gt;Can You Manage Your Stakeholders?&lt;/h2&gt;
&lt;p&gt;Leading technical functions is a balancing act.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s especially challenging in mature organizations, and more change management is needed for new-to-your-org capabilities like data science.&lt;/p&gt;
&lt;p&gt;You need to deliver wins for the business leaders who will sell the value of your team laterally and upwards in your organization. Data leaders need to invest time into building relationships and trust with these leaders. Calibrate expectations and involve stakeholders in deciding which tradeoffs to make.&lt;/p&gt;
&lt;p&gt;At the same time, you need to keep technical debt low, ensure your team is doing quality work, and keep your team engaged.&lt;/p&gt;
&lt;p&gt;Leaders who balance these competing priorities of speed and a happy data team will deliver quick wins and sustained successes.&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;Still thinking about some advice from my last 1:1 from my boss:&lt;br&gt;&lt;br&gt;&amp;quot;It's not the best idea or the best analysis that wins, it's the best relationship.&amp;quot;&lt;br&gt;&lt;br&gt;Is this the reason so many &lt;a href="https://twitter.com/hashtag/DataScience?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#DataScience&lt;/a&gt; and &lt;a href="https://twitter.com/hashtag/Analytics?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#Analytics&lt;/a&gt; projects fail?&lt;/p&gt;&amp;mdash; Erika Swartz (@eswartz) &lt;a href="https://twitter.com/eswartz/status/1290665843140038657?ref_src=twsrc%5Etfw"&gt;August 4, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Data leaders focused on getting wins that mattered to stakeholders. Your team&amp;rsquo;s conclusions need to be trustable and communicated in language that makes sense to your business leaders.&lt;/p&gt;
&lt;p&gt;In some cases, a few high profile wins were enough to build the budding org&amp;rsquo;s reputation. In each case, the data leader could clearly connect the win to a financial measure for the company.&lt;/p&gt;
&lt;h2 id="what-will-your-org-look-like-3-years-from-now"&gt;What Will Your Org Look Like 3 Years From Now?&lt;/h2&gt;
&lt;p&gt;The final consideration is long term. How will you retain the talent you&amp;rsquo;ve just upskilled? As your org grows, who can step up into management roles? How do you define success for your team?&lt;/p&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/sgzeitlin/"&gt;Samantha Zeitlin&lt;/a&gt; and I overran our planned one hour chat because she had so many great insights and nuggets of wisdom for me. You can find Samantha&amp;rsquo;s writing &lt;a href="https://szeitlin.github.io/"&gt;here&lt;/a&gt;, several of her posts address this topic.&lt;/p&gt;
&lt;p&gt;My deepest thanks to the other data leaders who were generous with their time and ideas, but who did not choose to be named in this post.&lt;/p&gt;
&lt;h2 id="other-reading-on-this-topic--things-that-i-read-along-the-way"&gt;Other Reading on This Topic &amp;amp; Things That I Read Along the Way&lt;/h2&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;3. I wish data science education programs would also explain that corporations desperately need &amp;quot;jack of all trade&amp;quot; data folks. &lt;br&gt;&lt;br&gt;More focus on solving business problems with data using whichever technique is most appropriate. Less focus on trying new algorithms.&lt;/p&gt;&amp;mdash; Laura Ellis (@LittleMissData) &lt;a href="https://twitter.com/LittleMissData/status/1292505688275648514?ref_src=twsrc%5Etfw"&gt;August 9, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.mckinsey.com/business-functions/mckinsey-analytics/our-insights/analytics-translator#"&gt;Analytics Translators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.washingtonpost.com/business/capitalbusiness/with-hungry-academy-livingsocial-aims-to-build-its-own-techies/2012/07/29/gJQAH5Q2IX_story.html"&gt;An Upskilling Program at Living Social&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://towardsdatascience.com/what-makes-a-data-analyst-excellent-17ee4651c6db"&gt;What Makes Analysts Excellent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://veekaybee.github.io/2019/02/13/data-science-is-different/"&gt;Data Science is Different Now&lt;/a&gt;, from the one and only Vicki Boykis&lt;/li&gt;
&lt;li&gt;&lt;a href="https://locallyoptimistic.com/post/lean-data-science/"&gt;Lean Data Science&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gartner.com/en/documents/3980177/case-study-internal-data-science-team-development-eastma"&gt;Gartner Case Study&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Management Seat Time</title><link>https://erikapullum.com/blog/management-seat-time/</link><pubDate>Tue, 01 Jun 2021 00:00:00 +0000</pubDate><guid>https://erikapullum.com/blog/management-seat-time/</guid><description>&lt;figure class="float-right"&gt;
&lt;img src="https://erikapullum.com/images/posts/seat-time-image.jpeg" alt="A photo of a yellow chair in the center of the frame against a black background. There is a person standing on the seat of the chair in converse and dark leggings, balancing on their toes. Only the lower half of the person's body is visible."&gt;
&lt;figcaption&gt;&lt;a href="https://unsplash.com/photos/qLYyiHizQyc"&gt;photo source&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In case you haven&amp;rsquo;t heard, there&amp;rsquo;s a (r)&lt;a href="https://blog.getdbt.com/future-of-the-modern-data-stack/"&gt;evolution&lt;/a&gt; going on in the &lt;a href="https://blog.aula.education/the-80-20-rule-in-data-and-why-it-doesnt-have-to-be-that-way-7659f8456d8f"&gt;modern data stack&lt;/a&gt;. There&amp;rsquo;s a &lt;a href="https://www.getdbt.com/what-is-analytics-engineering/"&gt;new way of working&lt;/a&gt; in data, where software engineering best practices are the way the data team gets work done. I recently left my role as the manager of a large team to join Aula Education as a Sr Analytics Engineer — primarily to get in on the technical fun.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://charity.wtf/2017/05/11/the-engineer-manager-pendulum/"&gt;Management and engineering&lt;/a&gt; are fundamentally &lt;a href="https://charity.wtf/2020/09/06/if-management-isnt-a-promotion-then-engineering-isnt-a-demotion/"&gt;different career tracks&lt;/a&gt;. Managing has been a great privilege and I&amp;rsquo;ll always be grateful to my former team and for the time we had together. This post is a reflection on my years in management and the lessons I learned from them. It&amp;rsquo;s all about seat time.&lt;/p&gt;
&lt;h2 id="seat-time"&gt;Seat Time&lt;/h2&gt;
&lt;p&gt;Before I became a manager, I applied for a manager role in my department and didn&amp;rsquo;t get it. The candidate who was selected already had management experience even though they had no experience in my department. I was a high performer in my individual contributor role and I felt disappointed and passed over.&lt;/p&gt;
&lt;p&gt;A mentor who helped me understand the decision explained that what he called seat time mattered &amp;ndash; and the other candidate had it already. It&amp;rsquo;s hard to understand what seat time is when you&amp;rsquo;re young and ambitious and smart. It&amp;rsquo;s impossible to see the value in seat time when you don&amp;rsquo;t have it, which is even more frustrating.&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;Personally, one of the hardest parts of bridging from technical IC into management and leadership has been the unknown unknowns. &lt;br&gt;&lt;br&gt;Before you bridge, it's hard to know for sure what skills you'll need, and there's no definitive resource for picking them up once you &amp;quot;arrive&amp;quot;&lt;/p&gt;&amp;mdash; Caitlin Hudon 👩‍💻 (@beeonaposy) &lt;a href="https://twitter.com/beeonaposy/status/1232745310776111106?ref_src=twsrc%5Etfw"&gt;February 26, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;For me, seat time has come to refer to the skills and experience required for management, which can only be picked up by doing the job. No amount of reading or thinking can give you seat time. It&amp;rsquo;s purely experiential.&lt;/p&gt;
&lt;p&gt;Self-awareness and introspection are essential to benefitting from seat time. Mentors and a good boss can help you learn more quickly and avoid some mistakes. Time is an essential component of this kind of learning. You can&amp;rsquo;t shortcut the process.&lt;/p&gt;
&lt;p&gt;You can read about these skills in management books— I&amp;rsquo;ve included some I like in the footnote.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The thing is, reading about how to fire someone is different from doing it. It&amp;rsquo;s easy to read about the need for clear feedback and nod along, but hard not to soften feedback to someone you like at the moment you&amp;rsquo;re giving it. The impact of your decisions plays out over a longer timescale and it&amp;rsquo;s not always easy to see your own mistakes.&lt;/p&gt;
&lt;p&gt;Seat time is sitting across the table from someone, listening to them describe a situation, and realizing you&amp;rsquo;ve seen this pattern before. You know how to navigate the situation — even or especially if it involves tricky interpersonal dynamics. When you come across a situation you haven&amp;rsquo;t seen before, it takes more time and energy to handle it than if you&amp;rsquo;ve seen variations of it several times.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not that the emotional work of managing gets easier with seat time. You do get better at compartmentalizing and processing the emotional challenges of management.&lt;/p&gt;
&lt;p&gt;In the last year and a half or so, I managed a 12 person team of direct and dotted line reports. One cool benefit of management seat time is seeing patterns play out. You see more than just your own work and gain a lot of perspective and understanding from seeing what&amp;rsquo;s going on with your reports. I learned two key lessons from my seat time, the first of which was …&lt;/p&gt;
&lt;h2 id="not-everyone-is-you"&gt;Not Everyone Is You&lt;/h2&gt;
&lt;p&gt;That&amp;rsquo;s a good thing.&lt;/p&gt;
&lt;p&gt;This is the seat time lesson I learned, re-learned, re-learned, and learned again in a new way. You can&amp;rsquo;t treat everyone like yourself, because not everyone on your team is like you! Most seat time lessons sound painfully obvious when you write them out like this.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s easy to slip into giving feedback based on what you would have done or thought about, forgetting that your team member does not have the same experiences and context that you do.&lt;/p&gt;
&lt;p&gt;A closely related lesson is that you can&amp;rsquo;t treat everyone the same way. It seems like it would be fair or even right to do this, but it&amp;rsquo;s not. People have different needs depending on what they&amp;rsquo;re best at or struggling with, where they are in their career, where they&amp;rsquo;re trying to go, or what&amp;rsquo;s going on with them at a specific point in time.&lt;/p&gt;
&lt;p&gt;You can&amp;rsquo;t praise people only in the way you want to be praised. I&amp;rsquo;m highly intrinsically motivated — if I know I did a good job, that can be enough for me. I had to intentionally understand and adapt to praise team members according to their needs and preferences. Some people need more regular and consistent positive feedback to do their best work.&lt;/p&gt;
&lt;p&gt;Coaching and growing your team is one of the most important duties of a manager. I couldn&amp;rsquo;t coach effectively until I learned to tailor my approach to each individual and what they needed. I had to continuously improve my approach, and focus on a long term perspective.&lt;/p&gt;
&lt;p&gt;People sometimes tell you what they need based on how they see themselves, which can be different from how they behave and respond. Listen to your people, but trust your own instincts too.&lt;/p&gt;
&lt;p&gt;For example, a team member once told me that they welcomed and wanted direct feedback. A few months later, one of their projects got off track, so I gave them some direct feedback. Then things got worse. The team member shut down, became argumentative, and the project got further off track. What went wrong?&lt;/p&gt;
&lt;p&gt;This person had told me what they needed based on how they saw themselves — which wasn&amp;rsquo;t what they really needed. I kept on giving direct feedback, which was making the situation worse, not better. I wish I had paid more attention to how this person was responding and adapted my approach sooner.&lt;/p&gt;
&lt;p&gt;Sometimes managing can feel like balancing while walking a tightrope. You can&amp;rsquo;t get it right every time, or all the time. If you&amp;rsquo;re lucky, you have a good foundation of trust and understanding between you and your team members for when you don&amp;rsquo;t get it right.&lt;/p&gt;
&lt;p&gt;This is why seat time is so important. My intuition for when to change my approach got better over time. I improved my ability to context-switch and treat each person as they needed to be treated at that moment. I got better at giving myself grace when I didn&amp;rsquo;t get it right.&lt;/p&gt;
&lt;h2 id="its-not-just-what-you-do-and-what-you-know"&gt;It&amp;rsquo;s Not Just What You Do and What You Know&lt;/h2&gt;
&lt;p&gt;This second seat time lesson is one I&amp;rsquo;m not sure I would count as &amp;ldquo;learned&amp;rdquo; yet. Some part of me still wants to believe success is about getting shit done.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;&amp;quot;it&amp;#39;s not enough to just be good&amp;quot; would make a great book title &lt;a href="https://t.co/vZkYU6ddT8"&gt;https://t.co/vZkYU6ddT8&lt;/a&gt;&lt;/p&gt;&amp;mdash; Matthew Hawthorne (@mhawthorne) &lt;a href="https://twitter.com/mhawthorne/status/1389309433470242820?ref_src=twsrc%5Etfw"&gt;May 3, 2021&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;One of your jobs as a manager is to build a network with other managers and teams to get things done. You must build relationships outside your team for your team to succeed. Management success is not about what you, personally, can do. It&amp;rsquo;s about what you can get done through and by others.&lt;/p&gt;
&lt;p&gt;The book Being the Boss addresses this aspect of management, which is left out of a lot of other books about management. You can&amp;rsquo;t solve &lt;a href="https://www.elidedbranches.com/2019/05/opp-other-peoples-problems.html"&gt;problems bigger than your team&lt;/a&gt; without a network of friends and allies within your company. It&amp;rsquo;s important to cultivate this network purposefully and intentionally.&lt;/p&gt;
&lt;p&gt;Many people become managers because they Want to Change Things™️. It can be frustrating to realize that you can&amp;rsquo;t change as much as you thought you could. Having a good idea is not enough. Most problems in the organization exist because there is a structure keeping them in place or something is preventing the part of the company that&amp;rsquo;s causing the pain point from feeling the pain.&lt;/p&gt;
&lt;p&gt;This is a part of managing I found particularly difficult in my last role. The organizational and cultural alignment for the changes I wanted to see just wasn&amp;rsquo;t there. The changes I wanted to see weren&amp;rsquo;t going to materialize.&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id="benefitting-from-other-peoples-seat-time"&gt;Benefitting from Other People&amp;rsquo;s Seat Time&lt;/h2&gt;
&lt;p&gt;If you are a manager you need advice on how to manage — you need someone you can call. Someone other than your boss, someone you trust, someone who will call you on your BS, and someone who has more experience than you do. A lot of my regrets my time as a manager come from situations where I should have asked for help and didn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve collected some mentor tips that helped me:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hope is not a strategy, ma&amp;rsquo;am.&lt;/p&gt;
&lt;p&gt;You can&amp;rsquo;t want it more than they do (on coaching direct reports).&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t waste emotion.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not the best idea that wins, it&amp;rsquo;s the best relationship.&lt;/p&gt;
&lt;p&gt;Listen. Ask Questions. Ask questions you know the answer to. Check opinions. Don&amp;rsquo;t assume.&lt;/p&gt;
&lt;p&gt;Know your 1-2 key messages in any presentation.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s life outside of your company.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I heard this final bit of advice when I was in the process of leaving my management role for a technical role. I had been job searching and interviewing and I felt sure I was making the right decision.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Great leaders always have three things &amp;ndash; aptitude, vision, and passion. Vision means you&amp;rsquo;re excited, you&amp;rsquo;ve got a dream. It doesn&amp;rsquo;t matter if it&amp;rsquo;s right at first, just that you&amp;rsquo;ve got it. With passion, no one can light your passion for you and no one can put it out. If your passion&amp;rsquo;s out, it&amp;rsquo;s time to go.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;ll always love helping people grow and develop. My passion for management had gone out and I dreamed of learning and applying new technologies. It was time to go.&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Here&amp;rsquo;s are some management books I like or have learned from - True North, Radical Candor, Being the Boss, No Hard Feelings, Can&amp;rsquo;t Hurt Me, Peak Performance, The Making of a Manager, The Manager&amp;rsquo;s Path. I&amp;rsquo;d love suggestions for more to read in the comments!&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Matthew recommended the book &amp;ldquo;Stealing the Corner Office&amp;rdquo; which was an unsettling and interesting read. Writing unsettling reminded me of &lt;a href="https://www.spakhm.com/p/how-to-get-promoted"&gt;this article&lt;/a&gt; which I was able to find instantly because I had it labelled on my &lt;a href="https://betterwithdata.substack.com/p/learning-superpower"&gt;reading list&lt;/a&gt; as &amp;ldquo;extremely unsettling&amp;rdquo;&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Big thanks to Charity Majors for &lt;a href="https://charity.wtf/2021/03/09/know-your-one-job-continued/"&gt;a footnote in a blog post&lt;/a&gt; — &amp;ldquo;And if you&amp;rsquo;re going to ask should you quit your job, I will save you a phone call: yes.&amp;rdquo; For some reason reading that allowed me to give myself permission to walk away and not try to fix those things.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Learning is a Superpower</title><link>https://erikapullum.com/blog/learning-superpower/</link><pubDate>Mon, 01 Mar 2021 00:00:00 +0000</pubDate><guid>https://erikapullum.com/blog/learning-superpower/</guid><description>&lt;p&gt;I wrote the first version of my reading list digest in 2019.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d transitioned from a role in Operations to a role in Analytics. There were so many things I didn&amp;rsquo;t know, and so many I wanted to learn.&lt;/p&gt;
&lt;p&gt;In the course of searching for the answer to a problem, I&amp;rsquo;d find something cool or interesting. When this happens, I want to stop solving, pull over, and learn something new.&lt;/p&gt;
&lt;p&gt;This is not a good way to get things done at work.&lt;/p&gt;
&lt;p&gt;I started saving articles to a spreadsheet creatively titled Reading List. I like to track things, so I added some columns for when I added the article, when I read it, and what I thought about it.&lt;/p&gt;
&lt;p&gt;This evolved into a personalized, automated daily digest of articles to read. If you want to skip reading about how it came to be, &lt;a href="https://github.com/erika-e/gsheet_reading_list_digest"&gt;you can check it out and create one of your own here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="make-it-easy-not-hard"&gt;Make It Easy, Not Hard&lt;/h2&gt;
&lt;p&gt;Anything you want to happen goes better when you create a system that makes it harder to mess it up.&lt;/p&gt;
&lt;p&gt;I learned this lesson first in my career in operations. Processes shouldn&amp;rsquo;t expect people to be perfect. Simple over complex. Automated over requiring judgement.&lt;/p&gt;
&lt;p&gt;In one case, we traced a problem back to a 14 point checklist which we expected operators to execute, &lt;strong&gt;perfectly&lt;/strong&gt;, at 4 in the morning, in a noisy environment wearing PPE, after 9 hours of a 12 hour shift. We changed the process. It never happened again.&lt;/p&gt;
&lt;p&gt;I can think of dozens of examples like that from my time in operations. Internal company software is rarely as intuitive as it should be&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. Don&amp;rsquo;t expect perfection from yourself or from people using the things you build.&lt;/p&gt;
&lt;p&gt;Make systems that make it hard or impossible to mess &amp;lsquo;it&amp;rsquo; up.&lt;/p&gt;
&lt;p&gt;Dan John&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;, one of my favorite coaches, calls habits that make things easier &lt;a href="https://www.otpbooks.com/dan-john-shark-habits/"&gt;Shark Habits - One Bite and Done&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Shark habits save time. Shark habits save mental overload.&lt;/p&gt;
&lt;p&gt;An important point: Shark habits don&amp;rsquo;t judge whether or not something is important, unimportant, trivial, or the key to life, living and the universe.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Automating my reading list is a shark habit that enables me to learn.&lt;/p&gt;
&lt;h2 id="automate-the-decision-of-what-to-read"&gt;Automate the Decision of What to Read&lt;/h2&gt;
&lt;p&gt;At first, the spreadsheet worked great.&lt;/p&gt;
&lt;p&gt;I had so little on there that I could remember from the URL which article was which and what I wanted to read most.&lt;/p&gt;
&lt;p&gt;Then the backlog grew.&lt;/p&gt;
&lt;p&gt;Then it grew some more.&lt;/p&gt;
&lt;p&gt;Suddenly reading was a chore instead of fun. I&amp;rsquo;d save articles up for a big batch when I had downtime and was in the mood to read. I&amp;rsquo;d also go days or weeks without reading anything at all.&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;I keep a spreadsheet for articles I want to read, talks I want to watch, or resources I want to look at. &lt;br&gt;&lt;br&gt;I wrote a little script to randomly choose 1-3 items off the backlog and send me a digest email, and since then I&amp;#39;ve been reading (and tweeting) a lot more! &lt;a href="https://t.co/2N0GDBU3KX"&gt;pic.twitter.com/2N0GDBU3KX&lt;/a&gt;&lt;/p&gt;&amp;mdash; Erika Pullum (Swartz) she/hers (@eswartz) &lt;a href="https://twitter.com/eswartz/status/1215282351854563328?ref_src=twsrc%5Etfw"&gt;January 9, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://erikapullum.com/images/posts/learning-superpower/reading-list-backlog.png" alt="Chart titled Reading List Backlog, showing the number of articles read each day and the cumulative total from September 2019 to January 2020. An annotation marks when the digest email automation began in mid-December 2019, after which reading picks up again."&gt;&lt;/p&gt;
&lt;p&gt;I realized part of the problem was that I had a hard time deciding what to read.&lt;/p&gt;
&lt;p&gt;So I automated the choice away from myself. The email comes, I read what&amp;rsquo;s in it. One bite and done.&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How It Works&lt;/h2&gt;
&lt;p&gt;Google Apps Script is a javascript based language that allows you to perform automation from a spreadsheet. I use a spreadsheet of articles with statuses as the base.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The script I wrote looks for all of the unread articles&lt;/li&gt;
&lt;li&gt;It alternates between sending the oldest article and one of the newest 20 articles which keeps the digest fresh&lt;/li&gt;
&lt;li&gt;It will send between 1 and n additional unread articles per day, where n is a maximum you can set&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="where-i-find-my-favorite-reads"&gt;Where I Find My Favorite Reads&lt;/h2&gt;
&lt;p&gt;Late spring in 2019, I had a mentoring meeting with a senior leader at Shaw. I didn&amp;rsquo;t see myself leaving Shaw, but I worried I would stop learning or get too used to how we do things. The leader advised me to go to conferences to get external perspectives.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d just left an operations role with 30-50% travel and I was burned out on being away from home. And I&amp;rsquo;m an &lt;a href="https://www.quietrev.com/6-illustrations-that-show-what-its-like-in-an-introverts-head/"&gt;introvert&lt;/a&gt;. And conferences are expensive, and (at the time) required travel. So I got on twitter instead.&lt;/p&gt;
&lt;p&gt;I started by looking for interesting people writing about analytics. I&amp;rsquo;d be looking up something, like &amp;lsquo;what&amp;rsquo;s an index?&amp;rsquo; &lt;a href="https://towardsdatascience.com/learning-sql-201-optimizing-queries-regardless-of-platform-918a3af9c8b1"&gt;find a cool article&lt;/a&gt;, and go track down &lt;a href="https://twitter.com/Randy_Au"&gt;the author&lt;/a&gt; and follow them.&lt;/p&gt;
&lt;p&gt;Twitter created another problem. I&amp;rsquo;d find cool articles messing around on my phone when I was nowhere near my computer.&lt;/p&gt;
&lt;p&gt;So I started emailing them to myself, so I wouldn&amp;rsquo;t lose track of them.&lt;/p&gt;
&lt;p&gt;Eventually I added more automation, to scrape emails out of my inbox and add them to the reading list.&lt;/p&gt;
&lt;h2 id="on-learning-and-being-uncomfortable"&gt;On Learning and Being Uncomfortable&lt;/h2&gt;
&lt;p&gt;It took me a long time to finish generalizing the code and publish this writeup.&lt;/p&gt;
&lt;p&gt;Part of that was just life — but when I sat down to write this post, I realized part of it was fear.&lt;/p&gt;
&lt;p&gt;Fear that the code wasn&amp;rsquo;t good enough — I taught myself javascript and it&amp;rsquo;s not my best language.&lt;/p&gt;
&lt;p&gt;Fear that people would think this whole thing is dumb.&lt;/p&gt;
&lt;p&gt;Fear of not having the &amp;ldquo;right&amp;rdquo; list of articles to put out there.&lt;/p&gt;
&lt;p&gt;Fear that other people might judge what I consider list-worthy.&lt;/p&gt;
&lt;p&gt;Fear is the biggest blocker of my learning, and probably yours too.&lt;/p&gt;
&lt;p&gt;You can follow all the tutorials, watch all the talks, and read all the books.&lt;/p&gt;
&lt;p&gt;In the last year and a half, I&amp;rsquo;ve read 306 articles. I read articles I agreed with, and articles I disagreed with. I read about technologies I may never get to use myself. I read writing by wildly successful leaders and thinkers.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s no substitute for the learning you gain by &lt;a href="https://trainugly.com/jungle-tiger/"&gt;moving through discomfort&lt;/a&gt; and doing the thing anyway.&lt;/p&gt;
&lt;p&gt;My reading list informs my thought process and approach. However, the biggest lessons I learned haven&amp;rsquo;t come directly from it.&lt;/p&gt;
&lt;p&gt;They&amp;rsquo;ve come from taking risks, getting uncomfortable, from mentors, from my team, from making mistakes, from reflection on what didn&amp;rsquo;t work. If you&amp;rsquo;re not uncomfortable or unsure from time to time, you&amp;rsquo;re probably not learning.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://erikapullum.com/images/posts/learning-superpower/digest_automation_chart.png" alt="A graph showing data, by week, of how many articles the author read. In early 2019 there are two big spikes where more than 20 articles were read. A typical average appears to be between 2 and 5 articles. An annotation in Dec 2019 reads &amp;ldquo;Original Digest Automation&amp;rdquo;. Gaps where no articles were read for several weeks are annotated &amp;ldquo;COVID&amp;rdquo; and &amp;ldquo;Work&amp;rdquo;. There are to lines overlaying the chart which are labeled cumulative read and backlog."&gt;
&lt;em&gt;My digest data, from a year and a half or reading&lt;/em&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Citibank got an expensive lesson on the importance of UI design recently. This &lt;a href="https://arstechnica.com/tech-policy/2021/02/citibank-just-got-a-500-million-lesson-in-the-importance-of-ui-design/"&gt;writeup&lt;/a&gt; includes a screenshot of the actual screen where the mistake was made.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Other favorite Dan John isms are &amp;ldquo;&lt;a href="https://www.bikejames.com/strength/the-goal-is-to-keep-the-goal-the-goal/"&gt;Keep the Goal the Goal&lt;/a&gt;&amp;rdquo; and &lt;a href="https://www.t-nation.com/powerful-words/tip-shark-habits-and-pirate-maps"&gt;pirate maps&lt;/a&gt;. I first heard Dan on the &lt;a href="https://www.powercompanyclimbing.com/blog/2017/11/24/episode-66-now-what-with-dan-john"&gt;Power Company Climbing podcast in 2017&lt;/a&gt;.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Deep Work for Data Teams</title><link>https://erikapullum.com/blog/deep-work-for-data-teams/</link><pubDate>Tue, 15 Dec 2020 00:00:00 +0000</pubDate><guid>https://erikapullum.com/blog/deep-work-for-data-teams/</guid><description>&lt;p&gt;There&amp;rsquo;s a particular kind of work that&amp;rsquo;s hard to appropriately prioritize — things that are important but rarely urgent.&lt;/p&gt;
&lt;p&gt;Here are some examples for analytics teams:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://erikapullum.com/images/posts/deep-work/important-not-urgent.png" alt="Important but not urgent work examples"&gt;&lt;/p&gt;
&lt;p&gt;None of these activities are important and urgent, as long as things are going well for your team. If you neglect them for long enough, however, your team and your internal customers will feel the impacts.&lt;/p&gt;
&lt;p&gt;Documentation, for example, is easy to bump from one day&amp;rsquo;s to do list to the next. It&amp;rsquo;s rarely important enough to stop everything and prioritize. If it&amp;rsquo;s not done well, the team will see the impacts in slower onboarding, trouble learning new skills, slow transfer of knowledge, and failure to leverage new tooling or methods.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s easy as a leader to say that your team is empowered to make time for learning, documentation, or other important but not urgent work. In practice though, we noticed that we were struggling to actually do these tasks, week in and week out. Deep work blocks started as a one day trial that we&amp;rsquo;ve scaled up into a larger experiment.&lt;/p&gt;
&lt;h3 id="what-is-a-deep-work-block"&gt;What is a Deep Work Block?&lt;/h3&gt;
&lt;p&gt;Deep work blocks are a great solution to schedule the important but not urgent work to make sure it gets done. The social aspect of doing them as a team provides built in accountability and prevents urgent tasks from sneaking in.&lt;/p&gt;
&lt;p&gt;A solid block of time — a half day or a full day — provides the focus that makes deep work effective. You have time to think deeply, get lost, get off track, find your way, and get uncomfortable. Deep work is effective for activities where you have to learn a new tool and then use it. These are hard to accomplish in slices of time between meetings.&lt;/p&gt;
&lt;p&gt;A deep work block should be focused on a particular objective that relates to something the team needs. This focus enables the team to improve or accomplish something quickly, which creates a delightful sense of momentum.&lt;/p&gt;
&lt;p&gt;Deep work blocks are most effective when they&amp;rsquo;re collaborative, long enough, and focused.&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;It&amp;#39;s deep work day for my team! Digging this experiment template I stole from &lt;a href="https://twitter.com/johncutlefish?ref_src=twsrc%5Etfw"&gt;@johncutlefish&lt;/a&gt; &lt;br&gt;&lt;br&gt;Today we&amp;#39;re practicing Python skills! &lt;a href="https://t.co/l32TIfDnmm"&gt;pic.twitter.com/l32TIfDnmm&lt;/a&gt;&lt;/p&gt;&amp;mdash; Erika Pullum (Swartz) (@eswartz) &lt;a href="https://twitter.com/eswartz/status/1333788316408246273?ref_src=twsrc%5Etfw"&gt;December 1, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;h3 id="a-data-managers-playbook"&gt;A Data Manager&amp;rsquo;s Playbook&lt;/h3&gt;
&lt;p&gt;This section is for managers who want to try this tactic with their team. Read on below for how to prep for a successful deep work block.&lt;/p&gt;
&lt;h4 id="explain-the-why"&gt;&lt;em&gt;Explain the Why&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;Connect what you&amp;rsquo;re doing in the deep work block to the mission and values of your team. It&amp;rsquo;s important to articulate that this work is still meaningful and explain how you want the team to engage with it.&lt;/p&gt;
&lt;p&gt;This is especially important for unexciting deep work, like updating documentation, adding tests, or cleaning up technical debt.&lt;/p&gt;
&lt;h4 id="test-drive-the-tools"&gt;&lt;em&gt;Test Drive the Tools&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;Whether it&amp;rsquo;s you or someone else, test drive anything the team doesn&amp;rsquo;t yet understand to ensure it fits your needs and goals. Prepare the &amp;lsquo;hello world&amp;rsquo; experience of your deep learning day carefully, especially if it requires new tools, new conceptual understanding, or a new process.&lt;/p&gt;
&lt;p&gt;For example, we used the &lt;a href="https://allendowney.github.io/ElementsOfDataScience/"&gt;Elements of Data Science Google CoLab Notebooks by Allen Downey&lt;/a&gt; for our Python deep work day. Before we committed the whole team to it, I had the analysts with the least amount of Python experience test drive a few of the notebooks. This also gave them a head start the day of deep work, since one of our goals was to bring Python experience up across the board.&lt;/p&gt;
&lt;p&gt;It was not an accident that the activity I chose didn&amp;rsquo;t require installing Python to start. I wanted to ensure that getting started was smooth, easy, and didn&amp;rsquo;t involve troubleshooting.&lt;/p&gt;
&lt;h4 id="clarify-expectations--define-success"&gt;&lt;em&gt;Clarify Expectations &amp;amp; Define Success&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;Set it up so that the team understands what you expect. How open ended or exploratory is the effort? Can you team expect to show up and follow directions for some task-oriented or learning oriented deep work? Or is the goal to step back, reflect, debate, and discuss? Do you expect to leave with a deliverable or other outcome?&lt;/p&gt;
&lt;p&gt;Making decisions by committee doesn&amp;rsquo;t work very well. As the leader, clarify your expectations up front about how the day should go.&lt;/p&gt;
&lt;p&gt;For our documentation day, I gave each team member a folder of documentation to review and update, and a goal of getting it done by the end of the day. For our learning oriented day, the goal was just to make progress in the allotted time.&lt;/p&gt;
&lt;p&gt;In developing new team processes, having a large team debate it out might not be a good use of everyone&amp;rsquo;s time. In that situation, I like to task one or two team members with producing a strong first draft. I tell them what I want to see addressed. The deep work block is then used to strengthen the draft with the rest of the team, and create buy-in for moving forward.&lt;/p&gt;
&lt;h4 id="kick-off-and-close-out"&gt;&lt;em&gt;Kick Off and Close Out&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;On the day of, kick it off together as a team. Remind everyone of how this work connects to your needs as a team. Clarify ground rules like when to ask for help and where. Build some time to reflect into the exercise, whether it&amp;rsquo;s the day of, when everything is fresh, or later in the week. Seek feedback by asking open ended questions and being prepared to hear candid feedback about what didn&amp;rsquo;t work.&lt;/p&gt;
&lt;h3 id="a-data-team-members-pitch"&gt;A Data Team Member&amp;rsquo;s Pitch&lt;/h3&gt;
&lt;p&gt;What if you don&amp;rsquo;t lead a team, but you still want deep work? Here&amp;rsquo;s a short guide for what to think about before you pitch this to your manager or team lead.&lt;/p&gt;
&lt;h4 id="what-do-you-want-to-work-on"&gt;&lt;em&gt;What do you want to work on?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;This part is pretty easy — what&amp;rsquo;s inspiring or exciting enough that you want to spend time learning it?&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s a pain point you know the team could get rid of, if you invested some time in making things better?&lt;/p&gt;
&lt;p&gt;Write your thoughts out or explain it out loud until the concept is clear and concise.&lt;/p&gt;
&lt;h4 id="why-is-it-important"&gt;&lt;em&gt;Why is it important?&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;Think about what you know about your team&amp;rsquo;s direction, strategy, and challenges. Ideally your proposed deep work connects to something your manager or team lead cares about, whether that&amp;rsquo;s something they want your team to start doing or do better.&lt;/p&gt;
&lt;p&gt;Create a clear connection between a team goal, and be ready to explain how the deep work you&amp;rsquo;re proposing will help. Ask &amp;lsquo;5 whys&amp;rsquo; to make sure you&amp;rsquo;ve thought through the connection as deeply as possible. Come up with a few examples of potential wins to share with your manager.&lt;/p&gt;
&lt;h4 id="elevator-pitch"&gt;&lt;em&gt;Elevator Pitch&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;Finally, build out your elevator pitch. Think about the two points above. Consider practicing on a peer before you try it out on your manager. If your organization or team already has a process for proposals, consider preparing the first step in the process for review with your manager.&lt;/p&gt;
&lt;p&gt;If your manager or lead isn&amp;rsquo;t immediately receptive, take a step back and seek to understand what you&amp;rsquo;re missing. What are their concerns? Don&amp;rsquo;t be afraid to incorporate feedback and attempt a new pitch!&lt;/p&gt;
&lt;h4 id="have-feedback-id-love-to-hear-it"&gt;Have feedback? I&amp;rsquo;d love to hear it!&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://twitter.com/intent/tweet?screen_name=eswartz"&gt;Continue the conversation on Twitter&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Improving Onboarding for Data Teams</title><link>https://erikapullum.com/blog/improving-onboarding/</link><pubDate>Fri, 01 May 2020 00:00:00 +0000</pubDate><guid>https://erikapullum.com/blog/improving-onboarding/</guid><description>&lt;p&gt;Starting a new technical role can be a frustrating pendulum between boredom and overwhelm.&lt;/p&gt;
&lt;p&gt;Getting set up takes time, and once you are set up, you&amp;rsquo;ll have lots of questions as you get used to new tools, data, and codebases.&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;I&amp;#39;m working on some onboarding materials for our DS team. Besides the obvious, HR type things, what technical docs are you looking for as a mid-senior level data scientist when you walk in the door at new job?&lt;/p&gt;&amp;mdash; Stephanie Kirmer (@data_stephanie) &lt;a href="https://twitter.com/data_stephanie/status/1253108558868230148?ref_src=twsrc%5Etfw"&gt;April 22, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;On my team, we&amp;rsquo;ve developed a process to keep new hires moving and learning. We use 3 key documents to help coordinate the team to bring our new member up to speed.&lt;/p&gt;
&lt;p&gt;They are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An access / skills checklist&lt;/li&gt;
&lt;li&gt;An onboarding journey doc&lt;/li&gt;
&lt;li&gt;Our overview of how we organize our documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="access--skills-checklist"&gt;&lt;strong&gt;Access / Skills Checklist&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;This document is the workhorse of the three. It provides a week-by-week road map of tasks and skills. For this demo, I&amp;rsquo;ve generalized it for a fictional new associate, Jane Smith.&lt;/p&gt;
&lt;p&gt;Colored squares identify where a skill is - need help, need practice, or solid. I use initials to indicate who is responsible. Sometimes I need to initiate something and then after that has occurred, the new hire will need to follow up.&lt;/p&gt;
&lt;p&gt;A blue dot indicates something we &lt;em&gt;know&lt;/em&gt; needs better documentation. Maybe there are directions, but they&amp;rsquo;re not up to date. Maybe there aren&amp;rsquo;t any written down yet. Once the new hire learns the skill, they&amp;rsquo;ll get initials in blue to indicate they need to create the documentation or fix what&amp;rsquo;s already there.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re on our third or fourth iteration of this list - every time we hire someone new we find something missing or something we could do better.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://erikapullum.com/images/posts/onboarding-overview.gif" alt="Access and skills checklist animation showing week-by-week progression"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What works well&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every new hire refines your documentation&lt;/li&gt;
&lt;li&gt;Give new hires a clear road map, week-by-week, for getting capable in the role&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s something to do when peers / collaborators aren&amp;rsquo;t accessible - go get more green on the list&lt;/li&gt;
&lt;li&gt;Balance learning styles by offering options &amp;amp; supporting learning by doing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What needs an upgrade&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A checklist does a bad job communicating concepts&lt;/li&gt;
&lt;li&gt;My &amp;lsquo;working&amp;rsquo; doc is still missing the &amp;ldquo;why&amp;rdquo; column. The original did a great job telling you what to do but didn&amp;rsquo;t tell you why it mattered&lt;/li&gt;
&lt;li&gt;As work picks up, new associates shift away from learning towards doing. I need to find a better way to create accountability through the entire onboarding process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="onboarding-journey-doc"&gt;Onboarding Journey Doc&lt;/h3&gt;
&lt;p&gt;Checklists lack soul. The onboarding journey document is personalized by me for every new associate. It breaks down into five sections.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Key Reference Links&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;New hires are learning a lot very quickly. This list of links has the access / skills doc and a couple other key internal documents. My goal is to help associates quickly find help. I add links to this section as the new hire asks questions or gets stuck.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Peer Support Resources&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I identify 1-2 key team members who will support the new hire&amp;rsquo;s learning and answer questions as they pop up.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Week by Week Schedule&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This section ties the access / skills list to the onboarding journey. Weeks 1-2 are all about basic access, weeks 3-6 are about building core skills for the role.&lt;/p&gt;
&lt;p&gt;One of the key ways we do this on my team is by having a new hire cover 100% of support requests for 6 weeks. When they cover support, they meet business partners, build a picture of our existing portfolio, and sort through any access issues that crop up.&lt;/p&gt;
&lt;p&gt;By the middle to end of this time, an obvious first project has usually come up. With appropriate direction and support, my recent new hires have been executing on projects within 6 weeks.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Key People to Meet&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In this section I build a big list that takes about 3 - 6 months to work through. It&amp;rsquo;s customized to each associates&amp;rsquo; role and prioritized by their key business relationships. Depending on the person&amp;rsquo;s role, I will ask the new hire to either meet or job shadow the person.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Potential Projects&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The team helps me build up this list with good first projects. We want our new hire to get some wins early to build their confidence and get them engaged.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What works well&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Personalizing the document to each new hire&amp;rsquo;s needs and experience&lt;/li&gt;
&lt;li&gt;Providing a clear week by week road map&lt;/li&gt;
&lt;li&gt;Most are happy to see a &amp;ldquo;menu&amp;rdquo; of projects they could work on&lt;/li&gt;
&lt;li&gt;Maintain flexibility to adjust as things go on&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What needs an upgrade&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In practice, we stop using the doc once project work picks up&lt;/li&gt;
&lt;li&gt;To fix this, I could use the onboarding doc as the 1:1 doc&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s hard to keep all the different documents straight - new hires need one central landing place&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="documentation"&gt;Documentation&lt;/h3&gt;
&lt;p&gt;Good documentation is essential for a high functioning collaborative team. Our final doc new hires get is a living document which explains how our team creates and uses documentation.&lt;/p&gt;
&lt;p&gt;Each team has to come up with its own norm for documentation - where you store it will be different from company to company and team to team.&lt;/p&gt;
&lt;p&gt;In general, this document should cover all the bases and evolve over time to be as clear and helpful as possible.&lt;/p&gt;
&lt;p&gt;Here are the guidelines for ours&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If documentation is wrong or unclear &lt;strong&gt;stop what you are doing and fix it&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;If you don&amp;rsquo;t know how to fix the documentation, ask the team!&lt;/li&gt;
&lt;li&gt;The folders are numbered and order by priority&lt;/li&gt;
&lt;li&gt;Put the documents in the most logical place from the list below&lt;/li&gt;
&lt;li&gt;All meeting notes and project files should be dated&lt;/li&gt;
&lt;li&gt;Use YYYY/MM/DD as your date format so files order by date with the folders&lt;/li&gt;
&lt;li&gt;The last guideline covers what documentation is for team members (internal) vs. externally facing (within the company)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;My team is reorganizing our collaborative documentation drive.&lt;br&gt;&lt;br&gt;The only topic with 100% agreement? &lt;br&gt;&lt;br&gt;Date things YYYY/MM/DD at the start of the file name so they sort. &lt;a href="https://t.co/4xqxUuAdZY"&gt;pic.twitter.com/4xqxUuAdZY&lt;/a&gt;&lt;/p&gt;&amp;mdash; Erika Swartz (@eswartz) &lt;a href="https://twitter.com/eswartz/status/1179862961936052224?ref_src=twsrc%5Etfw"&gt;October 3, 2019&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;What works&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I can find documentation where I expect it&lt;/li&gt;
&lt;li&gt;This reduces everyone&amp;rsquo;s need to interrupt each other to ask for information&lt;/li&gt;
&lt;li&gt;We built the content strategy collaboratively&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What needs an upgrade&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keeping up good documentation is hard&lt;/li&gt;
&lt;li&gt;Documentation can be confusing if there&amp;rsquo;s not enough context about when it applies&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="how-will-you-know-its-working"&gt;How will you know it&amp;rsquo;s working?&lt;/h3&gt;
&lt;p&gt;Onboarding is hard. Doing it well requires practice, feedback, and iteration.&lt;/p&gt;
&lt;p&gt;My goals for onboarding a new team member are simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I want them to feel welcome and valued from day one&lt;/li&gt;
&lt;li&gt;I want them to have help when they need it&lt;/li&gt;
&lt;li&gt;I want them to have support and space to learn&lt;/li&gt;
&lt;li&gt;I want them contribute to the team and our work in ways that feel meaningful and interesting to them&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do all that well, and value for your company and your team will follow naturally.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;As a side note, this framework works for documenting your current job too. It&amp;rsquo;s especially helpful if you&amp;rsquo;re promoted internally to prevent questions related to your old job during your transition period. The access / skills list would stay the same, the onboarding journey doc would focus on in progress initiatives, and the documentation about documentation address how you&amp;rsquo;ve documented your own work.&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>