How useful do you think AI is in your workflow?

I’m a developer with about 10 years of experience. I tend to do work as part of a medium to large size team on complex codebases that have been around for a few years (large and often messy is what I mean by that!)

I have been using AI to help my workflow in various forms including

  • Asking chatgpt to generate a toy app and pasting it into vscode
  • Presenting technical problems as if I had an expert or teacher to discuss something with
  • Using the autocomplete as a minor productivity boost
  • Using chat to write a single function
  • Using composer to write an entire feature or fix a bug

Using chat to break down technical terms and help me learn new concepts by being able to ask lots of questions I think is by far the biggest productivity boost. With programming you need to learn every day and AI has made the difference from “I guess I know sort of what a WriteableStream is” to “I fully understand the concept in depth” because I can ask all sorts of questions and get it to present the information exactly how I like it.

Autocomplete is a nice to have, but it’s minor. It is convenient and pleasant to use, but it doesn’t really give me a competitive edge over another dev. The upside is that because it only writes tiny instantly verifiable chunks, it fits easily into a workflow with no extra reviewing time. Writing a whole function or say adding a new state to a react component with chat is similar.

More recently I’ve been writing entire features to an existing app. The agent feature of cursor is a gamechanger here. The codebases I work on may have 100k lines not including packages, and the indexing works very well to find specific parts of the app that need changing. Being able to absorb essentially the entire context of a very complex app is light years ahead of where we were copy pasting a single function in isolation into a separate chat.

However, having built a couple of features recently allowing the composer to go fully autonomous, I’m not sure if this level of automation has really saved me any time. Yes it does work, yes it does output fairly good code.

I start by outlining the general requirements as well as specific details I’ve already decided need to happen, but leaving the rest up to the AI. This is useful anyway as it helps me consider the problem.

I’ve tried just letting the AI run and do the whole thing itself. This definitely doesn’t work for me. Sometimes it might work, but often it will come up with a plan that either doesn’t work, or is architected badly, or works but is just wrong because it’s breaking conventions in the app. By the time it’s created 20 files it’s too far gone for me to manually change or make specific requests and I have to scrap it.

I’ve tried reading each bit of code through, then accepting it. This works ok and is probably my best way of using it. It allows me to check the general course and make sure it’s on track. For example, write some tests, let me read them, then tell me a plan, carry on and write code to pass 1 test, repeat. The main problem here is that without being constantly reminded to pause after each bit of code it tends to run away and start writing everything at once which becomes unmanagable. Even when doing this, at the end of it I’ll find that I’ve missed some important things like a loading or error state that I would have picked up had I been writing it myself because I would have been doing the thinking.

The other issue here is because I’m reading a lot of code, and telling it what to do, it takes me about the same time to implement a feature this way as it would just writing it.

I can see how if I were building something for a startup or hobby, where the only goal was to make something work as fast as possible, this is amazing and the perfect tool. But I am not convinced yet that it’s something that can actually write code for me while I sit back and check in once an hour. Not if you have other people reading and reviewing your code anyway.