<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: productivity</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/productivity.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-12-06T14:40:46+00:00</updated><author><name>Simon Willison</name></author><entry><title>Quoting Daniel Lemire</title><link href="https://simonwillison.net/2025/Dec/6/daniel-lemire/#atom-tag" rel="alternate"/><published>2025-12-06T14:40:46+00:00</published><updated>2025-12-06T14:40:46+00:00</updated><id>https://simonwillison.net/2025/Dec/6/daniel-lemire/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://lemire.me/blog/2025/12/05/why-speed-matters/"&gt;&lt;p&gt;If you work slowly, you will be more likely to stick with your slightly obsolete work. You know that professor who spent seven years preparing lecture notes twenty years ago? He is not going to throw them away and start again, as that would be a new seven-year project. So he will keep teaching using aging lecture notes until he retires and someone finally updates the course.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://lemire.me/blog/2025/12/05/why-speed-matters/"&gt;Daniel Lemire&lt;/a&gt;, Why speed matters&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;&lt;/p&gt;



</summary><category term="productivity"/></entry><entry><title>Quoting Aaron Boodman</title><link href="https://simonwillison.net/2025/Oct/28/aaron-boodman/#atom-tag" rel="alternate"/><published>2025-10-28T02:08:57+00:00</published><updated>2025-10-28T02:08:57+00:00</updated><id>https://simonwillison.net/2025/Oct/28/aaron-boodman/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://x.com/aboodman/status/1982898753607741502"&gt;&lt;p&gt;Claude doesn't make me &lt;em&gt;much&lt;/em&gt; faster on the work that I am an expert on. Maybe 15-20% depending on the day.&lt;/p&gt;
&lt;p&gt;It's the work that I don't know how to do and would have to research. Or the grunge work I don't even want to do. On this it is hard to even put a number on. Many of the projects I do with Claude day to day I just wouldn't have done at all pre-Claude.&lt;/p&gt;
&lt;p&gt;Infinity% improvement in productivity on those.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://x.com/aboodman/status/1982898753607741502"&gt;Aaron Boodman&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude"&gt;claude&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/aaron-boodman"&gt;aaron-boodman&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai-assisted-programming"/><category term="claude"/><category term="generative-ai"/><category term="ai"/><category term="llms"/><category term="aaron-boodman"/><category term="productivity"/></entry><entry><title>Quoting Kate Niederhoffer, Gabriella Rosen Kellerman, Angela Lee, Alex Liebscher, Kristina Rapuano and Jeffrey T. Hancock</title><link href="https://simonwillison.net/2025/Sep/22/workslop/#atom-tag" rel="alternate"/><published>2025-09-22T23:21:49+00:00</published><updated>2025-09-22T23:21:49+00:00</updated><id>https://simonwillison.net/2025/Sep/22/workslop/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://hbr.org/2025/09/ai-generated-workslop-is-destroying-productivity"&gt;&lt;p&gt;We define workslop as &lt;em&gt;AI generated work content that masquerades as good work, but lacks the substance to meaningfully advance a given task&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Here’s how this happens. As AI tools become more accessible, workers are increasingly able to quickly produce polished output: well-formatted slides, long, structured reports, seemingly articulate summaries of academic papers by non-experts, and usable code. But while some employees are using this ability to polish good work, others use it to create content that is actually unhelpful, incomplete, or missing crucial context about the project at hand. The insidious effect of workslop is that it shifts the burden of the work downstream, requiring the receiver to interpret, correct, or redo the work. In other words, it transfers the effort from creator to receiver.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://hbr.org/2025/09/ai-generated-workslop-is-destroying-productivity"&gt;Kate Niederhoffer, Gabriella Rosen Kellerman, Angela Lee, Alex Liebscher, Kristina Rapuano and Jeffrey T. Hancock&lt;/a&gt;, Harvard Business Review&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai-misuse"&gt;ai-misuse&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-ethics"&gt;ai-ethics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/definitions"&gt;definitions&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai-misuse"/><category term="productivity"/><category term="ai-ethics"/><category term="generative-ai"/><category term="ai"/><category term="llms"/><category term="definitions"/></entry><entry><title>Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity</title><link href="https://simonwillison.net/2025/Jul/12/ai-open-source-productivity/#atom-tag" rel="alternate"/><published>2025-07-12T18:12:23+00:00</published><updated>2025-07-12T18:12:23+00:00</updated><id>https://simonwillison.net/2025/Jul/12/ai-open-source-productivity/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/"&gt;Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
METR - for Model Evaluation &amp;amp; Threat Research - are a non-profit research institute founded by Beth Barnes, a former alignment researcher at OpenAI (&lt;a href="https://en.wikipedia.org/wiki/METR"&gt;see Wikipedia&lt;/a&gt;). They've previously contributed to system cards for OpenAI and Anthropic, but this new research represents a slightly different direction for them:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We conduct a randomized controlled trial (RCT) to understand how early-2025 AI tools affect the productivity of experienced open-source developers working on their own repositories. Surprisingly, we find that when developers use AI tools, they take 19% longer than without—AI makes them slower.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;a href="https://metr.org/Early_2025_AI_Experienced_OS_Devs_Study.pdf"&gt;full paper (PDF)&lt;/a&gt; has a lot of details that are missing from the linked summary.&lt;/p&gt;
&lt;p&gt;METR recruited 16 experienced open source developers for their study, with varying levels of exposure to LLM tools. They then assigned them tasks from their own open source projects, randomly assigning whether AI was allowed or not allowed for each of those tasks.&lt;/p&gt;
&lt;p&gt;They found a surprising difference between developer estimates and actual completion times:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;After completing the study, developers estimate that allowing AI
reduced completion time by 20%. Surprisingly, we find that allowing AI actually increases completion time by 19%—AI tooling slowed developers down.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I shared my initial intuition about this paper &lt;a href="https://news.ycombinator.com/item?id=44522772#44523442"&gt;on Hacker News&lt;/a&gt; the other day:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My personal theory is that getting a significant productivity boost from LLM assistance and AI tools has a much steeper learning curve than most people expect.&lt;/p&gt;
&lt;p&gt;This study had 16 participants, with a mix of previous exposure to AI tools - 56% of them had never used Cursor before, and the study was mainly about Cursor.&lt;/p&gt;
&lt;p&gt;They then had those 16 participants work on issues (about 15 each), where each issue was randomly assigned a "you can use AI" v.s. "you can't use AI" rule.&lt;/p&gt;
&lt;p&gt;So each developer worked on a mix of AI-tasks and no-AI-tasks during the study.&lt;/p&gt;
&lt;p&gt;A quarter of the participants saw increased performance, 3/4 saw reduced performance.&lt;/p&gt;
&lt;p&gt;One of the top performers for AI was also someone with the most previous Cursor experience. The paper acknowledges that here:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;However, we see positive speedup for the one developer who has more than 50 hours of Cursor experience, so it's plausible that there is a high skill ceiling for using Cursor, such that developers with significant experience see positive speedup.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;My intuition here is that this study mainly demonstrated that the learning curve on AI-assisted development is high enough that asking developers to bake it into their existing workflows reduces their performance while they climb that learing curve.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I got &lt;a href="https://news.ycombinator.com/item?id=44522772#44523638"&gt;an insightful reply there&lt;/a&gt; from Nate Rush, one of the authors of the study, which included these notes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Some prior studies that find speedup do so with developers that have similar (or less!) experience with the tools they use. In other words, the "steep learning curve" theory doesn't differentially explain our results vs. other results.&lt;/li&gt;
&lt;li&gt;Prior to the study, 90+% of developers had reasonable experience prompting LLMs. Before we found slowdown, this was the only concern that most external reviewers had about experience was about prompting -- as prompting was considered the primary skill. In general, the standard wisdom was/is Cursor is very easy to pick up if you're used to VSCode, which most developers used prior to the study.&lt;/li&gt;
&lt;li&gt;Imagine all these developers had a TON of AI experience. One thing this might do is make them worse programmers when not using AI (relatable, at least for me), which in turn would raise the speedup we find (but not because AI was better, but just because with AI is much worse). In other words, we're sorta in between a rock and a hard place here -- it's just plain hard to figure out what the right baseline should be!&lt;/li&gt;
&lt;li&gt;We shared information on developer prior experience with expert forecasters. Even with this information, forecasters were still dramatically over-optimistic about speedup.&lt;/li&gt;
&lt;li&gt;As you say, it's totally possible that there is a long-tail of skills to using these tools -- things you only pick up and realize after hundreds of hours of usage. Our study doesn't really speak to this. I'd be excited for future literature to explore this more.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In general, these results being surprising makes it easy to read the paper, find one factor that resonates, and conclude "ah, this one factor probably just explains slowdown." My guess: there is no one factor -- there's a bunch of factors that contribute to this result -- at least 5 seem likely, and at least 9 we can't rule out (see the factors table on page 11).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here's their table of the most likely factors:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Table showing factors contributing to AI development slowdown with Factor, Type, and Relevant Observations columns. Title: &amp;quot;Factors likely to contribute to slowdown&amp;quot;. Row 1 - Over-optimism about AI usefulness (C.1.1) with hourglass icon: Developers forecast AI will decrease implementation time by 24%, Developers post hoc estimate AI decreased implementation time by 20%. Row 2 - High developer familiarity with repositories (C.1.2) with person icon: Developers slowed down more on issues they are more familiar with, Developers report that their experience makes it difficult for AI to help them, Developers average 5 years experience and 1,500 commits on repositories. Row 3 - Large and complex repositories (C.1.3) with building icon: Developers report AI performs worse in large and complex environments, Repositories average 10 years old with &amp;gt;1,100,000 lines of code. Row 4 - Low AI reliability (C.1.4) with building icon: Developers accept &amp;lt;44% of AI generations, Majority report making major changes to clean up AI code, 9% of time spent reviewing/cleaning AI outputs. Row 5 - Implicit repository context (C.1.5) with building and person icons: Developers report AI doesn't utilize important tacit knowledge or context." src="https://static.simonwillison.net/static/2025/ai-factors-slowdown.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;I think Nate's right that jumping straight to a conclusion about a single factor is a shallow and unproductive way to think about this report.&lt;/p&gt;
&lt;p&gt;That said, I can't resist the temptation to do exactly that! The factor that stands out most to me is that these developers were all working in repositories they have a deep understanding of already, presumably on non-trivial issues since any trivial issues are likely to have been resolved in the past.&lt;/p&gt;
&lt;p&gt;I think this is a really interesting paper. Measuring developer productivity is &lt;em&gt;notoriously&lt;/em&gt; difficult. I hope this paper inspires more work with a similar level of detail to analyzing how professional programmers spend their time:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To compare how developers spend their time with and without AI assistance, we manually label a subset of 128 screen recordings with fine-grained activity labels, totaling 143 hours of video.&lt;/p&gt;
&lt;/blockquote&gt;

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=44522772"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/paper-review"&gt;paper-review&lt;/a&gt;&lt;/p&gt;



