{
"path": "/posts/2025/year-in-review/index",
"site": "at://did:plc:mracrip6qu3vw46nbewg44sm/site.standard.publication/self",
"tags": [
"year_review"
],
"$type": "site.standard.document",
"title": "Year in Review: 2025",
"updatedAt": "2025-12-28T01:00:47.677Z",
"publishedAt": "2025-12-31T15:00:12.000Z",
"textContent": "This year was another year of wild change in technology and software engineering.\nIt felt like the year flew by yet so much happened during it.\n\nIn 2024, my approach to building software was thoroughly transformed with the release of claude-3-5-sonnet and use of Cursor's Chat/Agent to build software.\n\nThe breakneck speed of iteration and improvements did not stop in 2025.\nThis year, I shifted to working more with Claude Code, and most recently claude-opus-4-5, but with meaningful improvements along the way from Sonnet 4 to Opus 4.1 to Sonnet 4.5, with some experimentation with Gemini 2.5 Pro and Gemini 3 Pro preview along the way.\n\nIncreasingly, while I have a preferred agent harness and model that I work with, I've found that I can comfortably operate with most leading edge models and most tools to accomplish my goals building software.\nWith an underlying, first principles approach to how an agent harness works and the tools and context it has access to, you can go far.\nThe features and improvements in capabilities continue to increase the ceiling of what is possible.\nClaude 4.5 Opus was yet another improvement in the autonomy and accuracy with which I found I could delegate to a coding agent to accomplish a task I specified.\n\nCoding with agents is so much fun\n\nI often tell those interested in how I work with agent coding tools that they both allow me to explore an idea to see if it's interesting enough to continue working on while simultaneously serving as a continuous inspiration for me.\nAny idea I can turn into words or text is a jump off point for exploration in code.\nIf something feels like it's working, I get pulled in and see where it takes me.\nThis exploration leads to more learning and ideas and this cycle continues.\n\nI probably spent in excess of 1,000 hours working with coding agents this year and I feel like I am still only scratching the surface of the changes that are to come with regard to how people interact with computers and how computers are used as tools.\nWith the \"old way\" being only 2-3 years in the rear view mirror, my process of building software and using a computer as a tool has continued to change meaningfully every 3-9 months.\n\nReview of last year's review\n\nIt's hard to appreciate the speed of change while being swept up in it but re-reading last year's review has given me some insight.\n\nReflecting on the aims I set for this year, here is how those manifested in my focus and work.\n\n> - Continue building machine learning foundations\n\nWhile I didn't continue my work on the Fast.AI course, I had the opportunity to use an embeddings model to surface unstructured text in a dataset that previously was unreviewed due to lack of resources.\nMy sense is embeddings continue to be an underappreciated element of the machine learning stack and can go quite far in use for data analysis and semantic search.\nYou don't always need a chatbot - you can just write queries and scripts.\n\n> - Get comfortable with an LLM eval stack\n\nI intentionally did not invest in a particular eval tool.\nIn my work creating a multi-stage, complex document analysis LLM pipeline, my takeaway has been that in many cases, to use an LLM eval tool, you need to transform the shape of your problem into a shape the eval tool accepts.\nGiven the ease with which one can now build bespoke software, I've leaned more heavily into building purpose-specific tools for myself and my team to address our problems specifically, and in a way we can also modify going forward.\nThis has felt like a good tradeoff for the time being.\nAlso, we're not building a chatbot and LLM eval tools seem to heavily index on supporting chatbots.\n\n> - Continue exploring alternate LLM UX through Delta and other experiments\n\nAt the beginning of the year, I had a hotkey setup that would open a browser tab to the Anthropic Workbench.\nMy preference has generally been to try and make direct API calls to LLMs rather than use consumer chat wrappers like Claude.ai and ChatGPT, because I want more direct control of things like the system prompt and don't want my prompts to be influenced by the hidden prompt of the product.\nThe results were better (for what I usually needed), but I was never happy with how slow it felt to load the page in the browser.\nAdditionally, usually my workflow was something like\n\n- copy content\n- hotkey to open the browser\n- sign in if I got booted\n- paste\n- write a prompt\n- submit\n\nAnd this only worked for Claude models.\nIf I wanted to use Gemini or OpenAI models, I had to go to a different playground.\n\nIt was _fine_.\nBut because it was something I do so often, the friction became irritating.\n\nFrom this frustration emerged Tomo, a little Swift app I built with Cursor and Claude Code to call the OpenAI chat compatible APIs and with baked in support for popular model providers.\nThe killer feature for me was hotkey summoning, which allows you to copy text or take a screenshot with hotkeys that also summon the Tomo chat window with the context automatically attached.\nIt fuses my previous workflow together and allows me to stay in flow.\n\nThere is no agent or context integrations.\nIt's light and fast.\nI love it.\n\n> - Engage more with folks working on applying LLMs\n\nThis year I said \"yes\" to far more things and was substantially more proactive about reaching out to folks doing work I thought was interesting.\nI only regret not doing this sooner.\n\nI have several recurring 1:1s with people who are genuinely inspirational to me, and this is a huge motivator and support if I'm finding myself stuck, confused, or lost.\n\nMigrating my blog\n\nAs I also noted in last year's review, I didn't redesign or rebuild my blog.\nIn 2025, improvements in coding agents made this feel like not as big a burden.\nThis current blog was originally launched as a separate site at https://thoughteddies.com.\nI used Astro to build a handful of interactive posts, using Astro and MDX to embed modern Javascript frameworks in my post content.\nBy July, I was ready to migrate my Hugo site fully and wrote about that here.\n\nIn 2024, I avoided this migration because I didn't want to take time away from writing and experimenting.\nIn 2025, the coding-agent-assisted migration was easy enough I didn't even worry about it.\nOne day I woke up with a bit of motivation and energy to do it and that was all it took to see light at the end of the tunnel and make it through.\n\nCoding agents, ambition, and energy\n\nThe bar for the size and complexity of tasks and projects that coding agents can complete or assist with continues to rise.\nIdeas and projects I might have previously considered writing about can now be realized in an hour or less of prompting.\n\nKnowing I'll be able to rapidly see progress on an idea is usually a great motivator to get started.\nEven though more than ever is doable in a fixed amount of time, there are still limits.\nComplex projects take time, planning, and persistence.\nNot everything can be \"one-shot\" and I suspect this will always remain the case.\nTo build something aligned with your personal vision, you have to explain how it works.\nWith a coding agent, if you don't explain something, the agent will fill it in and since it can't read your mind, you'll likely need to iterate until you get closer to what you personally had in mind.\nYou can figure this out before you start coding or during, but to make the thing you want, you have to externalize your thinking as much as possible so the agent can implement to those specifications.\n\nOther things I did this year\n\n- Created a link blog\n- Refined my process for teaching others to code with an agent\n- Created a \"vibes\" site for hosting little one-off apps\n- Created a GitHub activity inspired /activity page for this site\n- Wrote a guide on agent coding strategies midyear that seems to have held up pretty well\n- Experimented with zoomable documents for progressive disclosure of content\n- Explored LLM conversation branching with embeddings visualization\n- Built interactive document citations using Claude's citation feature\n- Wrote about using images as context for doing design with coding agents\n- Built an Escape Room-influenced, retro computer game with my cousin\n !Retro game intro\n- Built several games, one currently in progress and presently at ~100,000 LOC, 100% coded with Claude Code and Opus 4.5\n\nContent by the numbers\n\n(Calculated with this script)\n\n| Category | Posts | Words |\n| -------------------------- | ------- | ---------- |\n| 🏗️ Projects | 2 | 525 |\n| 📖 Posts | 20 | 28,227 |\n| 🌱 Garden | 1 | 615 |\n| ✏️ Logs | 104 | 16,327 |\n| 📝 Today I Learned | 22 | 18,822 |\n| Total | 149 | 64,516 |\n\nThings I aim to focus on more next year\n\n- Getting more structured about my process for working with agents and how I teach others to use them\n- Experimenting with personal content curation for myself, using RSS feeds\n- Possibly sharing the game I've been working on\n- Experiment more with local, open source models for coding",
"canonicalUrl": "https://www.danielcorin.com/posts/2025/year-in-review/index"
}