<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pydealist</title><link>https://pydealist.com/</link><description>Recent content on Pydealist</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://pydealist.com/index.xml" rel="self" type="application/rss+xml"/><item><title>About</title><link>https://pydealist.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pydealist.com/about/</guid><description>&lt;img src="https://pydealist.com/images/nate-cheever-small.jpg" alt="Nate Cheever" width="160" height="160" style="float:right; width:160px; height:160px; object-fit:cover; border-radius:50%; margin:0 0 1rem 1.5rem; max-width:40%;"&gt;&#10;&lt;p&gt;I&amp;rsquo;m Nate Cheever. I build things that predict things.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve done data work since 2013: Excel and macros first, then R, then Python after a data science bootcamp in New York in 2015. NLP has been my favorite part of it ever since. I&amp;rsquo;m almost entirely self-taught: no CS degree, no grad school, which mostly means I learned the fundamentals the hard way, by needing them.&lt;/p&gt;</description></item><item><title>Resources</title><link>https://pydealist.com/resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pydealist.com/resources/</guid><description>&lt;p&gt;A couple of short, free guides are in the works: a donor retention primer and a plain-language guide to knowing who your best supporters really are. Many cool things could be here in the future!&lt;/p&gt;&#10;&lt;p&gt;In the meantime, the fastest way to get something specific to your organization is to &lt;a href="https://calendar.app.google/t6upV99eSxr5HZBy6"&gt;book 20 minutes&lt;/a&gt; and I&amp;rsquo;ll just tell you.&lt;/p&gt;</description></item><item><title>Search</title><link>https://pydealist.com/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pydealist.com/search/</guid><description/></item><item><title>What is attrition costing you?</title><link>https://pydealist.com/calculator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pydealist.com/calculator/</guid><description>&lt;p&gt;Move the sliders to your actual numbers. This is deliberately crude: two inputs, no assumptions about your giving cycle, no model. It&amp;rsquo;s the back-of-the-envelope version of the question, and it&amp;rsquo;s usually enough to show whether the real version is worth asking.&lt;/p&gt;&#10;&#10;&lt;style&gt;&#10;.pd-calc {&#10; background: var(--card);&#10; border: 1px solid var(--line);&#10; border-radius: var(--radius);&#10; box-shadow: var(--shadow-hard);&#10; padding: clamp(1.25rem, 3vw, 2rem);&#10; margin: 2rem 0;&#10;}&#10;.pd-calc__field { margin-bottom: 1.75rem; }&#10;.pd-calc__field:last-of-type { margin-bottom: 2rem; }&#10;.pd-calc__label {&#10; display: block;&#10; font-family: var(--font-mono);&#10; font-size: .75rem;&#10; letter-spacing: .08em;&#10; text-transform: uppercase;&#10; color: var(--muted);&#10; margin-bottom: .75rem;&#10;}&#10;.pd-calc__range {&#10; -webkit-appearance: none;&#10; appearance: none;&#10; width: 100%;&#10; height: .375rem;&#10; background: var(--paper-2);&#10; border: 1px solid var(--line-soft);&#10; border-radius: 999px;&#10; outline: none;&#10; margin: 0;&#10;}&#10;.pd-calc__range::-webkit-slider-thumb {&#10; -webkit-appearance: none;&#10; appearance: none;&#10; width: 1.35rem;&#10; height: 1.35rem;&#10; border-radius: 50%;&#10; background: var(--accent);&#10; border: 2px solid var(--line);&#10; cursor: pointer;&#10;}&#10;.pd-calc__range::-moz-range-thumb {&#10; width: 1.35rem;&#10; height: 1.35rem;&#10; border-radius: 50%;&#10; background: var(--accent);&#10; border: 2px solid var(--line);&#10; cursor: pointer;&#10;}&#10;.pd-calc__range:focus-visible { outline: 3px solid var(--focus); outline-offset: 3px; }&#10;.pd-calc__amount {&#10; font-family: var(--font-display);&#10; font-size: clamp(1.5rem, 4vw, 2rem);&#10; font-weight: 700;&#10; color: var(--ink);&#10; margin-top: .625rem;&#10; line-height: 1.1;&#10;}&#10;.pd-calc__results {&#10; border-top: 1px solid var(--line);&#10; padding-top: 1.25rem;&#10;}&#10;.pd-calc__row {&#10; display: flex;&#10; justify-content: space-between;&#10; align-items: baseline;&#10; gap: 1rem;&#10; padding: .625rem 0;&#10; border-bottom: 1px solid var(--line-soft);&#10;}&#10;.pd-calc__row:last-child { border-bottom: 0; }&#10;.pd-calc__row-label { color: var(--muted); font-size: .95rem; }&#10;.pd-calc__figure {&#10; font-family: var(--font-mono);&#10; font-weight: 700;&#10; font-size: 1.05rem;&#10; color: var(--ink);&#10; white-space: nowrap;&#10;}&#10;.pd-calc__row--head .pd-calc__row-label { color: var(--ink); font-weight: 600; }&#10;.pd-calc__row--head .pd-calc__figure { color: var(--accent-dark); font-size: 1.35rem; }&#10;.pd-calc__note {&#10; font-size: .8rem;&#10; color: var(--muted);&#10; margin: 1rem 0 0;&#10; font-style: italic;&#10;}&#10;@media (prefers-reduced-motion: reduce) {&#10; .pd-calc__range::-webkit-slider-thumb { transition: none; }&#10;}&#10;&lt;/style&gt;&#10;&#10;&lt;div class="pd-calc" data-pd-calc&gt;&#10; &lt;div class="pd-calc__field"&gt;&#10; &lt;label class="pd-calc__label" for="pd-calc-revenue-0"&gt;Annual donor or member revenue&lt;/label&gt;&#10; &lt;input class="pd-calc__range" type="range" id="pd-calc-revenue-0"&#10; data-pd-revenue min="250000" max="50000000" step="250000" value="25000000"&gt;&#10; &lt;div class="pd-calc__amount" data-pd-revenue-display&gt;&amp;nbsp;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&#10; &lt;div class="pd-calc__field"&gt;&#10; &lt;label class="pd-calc__label" for="pd-calc-attrition-0"&gt;Estimated annual attrition rate&lt;/label&gt;&#10; &lt;input class="pd-calc__range" type="range" id="pd-calc-attrition-0"&#10; data-pd-attrition min="10" max="60" step="5" value="25"&gt;&#10; &lt;div class="pd-calc__amount" data-pd-attrition-display&gt;&amp;nbsp;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&#10; &lt;div class="pd-calc__results"&gt;&#10; &lt;div class="pd-calc__row pd-calc__row--head"&gt;&#10; &lt;span class="pd-calc__row-label"&gt;Lost to attrition this year&lt;/span&gt;&#10; &lt;span class="pd-calc__figure" data-pd-baseline&gt;&amp;nbsp;&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="pd-calc__row"&gt;&#10; &lt;span class="pd-calc__row-label"&gt;Recover 10% of that&lt;/span&gt;&#10; &lt;span class="pd-calc__figure" data-pd-recover="0.10"&gt;&amp;nbsp;&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="pd-calc__row"&gt;&#10; &lt;span class="pd-calc__row-label"&gt;Recover 25% of that&lt;/span&gt;&#10; &lt;span class="pd-calc__figure" data-pd-recover="0.25"&gt;&amp;nbsp;&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="pd-calc__row"&gt;&#10; &lt;span class="pd-calc__row-label"&gt;Recover 50% of that&lt;/span&gt;&#10; &lt;span class="pd-calc__figure" data-pd-recover="0.50"&gt;&amp;nbsp;&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10;&#10; &lt;p class="pd-calc__note"&gt;A rough estimate, not a model. It sizes the pool; it doesn't name who's in it.&lt;/p&gt;</description></item></channel></rss>