</summary><category term="open-source"/><category term="productivity"/><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="paper-review"/></entry><entry><title>Using LLMs and Cursor to become a finisher</title><link href="https://simonwillison.net/2025/Jan/4/llms-and-cursor/#atom-tag" rel="alternate"/><published>2025-01-04T20:56:39+00:00</published><updated>2025-01-04T20:56:39+00:00</updated><id>https://simonwillison.net/2025/Jan/4/llms-and-cursor/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://zohaib.me/using-llms-and-cursor-for-finishing-projects-productivity/"&gt;Using LLMs and Cursor to become a finisher&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Zohaib Rauf describes a pattern I've seen quite a few examples of now: engineers who moved into management but now find themselves able to ship working code again (at least for their side projects) thanks to the productivity boost they get from leaning on LLMs.&lt;/p&gt;
&lt;p&gt;Zohaib also provides a very useful detailed example of how they use a combination of ChatGPT and Cursor to work on projects, by starting with a spec created through collaboration with o1, then saving that as a &lt;code&gt;SPEC.md&lt;/code&gt; Markdown file and adding that to Cursor's context in order to work on the actual implementation.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=42594256"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatgpt"&gt;chatgpt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/o1"&gt;o1&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cursor"&gt;cursor&lt;/a&gt;&lt;/p&gt;



</summary><category term="productivity"/><category term="ai"/><category term="generative-ai"/><category term="chatgpt"/><category term="llms"/><category term="ai-assisted-programming"/><category term="o1"/><category term="cursor"/></entry><entry><title>Supercharging Developer Productivity with ChatGPT and Claude with Simon Willison</title><link href="https://simonwillison.net/2024/Sep/17/supercharging-developer-productivity/#atom-tag" rel="alternate"/><published>2024-09-17T16:21:22+00:00</published><updated>2024-09-17T16:21:22+00:00</updated><id>https://simonwillison.net/2024/Sep/17/supercharging-developer-productivity/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://twimlai.com/podcast/twimlai/supercharging-developer-productivity-with-chatgpt-and-claude/"&gt;Supercharging Developer Productivity with ChatGPT and Claude with Simon Willison&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I'm the guest for the latest episode of the &lt;a href="https://twimlai.com/"&gt;TWIML AI podcast&lt;/a&gt; - This Week in Machine Learning &amp;amp; AI, hosted by Sam Charrington.&lt;/p&gt;
&lt;p&gt;We mainly talked about how I use LLM tooling for my own work - Claude, ChatGPT, Code Interpreter, Claude Artifacts, LLM and GitHub Copilot - plus a bit about my experiments with local models.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/twimlai/status/1835850286528934139"&gt;@twimlai&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/podcasts"&gt;podcasts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatgpt"&gt;chatgpt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude"&gt;claude&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/podcast-appearances"&gt;podcast-appearances&lt;/a&gt;&lt;/p&gt;



</summary><category term="podcasts"/><category term="productivity"/><category term="ai"/><category term="generative-ai"/><category term="chatgpt"/><category term="claude"/><category term="podcast-appearances"/></entry><entry><title>Quoting Evan Hahn</title><link href="https://simonwillison.net/2024/Jul/1/evan-hahn/#atom-tag" rel="alternate"/><published>2024-07-01T20:42:43+00:00</published><updated>2024-07-01T20:42:43+00:00</updated><id>https://simonwillison.net/2024/Jul/1/evan-hahn/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://evanhahn.com/programming-beliefs-as-of-july-2024/"&gt;&lt;p&gt;When presented with a difficult task, I ask myself: &lt;em&gt;“what if I didn’t do this at all?”&lt;/em&gt;.  Most of the time, this is a stupid question, and I have to do the thing. But ~5% of the time, I realize that I can completely skip some work.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://evanhahn.com/programming-beliefs-as-of-july-2024/"&gt;Evan Hahn&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;&lt;/p&gt;



</summary><category term="productivity"/><category term="programming"/></entry><entry><title>Shell History Is Your Best Productivity Tool</title><link href="https://simonwillison.net/2024/Apr/10/shell-history-is-your-best-productivity-tool/#atom-tag" rel="alternate"/><published>2024-04-10T23:17:59+00:00</published><updated>2024-04-10T23:17:59+00:00</updated><id>https://simonwillison.net/2024/Apr/10/shell-history-is-your-best-productivity-tool/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://martinheinz.dev/blog/110"&gt;Shell History Is Your Best Productivity Tool&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Martin Heinz drops a wealth of knowledge about ways to configure zsh (the default shell on macOS these days) to get better utility from your shell history.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://lobste.rs/s/zfcis3/shell_history_is_your_best_productivity"&gt;lobste.rs&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/shell"&gt;shell&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/zsh"&gt;zsh&lt;/a&gt;&lt;/p&gt;



</summary><category term="productivity"/><category term="shell"/><category term="zsh"/></entry><entry><title>Advanced Topics in Reminders and To Do Lists</title><link href="https://simonwillison.net/2024/Mar/15/advanced-topics-in-reminders-and-to-do-lists/#atom-tag" rel="alternate"/><published>2024-03-15T02:38:55+00:00</published><updated>2024-03-15T02:38:55+00:00</updated><id>https://simonwillison.net/2024/Mar/15/advanced-topics-in-reminders-and-to-do-lists/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://fredbenenson.medium.com/advanced-topics-in-reminders-and-to-do-lists-c5edec286670"&gt;Advanced Topics in Reminders and To Do Lists&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Fred Benenson’s advanced guide to the Apple Reminders ecosystem. I live my life by Reminders—I particularly like that you can set them with Siri, so “Hey Siri, remind me to check the chickens made it to bed at 7pm every evening” sets up a recurring reminder without having to fiddle around in the UI. Fred has some useful tips here I hadn’t seen before.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;&lt;/p&gt;



</summary><category term="productivity"/></entry><entry><title>Tom Scott, and the formidable power of escalating streaks</title><link href="https://simonwillison.net/2024/Jan/2/escalating-streaks/#atom-tag" rel="alternate"/><published>2024-01-02T20:32:08+00:00</published><updated>2024-01-02T20:32:08+00:00</updated><id>https://simonwillison.net/2024/Jan/2/escalating-streaks/#atom-tag</id><summary type="html">
    &lt;p&gt;Ten years ago yesterday, Tom Scott &lt;a href="https://www.youtube.com/watch?v=X5V45wYwrkY"&gt;posted this video&lt;/a&gt; to YouTube about "Special Crossings For Horses In Britain". It was the first in his &lt;a href="https://www.youtube.com/playlist?list=PL96C35uN7xGI9HGKHsArwxiOejecVyNem"&gt;Things You Might Not Know&lt;/a&gt; series, but more importantly it was the start of a streak.&lt;/p&gt;
&lt;p&gt;Tom maintained a streak of posting a video approximately once a week for the next ten years.&lt;/p&gt;
&lt;p&gt;Yesterday, he ended that streak with &lt;a href="https://www.youtube.com/watch?v=7DKv5H5Frt0"&gt;After ten years, it's time to stop making videos&lt;/a&gt;. He's not done with YouTube, but he's no longer holding himself to that intimidating weekly schedule.&lt;/p&gt;

&lt;iframe style="max-width: 100%" width="560" height="315" src="https://www.youtube-nocookie.com/embed/7DKv5H5Frt0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen"&gt; &lt;/iframe&gt;

