The AI Shift: Staying Human Amongst the Machines - How is Software Development Different Now?

In the first blog in ‘The AI shift’ series, we looked into what software development entails. This second blog examines how software development has changed with the onset of artificial intelligence (AI).

To understand how AI has impacted software development, we need to step back and compare how we used to write code for our projects in the pre-AI era with what we do now. From my own experience, I can break down the act of writing code into two broad steps: whiteboarding and implementing (the actual writing of the code).

 

Representational image (Source: iStock)

Whiteboarding is essentially a visual representation of the solution (often on a whiteboard or using pen and paper), walking through what the software needs to do and what it doesn’t, as well as running through a few edge cases (uncommon situations the software would have to handle). This could be as simple as writing out the structure of a single function (a small part of the solution), or drawing out a complex architecture of databases, caches, servers, and workers/services that are needed to perform a variety of tasks required of the software. Once a clear ‘visual’ idea of the solution is obtained, the process of writing the code, or in other words, ‘implementing’ the solution, begins.

Both whiteboarding and writing code are different skills, requiring different types of thinking. The first requires you to take a broad view of the problem by abstracting away the details. In the latter, you zoom in, delve into the details, and painstakingly code your solution line by line. As you begin to code, gaps in your beautifully whiteboarded solution may appear, forcing you to go back and ideate again. You would also run your code repeatedly, adjusting and fixing errors until you feel your solution is ready. In the process, you would have to contend with a variety of questions: Is an array (a simple list of data points) the best way to store information here? Or would a dictionary (data organised by labels) be more useful? Am I using the best geospatial library for this part of the project? Is there a better one out there? You begin to test your software implementation with different inputs to check if it is able to handle all types of situations successfully. You continue to think through your work on the commute back home: Is the Class (template of an object in the software) I wrote sufficient? Will it serve me down the line? Do I need to add more functionality to it? And so on and so forth…

With AI, you do none of these. You simply describe your whiteboarded solution from step one and hit enter. And the code for the solution is provided to you, with inline comments and docstrings explaining what individual parts of the code do, often a lot better than anything you could have done yourself. Great, right? Something that would have taken weeks, sometimes months, is completed in a few back-and-forth lines.


Something that would have taken weeks, sometimes months, is completed in a few back-and-forth lines.


Well, it depends. It depends largely on your goals as a developer. If you are a seasoned developer with substantial experience, you have a good grasp of foundational programming concepts, and your goal is to complete your project and deliver it on time, yes, AI can improve your productivity 10-fold. However, if your goal is to develop skill and become a better programmer, you should be more careful with how you use AI to write code.


AI can improve your productivity 10-fold. However, if your goal is to develop skill and become a better programmer, you should be more careful with how you use AI to write code.


Building a skill takes time and effort, requiring you to fail and then correct course repeatedly. This is applicable to a lot of things, from getting better at a sport to becoming a good writer, learning a language, or becoming a better driver. The same is true for software development. The more code you write and the more products you build in different settings, the better you get. Driving on a straight road with no traffic is easy, just like writing a simple Application Programming Interface (API) that a few individuals might hit at any given time. Driving up a hill in torrential rain is a lot more challenging, just like having your API get hit by millions of users in one second.

Having AI write all your code for you takes away that experience. Not contending with the details of your code yourself could prevent you from learning concepts that are integral to software development. In the worst case, you may find it challenging to debug AI-generated code if it fails.

That said, I also think it is unwise to abandon AI systems altogether. They can create immense value when used well. I deal with this in the next blog.