It occurred to me during a walk one day to try using gen AI to generate a tutorial to walk me through building a tool I wanted, instead of prompting it until it generated a version of the desired tool.  I’m not sure if prompting gen AI to generate tutorials is a meaningful corrective against the deskilling trend a growing body of literature is warning about.  But as a former senior manager of software engineering in transition, I haven’t shipped production software since the pandemic and thought this might be a way to start knocking some rust off.  I decided to prompt a tutorial to build a couple things:
1. A data pipeline for retrieving my Bluesky posts on a schedule and storing them in a database

2. A CLI for querying the database

It took a few iterations with Claude Sonnet 5 set to Medium effort, but the end results were a decent tutorial and working code.

Version 1

The prompt:

As a software engineering instructor, generate a hands-on tutorial for me to follow in order to build the following software components:

  1. A data pipeline which retrieves my Bluesky posts via the AT Protocol API on a schedule and stores them in a database (perhaps SQLite to start).
  2. A CLI for querying the database

The result: bluesky-pipeline-tutorial.md

When I got to the part of project setup that said to create a .env file and add it to .gitignore, that exposed the absence of any prior instructions to configure a local GitHub repo.  So I prompted for a tutorial revision.

Version 2

The prompt:

Revise the tutorial to include the necessary steps to configure a local GitHub repo. The absence of those prior steps stands out when project setup instructions say this:

Create .env (and add it to .gitignore immediately)


The result: bluesky-pipeline-tutorial-v2.md

I followed the revised tutorial all the way through step 5, but manual execution of the pipeline failed.  It occurred to me that error I’d gotten might be because I didn’t properly account for having switched from the default PDS for Bluesky to Blacksky some time ago.  But I narrowed my follow-up prompt to the specific error instead of something broader. 

Version 3

The prompt:

Result was the following: [2026-07-12T21:46:07.397Z] Pipeline failed: Invalid identifier or password

Please generate a revised tutorial that addresses the issues.


The result: bluesky-pipeline-tutorial-v3.md

The revised tutorial added a subsection to verify authentication before completing the rest of the pipeline, including a test script followed by multiple steps to check if the failure repeated.  I walked through the steps, now certain my attempt to connect to the wrong PDS was the culprit.

Version 4

The prompt:
I've verified the issue is not any of the items in the new step 3a, but I forgot that I no longer use the default Bluesky PDS, having switched to Blacksky PDS some time ago. Generate a revised tutorial which accounts for this possibility, so I can update the code accordingly.

The result: bluesky-pipeline-tutorial-v4.md

This version of the tutorial added an environment variable to make the PDS a configurable value.  It also provided a script to resolve the correct PDS given a handle and the BlueSky public AppView.  Writing and executing the script yielded https://blacksky.app as the correct PDS.  Once I updated the .env file, the test-auth.ts script that failed after I followed the steps of version 3 succeeded.  Finally, the first manual pipeline run also succeeded, retriving and storing 3295 Bluesky posts in a SQLite database.

 I haven’t built the CLI yet, since I’ve been using Datasette to explore my downloaded Bluesky posts.  I will write another post about the experience of building the CLI.