Blog
Notes from the work
What I am learning building these tools. Specifics, including the parts that did not work.
The backlog isn't just mine anymore
There's a new page on the site where you can tell me what to build, and vote on the ideas other people already left.
The number I was actually watching
I started tracking visits to find out if I'd keep going, not to hit a number. Somewhere along the way, the number showed up anyway.
Knowing when to build it twice
Built in May, built again in July. Nothing about the first version was broken. What changed was what the tool was finally capable of fixing.
Every drawing as a pin on a map
A drawing inventory tool placed drawings on a map, until two unrelated projects turned out to share the same location.
All means all
A filter for one slice of a crowded inbox, and a delete-all action that ignored it completely. What that looked like, and why the fix stayed small on purpose.
Getting Started: Python for Forma and ACC
Episode 1's other clause, if the work touches Forma or ACC data management, you'll want Python. This episode is the rest of it.
Getting Started: .NET for Civil 3D
Episode 1 gave this one clause, if the work is Civil 3D plugins, you will want the .NET SDK, and the version matters. That deserves the rest of an episode.
What does orchestration mean?
Five projects running at once, in five different windows, is what I call orchestration. Keeping track of which window is which is the part nobody warns you about.
Writing a Social Media Post is automatic. Sending is not.
A tool writes social media announcements for every post the moment it's finished. It has never actually posted one.
Two shades of the same site
One question about a light theme, less than 30-minutes of total work I did not do myself, and a page to click through when it came back.
Built by an agent, not an agent
The word agent now covers everything from a chatbot to a button with a prompt behind it. Most of what I build was made with an agent, and that is exactly why the finished tool should not be one.
It runs on my machine, and that is the problem
Two tools I wrote could not run at the same time, because I had given both of them the same port number. That is a small bug with a large family behind it.
Sixteen tools, six sections
A palette does not save you from memorizing sixteen command names. It saves you from having to remember that sixteen tools exist at all.
The stamp is still yours
AI can take the repetition out of your Tuesdays. It cannot take your stamp off the drawing, and that line has not moved in nineteen years of watching it hold.
The Markdown file
The most useful file in most of my projects is not code. It is a plain text file that tells the AI assistant the rules before I say a word.
Four tools, one deck
A PowerPoint deck can need an image, a video, and a cloned voice, plus something to hold it all together. Here is how I actually pick, and why I stopped trying to name a winner.
We have been here before
A man told me in 2006 that my problem was making Civil 3D look too easy. I hear the same complaint about AI now, in almost the same words.
Getting Started: Git
Episode 1 folded three things into one sentence: Git lets you see the diff, undo a bad change, and keep an actual history. Each one earns more than a clause.
Getting Started: The Terminal
Episode 1 promised this one its own post. What a terminal actually is, why Claude Code does not give you a choice about using one, and the two ideas that cover almost all of it.
Getting Started: Claude Code
A coworker asked what to install before trying Claude Code on something real. My answer, three tools and at least one language.
The library I couldn't model myself
I am not a 3D modeler, and MUTCD signs are not something you get right by eyeballing them. Here is the pipeline that builds them for me, headless Blender and a validation report, from a spec file instead of a mouse.
The Infinite Backlog
I keep a running list of things to build or fix, and I add to it several times a day now. Not because more is broken than a year ago, but because I finally notice it.
The Headstart
I sit across dozens of infrastructure and civil engineering accounts in a given year, and I can now point at which ones are already ahead. Two studies this year put a number on the gap I have been watching.
Two kinds of AI work
There is AI work that makes an existing task faster, and AI work that makes something exist that did not before. The second kind is harder to see, and worth learning to.
The Genie
A rhyming fable about wishing for a car, and what happened when the wishes got specific enough to matter.
The learning snowball
I grouped my projects by the application they run inside. That was filing, not strategy. It turned out to be the reason each new tool costs less than the one before it.
We built this, but is it secure?
The right instinct, and the wrong question to type. Here is what to ask a coding agent instead, and why the ranked list it hands back is not the same thing as a list of decisions.
Ask me questions
Three conversations happen before any code gets written, and the most useful three words in the whole process are the ones I type last. Here is how an idea actually becomes a tool.
They asked if it could be done
A customer wanted to know whether field photos could place themselves on a drawing in what was at the time, the Autodesk Construction Cloud (ACC). That environment is now called Forma. The fastest honest answer was to build it and show them. The hard part turned out not to be the photos, it was knowing which coordinate zone the drawing was in.
The pauses are the hard part
Four days after giving this blog a voice I took it apart and retuned it. One setting was quietly adding noise to every post, and a fix I made produced nothing at all while looking like it had worked.
Find the scan, then open it
Point cloud files hide well. Meaningless names, no preview, and they are on local drives and in the cloud at the same time. Here is the tool that finds one by nine different handles and opens it in ReCap from the same row.
Pick a point, get a number
A Forma Site Design extension with two switches on one terrain. The marker reads slope or elevation at the point you pick, and the surface paints as a slope heat map or an elevation banding map. Here is how it works, and why the map and the marker are not the same job.
Redraw it before you commit
More stalls or a wider drive aisle. You cannot see that tradeoff from a static layout. Here is a Civil 3D tool that redraws it live while you decide.
I gave this blog a voice
I hooked ElevenLabs up to the blog so you can listen instead of read. Here is what I have learned so far about doing that well.
A class for the thing with no class
Point clouds ship with a fixed list of classifications, and "car" is not on it. Here is the tool I built to fix that, and why it has to stream the file instead of loading it.
Why I am showing you this
This site is not a highlight reel. Here is what actually convinced me to make an internal tool catalog public.
How I know it is right
If a tool can be confidently wrong, how do you trust anything it produces? Four things I actually do, none of which are "be careful".
What it got wrong
This site broke in public last week. Here is exactly how, because the interesting part is that nothing looked wrong.
How I got started
The first thing I built was a to-do list app. Not a Civil 3D plugin. Here is what the first six months actually looked like.
Start with the thing you do forty times
The boring task on your desk is the right place to begin. Here is why the boredom is the point.
Looking for the old stuff? I wrote Angel's Civil 3D Thoughts from 2004 to 2016. That is 528 posts on Civil 3D, Land Desktop, and the last transition the profession went through. It is still up.