With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself.
My main concern isn’t whether AI can write the code. It’s keeping my own skills sharp: writing Elixir naturally, keeping editor keybindings in muscle memory, remembering APIs and patterns, and being fast when I actually need to debug something.
I’ve noticed that reading and reviewing generated code doesn’t seem to stick in long-term memory the same way actually writing and wrestling with the code does.
At the same time, deliberately avoiding AI just to keep those skills feels a bit like ignoring a very useful tool.
So I’m curious how other Elixir developers are handling this. Do you still intentionally write a certain amount of code yourself? Have you changed how you use AI to avoid getting rusty?
Maybe a good analogy is playing music by ear versus relying on guitar chords you find online. The latter is convenient, but important details can easily slip through, even though those chords were originally written by humans. AI isn’t entirely different in that sense; it also builds on human-written material.
Learning a song by ear forces you to engage with it more deeply, and you’re more likely to remember it later. And, if you stop playing a song, eventually you forget how to play it.
I avoid all AI tools in 2~3 personal projects that I feel strongly connected with.ho
How is that making you feel?
In past years, I still had large PRs eventually hitting 2k LOC but I felt more connected with the code and people could asked me anything about it that I’d explain right away.
Still, no one Credo rule would catch case/2 where with/1 fits better, or is_binary(s) and s != "" instead of <<_::utf8, _::binary>> = s and much more. I am still able to figure out the elegant way of writing the code that no one existing model can.
I am not a big fan of giving bits of advise, even when solicited. Our mileage may vary.
Typically, when I figure out the task in my head, I instantly know, whether I would write the code myself, or delegate. Even more, I know what model am I to delegate.
I recently started deliberately doing some small tasks myself, usually the ones that feel pleasant, no matter if I feel agent would figure it out. For me, it’s a very effective way to keep understanding the project, better than just reading the code. I don’t consider it a waste of time.
Also, when I feel like I’d rather do something myself than explain it to the agent, I do it myself but I intentionally miss things and than tell the agent to complete it. For example, I use some API that doesn’t exist and expect the agent to create it. Kind of ‘prompting by coding’.
Solving Leetcode when waiting for Claude is also an option
Good question. I learn elixir at the moment. I noticed that it’s hard for me to really learn a new language and to make progress on an app which is relevant to me. I thought it’s easier to learn something new when it’s more relevant for me and it was in the past but that changed. When it’s too relevant for me I want to have it faster so the urge to rely on AI is bigger.
So I don’t use the AI at all when I want to learn something.
I tried Claude code for a while and didn’t write anything but recently unsubscribed. I’m taking a step back to reevaluate. It seems really easy for the code to get away from you if you’re not super diligent, ymmv. The code technically works but there’s a lot of slop and cleaning it up isn’t fun imo.
I think I’m looking for a tool that lets me cook and supercharges in other areas. IMO, there’s a product waiting to be discovered with this thesis. If you’ve come across anything, let me know. I’m going to try out zed’s delta.
Overall, I’m planning to move a bit slower and hand code more (maybe I’ll let them fill in some things like mat-hek mentioned). I think leveraging LLMs for adversarial reviews, documentation, and automated end-to-end testing could be more useful than having them generate the code so I can keep the understanding more easily instead of managing a black box.
Funny enough, I would draw the When to use LLM picture absolutely differently.
I never allow an assistant to mess with the design. It can do what it was told to do, but choices, let alone the creative stuff. Nah.
I do design myself. Always. Very carefully. I do not talk to an assistant on this stage either. I do not need second-hand ideas, and LLM does not have original ones by design.
Tests is something I allow it to write, under my strong supervision. This and that must be property-based, that is unit, and this is integration, now you know the drill.
And the code?—100%, I will fix it if it did a spaghetti soup. Or rewrite completely, if I feel like it. Maybe super complex task, I would do it myself from scratch, just to save time.