{"slug": "claude-code-always-produces-something-thats-the-hard-part", "title": "Claude Code always produces something. That’s the hard part.", "summary": "Reuven Lerner, a Python trainer and author, reports that using Anthropic's Claude Code for several hours daily has shifted his workflow from hand-coding to AI-assisted development, increasing his shipping rate while reducing manual coding. He emphasizes that agentic coding tools always produce output but require rigorous validation through CLAUDE.md contracts, test-driven development, telemetry, and small commits to ensure correctness. Lerner is offering three four-hour Claude Code workshops starting Wednesday, September 16.", "body_md": "For many months, I’ve been using Claude Code several hours each day. Not to experiment, but to get work done. A growing amount of the functionality behind [LernerPython.com](https://LernerPython.com) is now written with Claude Code: the [events system](https://lernerpython.com/live-sessions/), the membership plumbing, and the scheduled jobs that keep the site’s session listings current. And, of course, my [Socratic AI tutor](https://practice.lernerpython.com/), which I’ve not only integrated into my courses, but also into my “[Better Developers](https://lernerpython.com/become-a-better-developer/)” and “[Bamboo Weekly](https://BambooWeekly.com)” newsletters. Even my [course-setup](https://pypi.org/project/course-setup/) software, which I use several times each week when teaching live sessions, was written with Claude Code.\n\nI write less code by hand than I did a year ago, and I ship more of it. Also? I’m having a blast.\n\n## The good news: Claude Code always produces something\n\nLong ago, someone told me, “Computers don’t do what you want them to do. They do what you tell them to do.” This was always the case when programming. But with Claude Code, or any agentic coding system, the implications are much bigger. There are gaps between what you wanted to happen, what you specified, and what AI then actually implemented. Just today, Claude told me that gee, it really should have implemented a feature that I had asked for earlier today, and it’s so sorry that it forgot.\n\nUm, you’re forgiven? I guess?\n\nGenerally speaking, agents will do what you ask. But you need to understand where and how it might fail, and keep it honest with checklists, follow-up questions, and a very tight development environment. You need to think very carefully not just about the code you want Claude to write, but also about how you can be sure it is really working. Validating your results is, in some ways, more important than the results themselves.\n\n## What actually changed how I work\n\nFour things, in rough order of how much they’ve mattered.\n\n**A CLAUDE.md file that reads like a contract.** Mine says to use `uv` rather than pip, to add type hints everywhere, to write the test before the implementation, to run `ruff` before committing, and to commit small and often. It is not documentation. It’s the set of standing instructions I got tired of repeating, and every one of those lines was added as soon as something went wrong. It’s sort of how a company will update its employment contract when they discover something that hadn’t previously been included, and which let an employee do something they disliked.\n\nT**ests, not diffs.** A test is a claim about behavior, written in a form I can read in ten seconds and disagree with. Test-driven development was always good practice; with an agent in the loop it becomes the primary way you steer. Write the failing test first and the agent has a target it can’t talk its way around. Ensuring 100% coverage, and adding mutation testing into the mix, make it even less likely that things will go off the rails.\n\n**Telemetry and logging, much earlier than I used to add them.** When code was something I typed, I carried a mental model of it. When code is something I approve, that model is thinner — so I compensate by making the running system easier to observe. I log everything in incredible detail. I get reports e-mailed to me, including self-reflective reports on the AI system itself. I make things visible via APIs, so that I can access and observe information as an administrator. \n\n**Small commits as a rollback strategy.** If every step is its own commit, a session that goes wrong costs you one `git revert`, not an afternoon of frustration and debugging. I was always a fan of small commits, and now I’m even more convinced of their use.\n\n## Three workshops\n\nI’m running three Claude Code workshops this month. Each gives you four hours of hands-on work. As usual when I teach, I won’t use any slides.\n\n- **Wednesday, September 16 — Intro Claude Code with Python.** Start from the beginning: set Claude Code up properly, then build a command-line utility and a FastAPI app.\n- **Thursday, September 17 — Intro Claude Code with Pandas.** The same starting point, pointed at data: retrieve, clean, analyze and report on real data sets, including inflation and trade data.\n- **Wednesday, September 30 — Advanced Claude Code.** Commands and configuration tricks, plugins and skills (including Superpowers), writing your own skills, using APIs from within Claude Code, and a strong emphasis on testing and telemetry. Plus building a complex data-analysis web app.\n\nEach runs 5:30–9:30 p.m. London / 12:30–4:30 p.m. Eastern / 9:30 a.m.–1:30 p.m. Pacific. Each is $300, on top of a LernerPython membership. If you’re in PythonDAB, all three are included at no extra charge.\n\nI’ve taught versions of this material inside Apple and Cisco, among other companies. If you attended one of my earlier rounds: the exercises are new, and so is a good deal of the material — but I won’t pretend there’s zero overlap. The two introductions cover some of the same ground, because they have to. The advanced session revisits a little and then spends most of its time on things I’ve learned and folded into my own daily work since the spring.\n\n**Not sure yet? Come to the free info session on Monday, September 14**, at 5:30 p.m. London / 12:30 p.m. Eastern / 9:30 a.m. Pacific. It’s an hour, it’s free, and you can ask me anything before you decide.\n\n[Register for the free info session](https://us02web.zoom.us/meeting/register/nnuIxQToQm6a8N2EyutroQ) · [Full details and syllabi](https://lernerpython.com/code-with-claude/)", "url": "https://wpnews.pro/news/claude-code-always-produces-something-thats-the-hard-part", "canonical_source": "https://lernerpython.com/2026/09/08/claude-code-always-produces-something/", "published_at": "2026-09-08 13:04:49+00:00", "updated_at": "2026-09-08 13:26:31.062821+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "artificial-intelligence"], "entities": ["Reuven Lerner", "Claude Code", "Anthropic", "LernerPython.com", "Bamboo Weekly", "course-setup"], "alternates": {"html": "https://wpnews.pro/news/claude-code-always-produces-something-thats-the-hard-part", "markdown": "https://wpnews.pro/news/claude-code-always-produces-something-thats-the-hard-part.md", "text": "https://wpnews.pro/news/claude-code-always-produces-something-thats-the-hard-part.txt", "jsonld": "https://wpnews.pro/news/claude-code-always-produces-something-thats-the-hard-part.jsonld"}}