&lt;p&gt;I strongly recommend watching his final video. There's a moment when you realize what he's up to in it which is quite delightful.&lt;/p&gt;
&lt;p&gt;I've known Tom for a long time. I made an appearance in the 11th "Things You Might Not Know" video, &lt;a href="https://www.youtube.com/watch?v=DNUhKkNY6x0"&gt; A Zeppelin, A Cat, and The World's First In-Flight Radio Message&lt;/a&gt;, two weeks into his streak (he was doing one a day at first), filmed at our leaving-the-UK-for-the-USA party in January 2014.&lt;/p&gt;
&lt;p&gt;Watching from afar has been somewhat surreal. I didn't watch every video, but every now and then I'd see that Tom was &lt;a href="https://www.youtube.com/watch?v=RYGFczNMAMk"&gt;flying with the Red Arrows&lt;/a&gt;, or visiting &lt;a href="https://www.youtube.com/watch?v=WUVZbBBHrI4"&gt;yet another nuclear reactor site&lt;/a&gt;, or &lt;a href="https://www.youtube.com/watch?v=-BdZPFzH2JY"&gt;overcoming his fear of rollercoasters&lt;/a&gt;. And then I'd notice that he'd picked up another million subscribers.&lt;/p&gt;
&lt;p&gt;Hanging out with Tom was fun because he would inevitably be recognised by someone. 6.3 million subscribers is a lot of people!&lt;/p&gt;
&lt;p&gt;Tom's success on YouTube comes down to a whole bunch of different factors. He was already &lt;a href="https://www.youtube.com/watch?v=zYd_8-Ps_kw"&gt;a talented public speaker&lt;/a&gt;, a skilled researcher, had &lt;a href="https://en.wikipedia.org/wiki/Gadget_Geeks"&gt;a brief stint as TV presenter&lt;/a&gt; and &lt;a href="https://www.tomscott.com/usvsth3m/"&gt;deep understanding of the viral internet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Experienced YouTubers will tell you that frequency is key to success on that platform. YouTube's audience (and maybe their opaque algorithm) rewards consistency: publishing regularly is a crucial part of building an audience.&lt;/p&gt;
&lt;p&gt;Tom is also incredibly conscientious about the content he produces. Take a look at his &lt;a href="https://www.tomscott.com/corrections/"&gt;corrections and clarifications&lt;/a&gt; page to see how much effort he puts into getting things right: 25 detailed corrections across over 500 videos. See also his recent video &lt;a href="https://www.youtube.com/watch?v=lIbfMjZ0ME4"&gt; Every mistake I've made since 2014&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;His most significant correction became &lt;a href="https://www.youtube.com/watch?v=Wif1EAgEQKI"&gt;a whole new video&lt;/a&gt; clarifying how London fire brigades handled uninsured buildings in the 18th century, backed by &lt;a href="https://www.tomscott.com/corrections/firemarks/"&gt;two weeks of paid research&lt;/a&gt; by an archives and heritage research consultant. His &lt;a href="https://www.youtube.com/watch?v=m__OZ3ZsO4Y&amp;amp;t=335s"&gt;commitment to accessibility&lt;/a&gt; is inspiring as well.&lt;/p&gt;
&lt;p&gt;And then there was the streak.&lt;/p&gt;
&lt;h4 id="escalating-streaks"&gt;Escalating streaks&lt;/h4&gt;
&lt;p&gt;The best way to get really good at anything is to do that thing on a regular basis, thoughtfully, and with the goal of doing it slightly better every time.&lt;/p&gt;
&lt;p&gt;Tom's streak publishing a video to YouTube once a week for ten years is the single best illustration I've ever seen of that principle in action.&lt;/p&gt;
&lt;p&gt;His initial videos were interesting, educational and had his signature enthusiastic energy, but they weren't exactly high budget affairs.&lt;/p&gt;
&lt;p&gt;As he iterated on the format, he started to figure out what worked. His scripts got tighter, his research deeper and he started working with professionals to improve his production values.&lt;/p&gt;
&lt;p&gt;He also learned to use his growing audience to gain access to a dizzying array of fascinating locations, experts and experiences.&lt;/p&gt;
&lt;p&gt;The amount of work he invested in this project is staggering. The research, logistics, travel, writing, filming, editing and community management involved are hard for me to even comprehend.&lt;/p&gt;
&lt;p&gt;The end result is something truly extraordinary. What a legacy! That final video has over 42,000 comments already, overwhelmingly thankful and positive.&lt;/p&gt;
&lt;h4 id="streaks-insidious"&gt;Streaks can be insidious&lt;/h4&gt;
&lt;p&gt;In Tom's closing video he says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So now it’s time to take a breather. I can’t keep this up. This is my dream job, and I have a lot of fun doing it. I know I’m incredibly lucky. But a dream job is still a job. And it’s a job that keeps getting bigger and more complicated and I am &lt;em&gt;so tired&lt;/em&gt;! There’s nothing in my life right now except work. I did get close to burning out, but fortunately I always knew when to step back from the brink.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Streaks are a powerful psychological tool. Once Tom got to nine years, there was no way he wasn't going to push through to ten. I'm glad for his sake that in hitting that final milestone he's finally able to take a break!&lt;/p&gt;
&lt;h4 id="my-streaks"&gt;My own experience with streaks&lt;/h4&gt;
&lt;p&gt;I've found great benefit from streaks myself. I'm on day 1,826 (that's 5 years yesterday) of a &lt;a href="https://duolingo.com/"&gt;Duolingo&lt;/a&gt; streak, primarily learning Spanish. It's kind of working - from an investment of less than 15 minutes a day I'm now able to understand ~90% of news articles written in that language.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2024/duolingo-streak-1826.jpg" alt="Duolingo screenshot: Streak Society - 1826 day streak! You've extended your streak 2 more times before noon this week" style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;There are certainly more effective ways to learn a language, but I've tried different approaches in the past and nothing ever stuck for me to the point that I made real progress.&lt;/p&gt;
&lt;p&gt;It turns out the streak mechanism was exactly what I needed. That tiny piece of effort, repeated every day over multiple years, really does add up.&lt;/p&gt;
&lt;p&gt;I'm also &lt;a href="https://simonwillison.net/tags/weeknotes/"&gt;172 entries&lt;/a&gt; into my streak of publishing weeknotes - not-quite-weekly (more at-least-monthly) posts about what I've been doing, which I use mainly as an accountability tool to keep myself on track despite working independently without any form of boss.&lt;/p&gt;
&lt;p&gt;A few years ago I started a website about &lt;a href="https://www.niche-museums.com/"&gt;tiny museums I have been to&lt;/a&gt;. I used streak pressure to bootstrap the site: I added a museum once a day for a hundred days, digging through old photos and memories.&lt;/p&gt;
&lt;p&gt;My streaks are noway near the same league as Tom's. That's why I introduced the term &lt;strong&gt;escalating streaks&lt;/strong&gt; earlier in this post - to emphasize that the true magic comes when you mindfully improve with every iteration.&lt;/p&gt;
&lt;p&gt;I did however notice that by the end of my 100 day museum streak I was writing &lt;a href="https://www.niche-museums.com/100"&gt;significantly higher quality&lt;/a&gt; articles than &lt;a href="https://www.niche-museums.com/1"&gt;when I first started&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="flexibility-and-forgiveness"&gt;Flexibility and forgiveness is crucial&lt;/h4&gt;
&lt;p&gt;Streaks have multiple dangers. At one extreme, they can take over your life, forcing you to leave home behind and spend a decade traveling the world making increasingly brilliant YouTube videos.&lt;/p&gt;
&lt;p&gt;The other challenge is what happens when you accidentally break them.&lt;/p&gt;
&lt;p&gt;In the past, I've tried my hand at strict streaks... and then found that 100 days in I miss a day, and suddenly I'm reset to zero and I lose &lt;em&gt;all motivation&lt;/em&gt; to continue.&lt;/p&gt;
&lt;p&gt;The solution here is to build in some flexibility. I started a new streak recently to reply to at least one email every day, to encourage me to spend more time in my inbox. My goal for this is four out of seven days, so I can miss three days a week and still keep the streak going.&lt;/p&gt;
&lt;p&gt;Duolingo has a "streak freeze" mechanism which can be used to forgive the occasional mishap, which I'm happy to take advantage of.&lt;/p&gt;
&lt;p&gt;Initially I felt like this was "cheating", but it really isn't. Streaks are a powerful motivational tool if you figure out the best way to apply them.&lt;/p&gt;
&lt;h4 id="tom-scott-streak"&gt;The Tom Scott Streak&lt;/h4&gt;
&lt;p&gt;Three of my biggest inspirations in life are these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The movie &lt;a href="https://en.wikipedia.org/wiki/Spider-Man:_Into_the_Spider-Verse"&gt;Into the Spider-Verse&lt;/a&gt;, demonstrating what happens when a group of creative people get together, rewrite the rules and elevate the quality bar for an entire industry.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=Brq-exSvB7Q"&gt;Tom Holland's "Umbrella"&lt;/a&gt; performance on Lip Sync Battle, showing what happens when someone takes an opportunity and executes it with such skill, enthusiasm and panache that people are still talking about it six years later.&lt;/li&gt;
&lt;li&gt;Ray Bandar's &lt;a href="https://www.niche-museums.com/100"&gt;Basement Full of Skulls&lt;/a&gt;, a 60-year project resulting in 7,000+ meticulously preserved animal skulls, leading me to ask "what's MY basement full of skulls going to be?"&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Today I'm adding a fourth thing to that list: the Tom Scott Streak.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/inspiring"&gt;inspiring&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tom-scott"&gt;tom-scott&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/youtube"&gt;youtube&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/streaks"&gt;streaks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/duolingo"&gt;duolingo&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="inspiring"/><category term="productivity"/><category term="tom-scott"/><category term="youtube"/><category term="streaks"/><category term="duolingo"/></entry><entry><title>Quoting Matt Bateman</title><link href="https://simonwillison.net/2023/Apr/5/matt-bateman/#atom-tag" rel="alternate"/><published>2023-04-05T23:50:35+00:00</published><updated>2023-04-05T23:50:35+00:00</updated><id>https://simonwillison.net/2023/Apr/5/matt-bateman/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/mbateman/status/1643706833352400896"&gt;&lt;p&gt;[On AI-assisted programming] I feel like I got a small army of competent hackers to both do my bidding and to teach me as I go. It's just pure delight and magic.&lt;/p&gt;
&lt;p&gt;It's riding a bike downhill and playing with legos and having a great coach and finishing a project all at once.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/mbateman/status/1643706833352400896"&gt;Matt Bateman&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;&lt;/p&gt;



</summary><category term="productivity"/><category term="llms"/><category term="ai"/><category term="generative-ai"/><category term="ai-assisted-programming"/></entry><entry><title>Quoting Robin Sloan</title><link href="https://simonwillison.net/2023/Feb/5/robin-sloan/#atom-tag" rel="alternate"/><published>2023-02-05T17:59:41+00:00</published><updated>2023-02-05T17:59:41+00:00</updated><id>https://simonwillison.net/2023/Feb/5/robin-sloan/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://www.robinsloan.com/newsletters/sunshine-skyway/"&gt;&lt;p&gt;When you start a creative project but don’t finish, the experience drags you down. Worst of all is when you never decisively abandon a project, instead allowing it to fade into forgetfulness. The fades add up; they become a gloomy haze that whispers, you’re not the kind of person who DOES things.&lt;/p&gt;
&lt;p&gt;When you start and finish, by contrast — and it can be a project of any scope: a 24-hour comic, a one-page short story, truly anything — it is powerful fuel that goes straight back into the tank. When a project is finished, it exits the realm of “this is gonna be great” and becomes instead something you (and perhaps others) can actually evaluate. Even if that evaluation is disastrous, it is also, I will insist, thrilling and productive. A project finished is the pump of a piston, preparing the engine for the next one.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www.robinsloan.com/newsletters/sunshine-skyway/"&gt;Robin Sloan&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/robin-sloan"&gt;robin-sloan&lt;/a&gt;&lt;/p&gt;



</summary><category term="productivity"/><category term="robin-sloan"/></entry><entry><title>Coping strategies for the serial project hoarder</title><link href="https://simonwillison.net/2022/Nov/26/productivity/#atom-tag" rel="alternate"/><published>2022-11-26T15:47:02+00:00</published><updated>2022-11-26T15:47:02+00:00</updated><id>https://simonwillison.net/2022/Nov/26/productivity/#atom-tag</id><summary type="html">
    &lt;p&gt;I gave a talk at DjangoCon US 2022 in San Diego last month about productivity on personal projects, titled "Massively increase your productivity on personal projects with comprehensive documentation and automated tests".&lt;/p&gt;
&lt;p&gt;The alternative title for the talk was &lt;em&gt;Coping strategies for the serial project hoarder&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I'm maintaining a &lt;em&gt;lot&lt;/em&gt; of different projects at the moment. Somewhat unintuitively, the way I'm handling this is by scaling down techniques that I've seen working for large engineering teams spread out across multiple continents.&lt;/p&gt;
&lt;p&gt;The key trick is to ensure that every project has comprehensive documentation and automated tests. This scales my productivity horizontally, by freeing me up from needing to remember all of the details of all of the different projects I'm working on at the same time.&lt;/p&gt;
&lt;p&gt;You can watch the talk &lt;a href="https://www.youtube.com/watch?v=GLkRK2rJGB0"&gt;on YouTube&lt;/a&gt; (25 minutes). Alternatively, I've included a detailed annotated version of the slides and notes below.&lt;/p&gt;
&lt;div class="resp-container"&gt;
  &lt;iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="allowfullscreen" frameborder="0" height="315" src="https://www.youtube-nocookie.com/embed/GLkRK2rJGB0" width="560"&gt; &lt;/iframe&gt;
&lt;/div&gt;
&lt;!-- cutoff --&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.001.jpeg" alt="Title slide: Massively increase your productivity on personal projects with comprehensive documentation and automated tests - Simon Willison, DjangoCon US 2022" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;This was the title I originally submitted to the conference. But I realized a better title was probably...&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.003.jpeg" alt="Same title slide, but the title has been replaced" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;Coping strategies for the serial project hoarder&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.004.jpeg" alt="A static frame from a video: a monkey sits on some steps stuffing itself with several pastries. In the longer video the monkey is handed more and more pastries and can't resist trying to hold and eat all of them at once, no matter how many it receives." style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;&lt;a href="https://twitter.com/devisridhar/status/1576170527882121217"&gt;This video&lt;/a&gt; is a neat representation of my approach to personal projects: I always have a few on the go, but I can never resist the temptation to add even more.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.005.jpeg" alt="A screenshot of my profile on PyPI - my join date is Oct 26, 2017 and I have 185 pojects listed." style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;&lt;a href="https://pypi.org/user/simonw/"&gt;My PyPI profile&lt;/a&gt; (which is only five years old) lists 185 Python packages that I've released. Technically I'm actively maintaining all of them, in that if someone reports a bug I'll push out a fix. Many of them receive new releases at least once a year.&lt;/p&gt;
&lt;p&gt;Aside: I took this screenshot using &lt;a href="https://shot-scraper.datasette.io/"&gt;shot-scraper&lt;/a&gt; with a little bit of extra JavaScript to hide a notification bar at the top of the page:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;shot-scraper &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;https://pypi.org/user/simonw/&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; \
--javascript &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;    document.body.style.paddingTop = 0;&lt;/span&gt;
&lt;span class="pl-s"&gt;    document.querySelector(&lt;/span&gt;
&lt;span class="pl-s"&gt;        '#sticky-notifications'&lt;/span&gt;
&lt;span class="pl-s"&gt;    ).style.display = 'none';&lt;/span&gt;
&lt;span class="pl-s"&gt;  &lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt; --height 1000&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.006.jpeg" alt="A map of the world with the Eventbrite logo overlaid on it. There are pins on San Francisco, Nashville, Mendoza and Madrid." style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;How can one individual maintain 185 projects?&lt;/p&gt;
&lt;p&gt;Surprisingly, I'm using techniques that I've scaled down from working at a company with hundreds of engineers.&lt;/p&gt;
&lt;p&gt;I spent seven years at Eventbrite, during which time the engineering team grew to span three different continents. We had major engineering centers in San Francisco, Nashville, Mendoza in Argentina and Madrid in Spain.&lt;/p&gt;
&lt;p&gt;Consider timezones: engineers in Madrid and engineers in San Francisco had almost no overlap in their working hours. Good asynchronous communication was essential.&lt;/p&gt;
&lt;p&gt;Over time, I noticed that the teams that were most effective at this scale were the teams that had a strong culture of documentation and automated testing.&lt;/p&gt;
&lt;p&gt;As I started to work on my own array of smaller personal projects, I found that the same discipline that worked for large teams somehow sped me up, when intuitively I would have expected it to slow me down.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.007.jpeg" alt="The perfect commit: Implementation + tests + documentation and a link to an issue thread" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;I wrote an extended description of this in &lt;a href="https://simonwillison.net/2022/Oct/29/the-perfect-commit/"&gt;The Perfect Commit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I've started structuring the majority of my work in terms of what I think of as "the perfect commit" - a commit that combines implementation, tests, documentation and a link to an issue thread.&lt;/p&gt;
&lt;p&gt;As software engineers, it's important to note that our job generally isn't to write new software: it's to make changes to existing software.&lt;/p&gt;
&lt;p&gt;As such, the commit is our unit of work. It's worth us paying attention to how we can make our commits as useful as possible.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.008.jpeg" alt="Screenshot of a commit on GitHub: the title is Async support for prepare_jinja2_environment, closes #1809" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;Here's &lt;a href="https://github.com/simonw/datasette/commit/ddc999ad1296e8c69cffede3e367dda059b8adad"&gt;a recent example&lt;/a&gt; from one of my projects, Datasette.&lt;/p&gt;
&lt;p&gt;It's a single commit which bundles together the implementation, some related documentation improvements and the tests that show it works. And it links back to an issue thread from the commit message.&lt;/p&gt;
&lt;p&gt;Let's talk about each component in turn.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.009.jpeg" alt="Implementation: it should just do one thing (thing here is deliberately vague)" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;There's not much to be said about the implementation: your commit should change something!&lt;/p&gt;
&lt;p&gt;It should only change one thing, but what that actually means varies on a case by case basis.&lt;/p&gt;
&lt;p&gt;It should be a single change that can be documented, tested and explained independently of other changes.&lt;/p&gt;
&lt;p&gt;(Being able to cleanly revert it is a useful property too.)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.010.jpeg" alt="Tests: prove that the implementation works. Pass if the new implementation is correct, fail otherwise." style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;The goals of the tests that accompany a commit are to prove that the new implementation works.&lt;/p&gt;
&lt;p&gt;If you apply the implementation the new tests should pass. If you revert it the tests should fail.&lt;/p&gt;
&lt;p&gt;I often use &lt;code&gt;git stash&lt;/code&gt; to try this out.&lt;/p&gt;
&lt;p&gt;If you tell people they need to write tests for &lt;em&gt;every single change&lt;/em&gt; they'll often push back that this is too much of a burden, and will harm their productivity.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.011.jpeg" alt="Every project should start with a test. assert 1 + 1 == 2 is fine! Adding tests to an existing test suite is SO MUCH less work than starting a new test suite from scratch." style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;But I find that the incremental cost of adding a test to an existing test suite keeps getting lower over time.&lt;/p&gt;
&lt;p&gt;The hard bit of testing is getting a testing framework setup in the first place - with a test runner, and fixtures, and objects under test and suchlike.&lt;/p&gt;
&lt;p&gt;Once that's in place, adding new tests becomes really easy.&lt;/p&gt;
&lt;p&gt;So my personal rule is that every new project starts with a test. It doesn't really matter what that test does - what matters is that you can run &lt;code&gt;pytest&lt;/code&gt; to run the tests, and you have an obvious place to start building more of them.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.012.jpeg" alt="Cookiecutter repo templates: simonw/python-lib, simonw/click-app, simonw/datasette-plugin" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;I maintain three &lt;a href="https://cookiecutter.readthedocs.io/"&gt;cookiecutter&lt;/a&gt; templates to help with this, for the three kinds of projects I most frequently create:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/simonw/python-lib"&gt;simonw/python-lib&lt;/a&gt; for Python libraries&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/simonw/click-app"&gt;simonw/click-app&lt;/a&gt; for command line tools&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/simonw/datasette-plugin"&gt;simonw/datasette-plugin&lt;/a&gt; for Datasette plugins&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each of these templates creates a project with a &lt;code&gt;setup.py&lt;/code&gt; file, a README, a test suite and GitHub Actions workflows to run those tests and ship tagged releases to PyPI.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.013.jpeg" alt="Screenshot of the GitHub page to create a new repsoitory from python-lib-template-repository, which asks for a repository name, a description string and if the new repo should be public or private." style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;I have a trick for running &lt;code&gt;cookiecutter&lt;/code&gt; as part of creating a brand new repository on GitHub. I described that in &lt;a href="https://simonwillison.net/2021/Aug/28/dynamic-github-repository-templates/"&gt;Dynamic content for GitHub repository templates using cookiecutter and GitHub Actions&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.014.jpeg" alt="Documentation: Same repository as the code! Document changes that impact external developers. Update the docs in the same commit as the change. Catch missing documentation updates in PR / code review" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;This is a hill that I will die on: your documentation must live in the same repository as your code!&lt;/p&gt;
&lt;p&gt;You often see projects keep their documentation somewhere else, like in a wiki.&lt;/p&gt;
&lt;p&gt;Inevitably it goes out of date. And my experience is that if your documentation is out of date people will lose trust in it, which means they'll stop reading it and stop contributing to it.&lt;/p&gt;
&lt;p&gt;The gold standard of documentation has to be that it's reliably up to date with the code.&lt;/p&gt;
&lt;p&gt;The only way you can do that is if the documentation and code are in the same repository.&lt;/p&gt;
&lt;p&gt;This gives you versioned snapshots of the documentation that exactly match the code at that time.&lt;/p&gt;
&lt;p&gt;More importantly, it means you can enforce it through code review. You can say in a PR "this is great, but don't forget to update this paragraph on this page of the documentation to reflect the change you're making".&lt;/p&gt;
&lt;p&gt;If you do this you can finally get documentation that people learn to trust over time.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.015.jpeg" alt="Bonus trick: documentation unit tests" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;Another trick I like to use is something I call documentation unit tests.&lt;/p&gt;
&lt;p&gt;The idea here is to use unit tests to enforce that concepts introspected from your code are at least mentioned in your documentation.&lt;/p&gt;
&lt;p&gt;I wrote more about that in &lt;a href="https://simonwillison.net/2018/Jul/28/documentation-unit-tests/"&gt;Documentation unit tests&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.016.jpeg" alt="Screenshot showing pytest running 26 passing tests, each with a name like test_plugin_hook_are_documented[filters_from_request]" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;Here's an example. Datasette has &lt;a href="https://github.com/simonw/datasette/blob/0.63.1/tests/test_docs.py#L41-L53"&gt;a test&lt;/a&gt; that scans through each of the Datasette plugin hooks and checks that there is a heading for each one in the documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.017.jpeg" alt="Screenshot of the code linked to above" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;The test itself is pretty simple: it uses &lt;code&gt;pytest&lt;/code&gt; parametrization to look through every introspected plugin hook name, and for each one checks that it has a matching heading in the documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="issue-thread"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.018.jpeg" alt="Everything links to an issue thread" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;The final component of my perfect commit is this: every commit must link to an issue thread.&lt;/p&gt;
&lt;p&gt;I'll usually have these open in advance but  sometimes I'll open an issue thread just so I can close it with a commit a few seconds later!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.019.jpeg" alt="A screenshot of the issue titled prepare_jinja_enviroment() hook should take datasette argument - it has 11 comments" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;Here's &lt;a href="https://github.com/simonw/datasette/issues/1809"&gt;the issue&lt;/a&gt; for the commit I showed earlier. It has 11 comments, and every single one of those comments is by me.&lt;/p&gt;
&lt;p&gt;I have literally thousands of issues on GitHub that look like this: issue threads that are effectively me talking to myself about the changes that I'm making.&lt;/p&gt;
&lt;p&gt;It turns out this a fantastic form of additional documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.020.jpeg" alt="What goes in an issue?" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;What goes in an issue?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Background: the reasons for the change. In six months time you'll want to know why you did this.&lt;/li&gt;
&lt;li&gt;State of play before-hand: embed existing code, link to existing docs. I like to start my issues with "I'm going to change this code right here" - that way if I come back the next day I don't have to repeat that little piece of research.&lt;/li&gt;
&lt;li&gt;Links to things! Documentation, inspiration, clues found on StackOverflow. The idea is to capture all of the loose information floating around that topic.&lt;/li&gt;
&lt;li&gt;Code snippets illustrating potential designs and false-starts.&lt;/li&gt;
&lt;li&gt;Decisions. What did you consider? What did you decide? As programmers we make decisions constantly, all day, about everything. That work doesn't have to be invisible. Writing them down also avoids having to re-litigate them several months later when you've forgotten your original  reasoning.&lt;/li&gt;
&lt;li&gt;Screenshots - of everything! Animated screenshots even better. I even take screenshots of things like the AWS console to remind me what I did there.&lt;/li&gt;
&lt;li&gt;When you close it: a link to the updated documentation and demo&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.021.jpeg" alt="Temporal documentation. It's timestamped and contextual. You don't need to commit to keeping it up-to-date in the future (but you can add more comments if you like)" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;The reason I love issues is that they're a form of documentation that I think of as &lt;em&gt;temporal documentation&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Regular documentation comes with a big commitment: you have to keep it up to date in the future.&lt;/p&gt;
&lt;p&gt;Issue comments skip that commitment entirely. They're displayed with a timestamp, in the context of the work you were doing at the time.&lt;/p&gt;
&lt;p&gt;No-one will be upset or confused if you fail to keep them updated to match future changes.&lt;/p&gt;
&lt;p&gt;So it's a commitment-free form of documentation, which I for one find incredibly liberating.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.022.jpeg" alt="Issue driven development" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;I think of this approach as &lt;em&gt;issue driven development&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Everything you are doing is issue-first, and from that you drive the rest of the development process.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.023.jpeg" alt="Don't remember anything: you can go back to a project in six months and pick up right where you left off" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;This is how it relates back to maintaining 185 projects at the same time.&lt;/p&gt;
&lt;p&gt;With issue driven development you &lt;em&gt;don't have to remember anything&lt;/em&gt; about any of these projects at all.&lt;/p&gt;
&lt;p&gt;I've had issues where I did a bunch of design work in issue comments, then dropped it, then came back 12 months later and implemented that design - without having to rethink it.&lt;/p&gt;
&lt;p&gt;I've had projects where I forgot that the project existed entirely! But I've found it again, and there's been an open issue, and I've been able to pick up work again.&lt;/p&gt;
&lt;p&gt;It's a way of working where you treat it like every project is going to be maintained by someone else, and it's the classic cliche here that the somebody else is you in the future.&lt;/p&gt;
&lt;p&gt;It horizontally scales you and lets you tackle way more interesting problems.&lt;/p&gt;
&lt;p&gt;Programmers always complain when you interrupt them - there's this idea of "flow state" and that interrupting a programmer for a moment costs them half an hour in getting back up to speed.&lt;/p&gt;
&lt;p&gt;This fixes that! It's much easier to get back to what you are doing if you have an issue thread that records where you've got to.&lt;/p&gt;
&lt;p&gt;Issue driven development is my key productivity hack for taking on much more ambitious projects in much larger quantities.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.024.jpeg" alt="Laboratory notebooks - and a picture of a page from one by Leonardo da Vinci" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;Another way to think about this is to compare it to laboratory notebooks.&lt;/p&gt;
&lt;p&gt;Here's &lt;a href="https://en.wikipedia.org/wiki/Studies_of_the_Fetus_in_the_Womb"&gt;a page&lt;/a&gt; from one by Leonardo da Vinci.&lt;/p&gt;
&lt;p&gt;Great scientists and great engineers have always kept detailed notes.&lt;/p&gt;
&lt;p&gt;We can use GitHub issues as a really quick and easy way to do the same thing!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.025.jpeg" alt="Issue: Figure out how to deploy Datasette to AWS lambda using function URLs and Mangum" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;Another thing I like to use these for is deep research tasks.&lt;/p&gt;
&lt;p&gt;Here's an example, from when I was trying to figure out how to run my Python web application in an AWS Lambda function:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/simonw/public-notes/issues/6"&gt;Figure out how to deploy Datasette to AWS Lambda using function URLs and Mangum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This took me 65 comments over the course of a few days... but by the end of that thread I'd figured out how to do it!&lt;/p&gt;
&lt;p&gt;Here's the follow-up, with another 77 comments, in which I &lt;a href="https://github.com/simonw/public-notes/issues/1"&gt;figure out how to serve an AWS Lambda function with a Function URL from a custom subdomain&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I will never have to figure this out ever again! That's a huge win.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.026.jpeg" alt="simonw/public-notes/issues" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;&lt;a href="https://github.com/simonw/public-notes"&gt;https://github.com/simonw/public-notes&lt;/a&gt; is a public repository where I keep some of these issue threads, transferred from my private notes repos &lt;a href="https://til.simonwillison.net/github/transfer-issue-private-to-public"&gt;using this trick&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.027.jpeg" alt="Tell people what you did! (It's so easy to skip this step)" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;The last thing I want to encourage you to do is this: if you do project, tell people what it is you did!&lt;/p&gt;
&lt;p&gt;This counts for both personal and work projects. It's so easy to skip this step.&lt;/p&gt;
&lt;p&gt;Once you've shipped a feature or built a project, it's so tempting to skip the step of spending half an hour or more writing about the work you have done.&lt;/p&gt;
&lt;p&gt;But you are missing out on &lt;em&gt;so much&lt;/em&gt; of the value of your work if you don't give other people a chance to understand what you did.&lt;/p&gt;
&lt;p&gt;I wrote more about this here: &lt;a href="https://simonwillison.net/2022/Nov/6/what-to-blog-about/"&gt;What to blog about&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.028.jpeg" alt="Release notes (with dates)" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;For projects with releases, release notes are a really good way to do this.&lt;/p&gt;
&lt;p&gt;I like using GitHub releases for this - they're quick and easy to write, and I have automation setup for my projects such that creating release notes in GitHub triggers a build and release to PyPI.&lt;/p&gt;
&lt;p&gt;I've done over 1,000 releases in this way. Having them automated is crucial, and having automation makes it really easy to ship releases more often.&lt;/p&gt;
&lt;p&gt;Please make sure your release notes have dates on them. I need to know when your change went out, because if it's only a week old it's unlikely people will have upgraded to it yet, whereas a change from five years ago is probably safe to depend on.&lt;/p&gt;
&lt;p&gt;I wrote more about &lt;a href="https://simonwillison.net/2022/Jan/31/release-notes/"&gt;writing better release notes&lt;/a&gt; here.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.029.jpeg" alt="Expand your definition of done to include writing about what you did" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;This is a mental trick which works really well for me. "No project of mine is finished until I've told people about it in some way" is a really useful habit to form.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.030.jpeg" alt="Twitter threads (embed images + links + videos)" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;Twitter threads are (or were) a great low-effort way to write about a project. Build a quick thread with some links and images, and maybe even a video.&lt;/p&gt;
&lt;p&gt;Get a little unit about your project out into the world, and then you can stop thinking about it.&lt;/p&gt;
&lt;p&gt;(I'm trying to do this &lt;a href="https://simonwillison.net/2022/Nov/5/mastodon/"&gt;on Mastodon now&lt;/a&gt; instead.)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.031.jpeg" alt="Get a blog" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;Even better: get a blog! Having your own corner of the internet to write about the work that you are doing is a small investment that will pay off many times over.&lt;/p&gt;
&lt;p&gt;("Nobody blogs anymore" I said in the talk... Phil Gyford disagrees with that meme so much that he launched &lt;a href="https://ooh.directory/blog/2022/welcome/"&gt;a new blog directory&lt;/a&gt; to show how wrong it is.)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.032.jpeg" alt="GUILT is the enemy of projects" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;The enemy of projects, especially personal projects, is &lt;em&gt;guilt&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The more projects you have, the more guilty you feel about working on any one of them - because you're not working on the others, and those projects haven't yet achieved their goals.&lt;/p&gt;
&lt;p&gt;You have to overcome guilt if you're going to work on 185 projects at once!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide" id="avoid-user-accounts"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.033.jpeg" alt="Avoid side projects with user accounts. If i has user accounts it's not a side-project, it's an unpaid job." style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;This is the most important tip: avoid side projects with user accounts.&lt;/p&gt;
&lt;p&gt;If you build something that people can sign into, that's not a side-project, it's an unpaid job. It's a very big responsibility, avoid at all costs!&lt;/p&gt;
&lt;p&gt;Almost all of my projects right now are open source things that people can run on their own machines, because that's about as far away from user accounts as I can get.&lt;/p&gt;
&lt;p&gt;I still have a responsibility for shipping security updates and things like that, but at least I'm not holding onto other people's data for them.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.034.jpeg" alt="If your project is tested and documented, you have nothing to feel guilty about. That's what I tell myself anyway!" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;I feel like if your project is tested and documented, &lt;em&gt;you have nothing to feel guilty about&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;You have put a thing out into the world, and it has tests to show that it works, and it has documentation that explains what it is.&lt;/p&gt;
&lt;p&gt;This means I can step back and say that it's OK for me to work on other things. That thing there is a unit that makes sense to people.&lt;/p&gt;
&lt;p&gt;That's what I tell myself anyway! It's OK to have 185 projects provided they all have documentation and they all have tests.&lt;/p&gt;
&lt;p&gt;Do that and the guilt just disappears. You can live guilt free!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slide"&gt;
&lt;img loading="lazy" src="https://static.simonwillison.net/static/2022/djangocon-productivity/productivity.035.jpeg" alt="Thank you - simonwillison.net - twitter.com/simonw / github.com/simonw" style="max-width: 100%;" width="450" height="253" /&gt;&lt;div&gt;
&lt;p&gt;You can follow me on Mastodon at &lt;a href="https://fedi.simonwillison.net/@simon"&gt;@simon@simonwillison.net&lt;/a&gt; or on GitHub at &lt;a href="https://github.com/simonw"&gt;github.com/simonw&lt;/a&gt;. Or subscribe to my blog at &lt;a href="https://simonwillison.net/"&gt;simonwillison.net&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;From the Q&amp;amp;A:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You've tweeted about using GitHub Projects. Could you talk about that?
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.github.com/en/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects"&gt;GitHub Projects V2&lt;/a&gt; is the perfect TODO list for me, because it lets me bring together issues from different repositories. I use a project called "Everything" on a daily basis (it's my browser default window) - I add issues to it that I plan to work on, including personal TODO list items as well as issues from my various public and private repositories. It's kind of like a cross between Trello and Airtable and I absolutely love it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;How did you move notes from the private to the public repo?
&lt;ul&gt;
&lt;li&gt;GitHub doesn't let you do this. But there's a trick I use involving a &lt;code&gt;temp&lt;/code&gt; repo which I switch between public and private to help transfer notes. More in &lt;a href="https://til.simonwillison.net/github/transfer-issue-private-to-public"&gt;this TIL&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Question about the perfect commit: do you commit your failing tests?
&lt;ul&gt;
&lt;li&gt;I don't: I try to keep the commits that land on my &lt;code&gt;main&lt;/code&gt; branch always passing. I'll sometimes write the failing test before the implementation and  then commit them together. For larger projects I'll work in a branch and then squash-merge the final result into a perfect commit to main later on.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/djangocon"&gt;djangocon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/documentation"&gt;documentation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/my-talks"&gt;my-talks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/testing"&gt;testing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/annotated-talks"&gt;annotated-talks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/github-issues"&gt;github-issues&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="djangocon"/><category term="documentation"/><category term="productivity"/><category term="my-talks"/><category term="testing"/><category term="annotated-talks"/><category term="github-issues"/></entry><entry><title>Quoting @gamemakerstk</title><link href="https://simonwillison.net/2020/Aug/13/gamemakerstk/#atom-tag" rel="alternate"/><published>2020-08-13T15:12:40+00:00</published><updated>2020-08-13T15:12:40+00:00</updated><id>https://simonwillison.net/2020/Aug/13/gamemakerstk/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/gamemakerstk/status/1293888161714769921"&gt;&lt;p&gt;We’re generally only impressed by things we can’t do - things that are beyond our own skill set. So, by definition, we aren’t going to be that impressed by the things we create. The end user, however, is perfectly able to find your work impressive.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/gamemakerstk/status/1293888161714769921"&gt;@gamemakerstk&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;&lt;/p&gt;



</summary><category term="productivity"/></entry><entry><title>Quoting Tobi Lutke</title><link href="https://simonwillison.net/2019/Dec/26/tobi-lutke/#atom-tag" rel="alternate"/><published>2019-12-26T19:06:35+00:00</published><updated>2019-12-26T19:06:35+00:00</updated><id>https://simonwillison.net/2019/Dec/26/tobi-lutke/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/tobi/status/1210242188870930433"&gt;&lt;p&gt;For creative work, you can't cheat. My believe is that there are 5 creative hours in everyone's day. All I ask of people at Shopify is that 4 of those are channeled into the company.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/tobi/status/1210242188870930433"&gt;Tobi Lutke&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/management"&gt;management&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tobias-lutke"&gt;tobias-lutke&lt;/a&gt;&lt;/p&gt;



</summary><category term="productivity"/><category term="management"/><category term="tobias-lutke"/></entry><entry><title>Weeknotes: Niche Museums, Kepler, Trees and Streaks</title><link href="https://simonwillison.net/2019/Oct/28/niche-museums-kepler/#atom-tag" rel="alternate"/><published>2019-10-28T22:42:10+00:00</published><updated>2019-10-28T22:42:10+00:00</updated><id>https://simonwillison.net/2019/Oct/28/niche-museums-kepler/#atom-tag</id><summary type="html">
    &lt;h3 id="Niche_Museums_4"&gt;Niche Museums&lt;/h3&gt;

&lt;p&gt;Every now and then someone will ask “so when are you going to build Museums Near Me then?”, based on &lt;a href="https://twitter.com/simonw/status/1171159213436997633"&gt;my obsession with niche museums&lt;/a&gt; and websites like &lt;a href="https://www.owlsnearme.com/"&gt;www.owlsnearme.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For my Strategic Communications course at Stanford last week I had to perform a midterm presentation - a six minute talk to convince my audience of something, accompanied by slides and a handout.&lt;/p&gt;
&lt;p&gt;I chose “you should seek out and explore tiny museums” as my topic, and used it as an excuse to finally start the website!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.niche-museums.com/"&gt;www.niche-museums.com&lt;/a&gt; is the result. It’s a small but growing collection of niche museums (17 so far, mostly in the San Francisco Bay Area) complete with the all important blue “Use my location” button to see museums near you.&lt;/p&gt;
&lt;p&gt;Naturally I built it on &lt;a href="https://github.com/simonw/datasette"&gt;Datasette&lt;/a&gt;. I’ll be writing more about the implementation (and releasing the underlying code) soon. I also built a new plugin for it, &lt;a href="https://github.com/simonw/datasette-haversine "&gt;datasette-haversine&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id="Mapping_museums_against_Starbucks_16"&gt;Mapping museums against Starbucks&lt;/h3&gt;

&lt;p&gt;I needed a way to emphasize quite how many tiny museums there are in the USA. I decided to do this with a visualization.&lt;/p&gt;
&lt;p&gt;It turns out there are 15,891 branches of Starbucks in the USA… and at least 30,132 museums!&lt;/p&gt;

&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2019/starbucks.png" alt="15,891 Starbucks" style="max-width: 100%" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2019/museums.png" alt="At least 30.132 museums!" style="max-width: 100%" /&gt;&lt;/p&gt;

&lt;p&gt;I made these maps using a couple of sources.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.alltheplaces.xyz/"&gt;All The Places&lt;/a&gt; is a crowdsourced scraper project which aims to build scrapers for every company that has a “store locator” area of their website. Starbucks has &lt;a href="https://www.starbucks.com/store-locator"&gt;a store locator&lt;/a&gt; and All The Places have &lt;a href="https://github.com/alltheplaces/alltheplaces/blob/master/locations/spiders/starbucks.py"&gt;a scraper for it&lt;/a&gt;, so you can download GeoJSON of every Starbucks. I wrote a quick script to import that GeoJSON into Datasette using sqlite-utils.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://www.imls.gov/"&gt;Institute of Museum and Library Services&lt;/a&gt; is an independent agency of the federal government that supports museums and libraries across the country. They publish a &lt;a href="https://www.imls.gov/research-evaluation/data-collection/museum-data-files"&gt;dataset of Museums in the USA&lt;/a&gt; as a set of CSV files. I used &lt;a href="https://github.com/simonw/csvs-to-sqlite"&gt;csvs-to-sqlite&lt;/a&gt; to load those into Datasette, than ran a union query to combine the three files together.&lt;/p&gt;
&lt;p&gt;So I have Datasette instances (with a CSV export feature) for both Starbucks and USA museums, with altitudes and longitudes for each.&lt;/p&gt;
&lt;p&gt;Now how to turn that into a map?&lt;/p&gt;
&lt;p&gt;I turned to my new favourite GIS tool, &lt;a href="https://kepler.gl/"&gt;Kepler&lt;/a&gt;. Kepler is an open source GIS visualization tool released by Uber, based on WebGL. It’s astonishingly powerful and can be used directly in your browser by clicking the “Get Started” button on their website (which I assumed would take you to installation instructions, but no, it loads up the entire tool in your browser).&lt;/p&gt;
&lt;p&gt;You can import millions of points of data into Kepler and it will visualize them for you directly. I used a Datasette query to export the CSVs, then loaded in my Starbucks CSV, exported an image, loaded in the Museums CSV as a separate colour and exported a second image. The whole project ended up taking about 15 minutes. Kepler is a great addition to the toolbelt!&lt;/p&gt;

&lt;h3 id="Animating_the_PGE_outages_40"&gt;Animating the PG&amp;amp;E outages&lt;/h3&gt;

&lt;p&gt;My &lt;a href="https://simonwillison.net/2019/Oct/10/pge-outages/"&gt;PG&amp;amp;E outages scraper&lt;/a&gt; continues to record a snapshot of the PG&amp;amp;E outage map JSON every ten minutes. I’m posting updates to &lt;a href="https://twitter.com/simonw/status/1182440312590848001"&gt;a thread on Twitter&lt;/a&gt;, but discovering Kepler inspired me to look at more sophisticated visualization options.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://medium.com/vis-gl/animating-40-years-of-california-earthquakes-e4ffcdd4a289"&gt;This tutorial&lt;/a&gt; by Giuseppe Macrì tipped me off the the fact that you can use Kepler to animate points against timestamps!&lt;/p&gt;
&lt;p&gt;Here’s the result: a video animation showing how PG&amp;amp;E’s outages have evolved since the 5th of October:&lt;/p&gt;

&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;Here&amp;#39;s a video animation of PG&amp;amp;E&amp;#39;s outages from October 5th up until just a few minutes ago &lt;a href="https://t.co/50K3BrROZR"&gt;pic.twitter.com/50K3BrROZR&lt;/a&gt;&lt;/p&gt;- Simon Willison (@simonw) &lt;a href="https://twitter.com/simonw/status/1188612004572880896?ref_src=twsrc%5Etfw"&gt;October 28, 2019&lt;/a&gt;&lt;/blockquote&gt;

&lt;h3 id="Hayes_Valley_Trees_50"&gt;Hayes Valley Trees&lt;/h3&gt;

&lt;p&gt;The city announced plans to cut down 27 ficus trees in our neighborhood in San Francisco. I’ve been working with Natalie to help a small group of citizens organize an appeal, and this weekend I helped run a survey of the affected trees (recording their exact locations in a CSV file) and then built &lt;a href="https://www.hayes-valley-trees.com/"&gt;www.hayes-valley-trees.com&lt;/a&gt; (&lt;a href="https://github.com/simonw/hayes-valley-trees"&gt;source on GitHub&lt;/a&gt;) to link to from fliers attached to each affected tree.&lt;/p&gt;
&lt;p&gt;It started out as &lt;a href="https://glitch.com/~hayes-valley-trees"&gt;a Datasette&lt;/a&gt; (running on Glitch) but since it’s only 27 data points I ended up freezing the data in a static JSON file to avoid having to tolerate any cold start times. The site is deployed as static assets on Zeit Now using their handy &lt;a href="https://zeit.co/github"&gt;GitHub continuous deployment tool&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="Streaks_56"&gt;Streaks&lt;/h3&gt;
&lt;p&gt;It turns out I’m very motivated by streaks: I’m at 342 days for Duolingo Spanish and 603 days for an Apple Watch move streak. Could I apply this to other things in my life?&lt;/p&gt;
&lt;p&gt;I &lt;a href="https://twitter.com/simonw/status/1186824721280593920"&gt;asked on Twitter&lt;/a&gt; and was recommended the &lt;a href="https://streaks.app/"&gt;Streaks iOS app&lt;/a&gt;. It’s beautiful! I’m now tracking streaks for guitar practice, Duolingo, checking email, checking Slack, reading some books and adding a new museum to &lt;a href="http://www.niche-museums.com"&gt;www.niche-museums.com&lt;/a&gt; (if I add one a day I can get from 17 museums today to 382 in a year!)&lt;/p&gt;
&lt;p&gt;It seems to be working pretty well so far. I particularly like their iPhone widget.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2019/streaks-widget.jpg" alt="Streaks widget" style="max-width: 100%" /&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/museums"&gt;museums&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/visualization"&gt;visualization&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/weeknotes"&gt;weeknotes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/baked-data"&gt;baked-data&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/streaks"&gt;streaks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/duolingo"&gt;duolingo&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="museums"/><category term="productivity"/><category term="projects"/><category term="visualization"/><category term="weeknotes"/><category term="baked-data"/><category term="streaks"/><category term="duolingo"/></entry><entry><title>Seeking the Productive Life: Some Details of My Personal Infrastructure</title><link href="https://simonwillison.net/2019/Feb/22/seeking-productive-life-some-details-my-personal-infrastructure/#atom-tag" rel="alternate"/><published>2019-02-22T21:46:13+00:00</published><updated>2019-02-22T21:46:13+00:00</updated><id>https://simonwillison.net/2019/Feb/22/seeking-productive-life-some-details-my-personal-infrastructure/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.stephenwolfram.com/2019/02/seeking-the-productive-life-some-details-of-my-personal-infrastructure/"&gt;Seeking the Productive Life: Some Details of My Personal Infrastructure&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Stephen Wolfram’s 15,000 word epic about his personal approach to productivity, developed over the past thirty years. This is a fascinating document—I found myself thinking “surely there can’t be more information than this” and then spotting that the scrollbar wasn’t even a third done yet. Very hard to summarize: it turns out if you’re the work-from-home CEO of your own privately held 800 person company you can construct some very opinionated habits.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=19220889"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;&lt;/p&gt;



</summary><category term="productivity"/></entry><entry><title>Have you ever experienced a boost in productivity by switching to a different programming language?</title><link href="https://simonwillison.net/2014/Mar/19/have-you-ever-experienced/#atom-tag" rel="alternate"/><published>2014-03-19T18:38:00+00:00</published><updated>2014-03-19T18:38:00+00:00</updated><id>https://simonwillison.net/2014/Mar/19/have-you-ever-experienced/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Have-you-ever-experienced-a-boost-in-productivity-by-switching-to-a-different-programming-language/answer/Simon-Willison"&gt;Have you ever experienced a boost in productivity by switching to a different programming language?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Switching from PHP to Python (over a decade ago now) dramatically improved my productivity as a programmer.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming-languages"&gt;programming-languages&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="productivity"/><category term="programming"/><category term="programming-languages"/><category term="quora"/></entry><entry><title>What are some tips for improving public speaking skills quickly?</title><link href="https://simonwillison.net/2014/Mar/7/what-are-some-tips/#atom-tag" rel="alternate"/><published>2014-03-07T11:57:00+00:00</published><updated>2014-03-07T11:57:00+00:00</updated><id>https://simonwillison.net/2014/Mar/7/what-are-some-tips/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-some-tips-for-improving-public-speaking-skills-quickly?no_redirect=1"&gt;What are some tips for improving public speaking skills quickly?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Practice your talk, out loud, in private, as many times as possible before you deliver it. There's no better way of ensuring you know your material and that you can deliver it at a sensible pace without freezing up.&lt;/p&gt;

&lt;p&gt;Make sure you have a full written copy of your talk available to you when you deliver it. You should aim to give your talk from memory (prompted by your slides), but I find that having the notes nearby ready to fall back gives me much more confidence. The audience will not mind in the slightest if you pause for a moment to check your notes - they probably won't even notice.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/speaking"&gt;speaking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="productivity"/><category term="speaking"/><category term="quora"/></entry><entry><title>What should be considered when deciding to do a marathon?</title><link href="https://simonwillison.net/2013/Dec/3/what-should-be-considered/#atom-tag" rel="alternate"/><published>2013-12-03T12:16:00+00:00</published><updated>2013-12-03T12:16:00+00:00</updated><id>https://simonwillison.net/2013/Dec/3/what-should-be-considered/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-should-be-considered-when-deciding-to-do-a-marathon/answer/Simon-Willison"&gt;What should be considered when deciding to do a marathon?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Running a marathon is easier then you think.&lt;/p&gt;

&lt;p&gt;First, get to a point where you can run 5K. Couch to 5K is a popular program for this. Barring major health issues, anyone can get to that point.&lt;/p&gt;

&lt;p&gt;Next, do 10K. After a few times running a 5K this shouldn't be too big a stretch.&lt;/p&gt;

&lt;p&gt;Guess what: a marathon is 42km. You're nearly a quarter of the way there!&lt;/p&gt;

&lt;p&gt;Now, sign up for a half marathon. That's only two 10Ks back to back. If you've been running 10K once a week you should be able to do this without much trouble.&lt;/p&gt;

&lt;p&gt;The bad news is that a marathon is way more than just two half marathons... but it's totally possible. Follow a well documented training scheme and you'll make it. It will be one of the hardest things you've ever done, but it's absolutely possible to do it.&lt;/p&gt;

&lt;p&gt;I managed a marathon after less than six months of training, starting from zero fitness. I trained 3-4 times a week: 2 short runs, a medium run and a long run on a Sunday.&lt;/p&gt;

&lt;p&gt;Go for it!&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/running"&gt;running&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="productivity"/><category term="running"/><category term="quora"/></entry><entry><title>How do I overcome my fear of public speaking (of people just "switching off", or simply getting up and leaving the room)?</title><link href="https://simonwillison.net/2013/Nov/24/how-do-i-overcome/#atom-tag" rel="alternate"/><published>2013-11-24T18:14:00+00:00</published><updated>2013-11-24T18:14:00+00:00</updated><id>https://simonwillison.net/2013/Nov/24/how-do-i-overcome/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-do-I-overcome-my-fear-of-public-speaking-of-people-just-switching-off-or-simply-getting-up-and-leaving-the-room/answer/Simon-Willison"&gt;How do I overcome my fear of public speaking (of people just &amp;quot;switching off&amp;quot;, or simply getting up and leaving the room)?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Look for opportunities to give "lightning talks" - 5 minute talks given as part of a series of talks. These are excellent for beginner speakers as they help force you to get to the point as quickly as possible, and you only have to survive for five minutes! They are good for the audience too as if they don't enjoy our talk they only have to sit politely for a couple of minutes before the next talk comes along.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/speaking"&gt;speaking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="productivity"/><category term="speaking"/><category term="quora"/></entry><entry><title>Is there a website or app that helps you track what you have completed each day?</title><link href="https://simonwillison.net/2013/Nov/8/is-there-a-website/#atom-tag" rel="alternate"/><published>2013-11-08T09:49:00+00:00</published><updated>2013-11-08T09:49:00+00:00</updated><id>https://simonwillison.net/2013/Nov/8/is-there-a-website/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Is-there-a-website-or-app-that-helps-you-track-what-you-have-completed-each-day/answer/Simon-Willison"&gt;Is there a website or app that helps you track what you have completed each day?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I've tried a few solutions for this. Surprisingly the one that has stuck for me is Evernote - I keep a different document for each week (I tried a document per day but that was annoying to update, and meant I didn't look at my older notes as often) and each day I add a new header at the top of the document for that day. Being able to link through to other notes from my day summaries is useful too.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/motivation"&gt;motivation&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="productivity"/><category term="webapps"/><category term="quora"/><category term="motivation"/></entry><entry><title>I want to write a short summary for every article I read online for future use. What is the best tool to do this?</title><link href="https://simonwillison.net/2013/Aug/13/i-want-to-write/#atom-tag" rel="alternate"/><published>2013-08-13T18:27:00+00:00</published><updated>2013-08-13T18:27:00+00:00</updated><id>https://simonwillison.net/2013/Aug/13/i-want-to-write/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/I-want-to-write-a-short-summary-for-every-article-I-read-online-for-future-use-What-is-the-best-tool-to-do-this/answer/Simon-Willison"&gt;I want to write a short summary for every article I read online for future use. What is the best tool to do this?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;span&gt;&lt;a href="http://pinboard.in"&gt;http://pinboard.in&lt;/a&gt;&lt;/span&gt; is well suited to this. It's a bookmarking service (like the old &lt;span&gt;&lt;a href="http://del.icio.us"&gt;Delicious&lt;/a&gt;&lt;/span&gt;) with a bookmarklet that lets you quickly annotate and add tags to a link, privately or in public. For an extra fee the site will archive copies of the pages you are linking to as well in case they vanish in the future.
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lifehacks"&gt;lifehacks&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="productivity"/><category term="quora"/><category term="lifehacks"/></entry><entry><title>What are some recommended efficient apps for personal productivity (e.g., setting &amp; receiving reminders for completing tasks)?</title><link href="https://simonwillison.net/2013/Jul/16/what-are-some-recommended/#atom-tag" rel="alternate"/><published>2013-07-16T11:18:00+00:00</published><updated>2013-07-16T11:18:00+00:00</updated><id>https://simonwillison.net/2013/Jul/16/what-are-some-recommended/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-some-recommended-efficient-apps-for-personal-productivity-e-g-setting-receiving-reminders-for-completing-tasks/answer/Simon-Willison"&gt;What are some recommended efficient apps for personal productivity (e.g., setting &amp;amp; receiving reminders for completing tasks)?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Things is excellent (at least if you are a Mac/iPhone person) - intuitive, powerful and with flawless syncing. Only catch is it's a tad expensive considering you have to buy the iPhone and Mac apps separately.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="productivity"/><category term="quora"/></entry><entry><title>What are some productive things to do for 15 minutes a day?</title><link href="https://simonwillison.net/2013/Jan/15/what-are-some-productive/#atom-tag" rel="alternate"/><published>2013-01-15T13:25:00+00:00</published><updated>2013-01-15T13:25:00+00:00</updated><id>https://simonwillison.net/2013/Jan/15/what-are-some-productive/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-some-productive-things-to-do-for-15-minutes-a-day/answer/Simon-Willison"&gt;What are some productive things to do for 15 minutes a day?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Learn a foreign language - using DuoLingo on the iPhone, or with podcasts such as Coffee Break Spanish.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/duolingo"&gt;duolingo&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="productivity"/><category term="quora"/><category term="duolingo"/></entry><entry><title>What are some creative programs to use for presentations?</title><link href="https://simonwillison.net/2012/Sep/23/what-are-some-creative/#atom-tag" rel="alternate"/><published>2012-09-23T16:29:00+00:00</published><updated>2012-09-23T16:29:00+00:00</updated><id>https://simonwillison.net/2012/Sep/23/what-are-some-creative/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-some-creative-programs-to-use-for-presentations/answer/Simon-Willison"&gt;What are some creative programs to use for presentations?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here's a trick I've used with success in the past: set up your Mac to have 9 virtual desktops, then arrange your "slides" on each desktop using a combination of applications. I've done this with a title slide in keynote on the first desktop, a text editor with some sample code on the second, a terminal prompt set up for live coding on the third, a browser showing a demo on the fourth and so on. Learn the keyboard commands to switch between desktops and off you go.&lt;/p&gt;

&lt;p&gt;This works great, looks impressive, is easy to set up and amuses the audience. There is a BIG risk though: if your computer crashes you'll have a heck of a time setting it all up again! Thankfully that hasn't happened to me yet, but I always have a text file and a set of bookmarks in place so I can muddle through if things go wrong.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/speaking"&gt;speaking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="productivity"/><category term="speaking"/><category term="quora"/></entry><entry><title>What are some things I can do if I'm lying awake and unable to sleep for an hour?</title><link href="https://simonwillison.net/2011/Dec/26/what-are-some-things/#atom-tag" rel="alternate"/><published>2011-12-26T13:31:00+00:00</published><updated>2011-12-26T13:31:00+00:00</updated><id>https://simonwillison.net/2011/Dec/26/what-are-some-things/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-some-things-I-can-do-if-Im-lying-awake-and-unable-to-sleep-for-an-hour/answer/Simon-Willison"&gt;What are some things I can do if I&amp;#39;m lying awake and unable to sleep for an hour?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Listen to a podcast. If you're lying at rest in bed you'll still get at least some of the benefits of sleeping, and you might find that listening to the podcast helps take your mind off things and sends you to sleep.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sleep"&gt;sleep&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="productivity"/><category term="quora"/><category term="sleep"/></entry><entry><title>Quoting Auren Hoffman</title><link href="https://simonwillison.net/2009/Jun/24/engineers/#atom-tag" rel="alternate"/><published>2009-06-24T11:00:47+00:00</published><updated>2009-06-24T11:00:47+00:00</updated><id>https://simonwillison.net/2009/Jun/24/engineers/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://www.techcrunch.com/2009/06/23/engineers-are-the-best-deal-so-stock-up-on-them/"&gt;&lt;p&gt;Software engineers today are about 200-400% more productive than software engineers were 10 years ago because of open source software, better programming tools, common libraries, easier access to information, better education, and other factors. This means that one engineer today can do what 3-5 people did in 1999!&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://www.techcrunch.com/2009/06/23/engineers-are-the-best-deal-so-stock-up-on-them/"&gt;Auren Hoffman&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/engineers"&gt;engineers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/aurenhoffman"&gt;aurenhoffman&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;&lt;/p&gt;



</summary><category term="engineers"/><category term="productivity"/><category term="aurenhoffman"/><category term="open-source"/></entry><entry><title>Quoting Matt Mullenweg</title><link href="https://simonwillison.net/2007/Sep/7/photo/#atom-tag" rel="alternate"/><published>2007-09-07T22:42:22+00:00</published><updated>2007-09-07T22:42:22+00:00</updated><id>https://simonwillison.net/2007/Sep/7/photo/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://photomatt.net/2007/09/07/nadd-damage/"&gt;&lt;p&gt;Spend 10 minutes collecting everything you need to work on a problem, and unplug the internet for 2 hours. You'll finish in 30 minutes.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://photomatt.net/2007/09/07/nadd-damage/"&gt;Matt Mullenweg&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/matt-mullenweg"&gt;matt-mullenweg&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;&lt;/p&gt;



</summary><category term="matt-mullenweg"/><category term="productivity"/></entry><entry><title>Geek | Manager</title><link href="https://simonwillison.net/2007/Feb/19/manager/#atom-tag" rel="alternate"/><published>2007-02-19T10:15:24+00:00</published><updated>2007-02-19T10:15:24+00:00</updated><id>https://simonwillison.net/2007/Feb/19/manager/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.geekmanager.co.uk/"&gt;Geek | Manager&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Meri Williams is one of the most productive people I know. This is her new blog on being a manager and a geek at the same time, with plenty of productivity advice.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/geek"&gt;geek&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/manager"&gt;manager&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/meriwilliams"&gt;meriwilliams&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;&lt;/p&gt;



</summary><category term="geek"/><category term="manager"/><category term="meriwilliams"/><category term="productivity"/></entry></feed>