All research
Commentary
2025-03-27 · 6 min
AI Can Write Code, But It Cannot Replace Software Engineering Experience
A recent experience investigating a failing clinic management system revealed a growing problem in the software industry: treating AI-generated code as a substitute for software engineering knowledge. AI can generate applications quickly, but without understanding databases, performance, architecture, debugging, security, and maintenance, a working prototype can quickly become a failing commercial product.
Artificial intelligence has significantly changed software development. Today, AI can generate user interfaces, APIs, database models, backend logic, and even complete applications within a short time.
However, generating code is not the same as understanding software engineering.
I recently encountered a practical example while investigating a clinic management system that had been purchased from another local software provider. The application was offered at a very low price, but after approximately one month of use, the clinic started experiencing serious performance problems. The system became slow, recurring issues continued to appear, and there was no clear technical process for identifying the root cause.
After receiving permission to investigate the application and review its source code, I found that the software had been packaged from Python into a desktop application. However, the more important issue was not the programming language or packaging method.
The problem was related to software engineering fundamentals.
One of the major issues I identified was the lack of proper database indexing.
Database indexing is a basic part of database optimization. When an application repeatedly searches, filters, joins, or sorts large amounts of data without appropriate indexes, the database may perform inefficient operations such as Full Table Scans.
With a small number of records, this problem may not be immediately noticeable.
But a clinic management system is not a static application.
Over time, the database grows with patients, appointments, medical records, prescriptions, financial transactions, and other operational data. As the dataset grows, poorly optimized queries can become a serious performance bottleneck.
This is where the difference between AI-generated code and software engineering experience becomes clear.
AI can generate a database query.
But who analyzes the Query Execution Plan?
AI can generate a database model.
But who decides which columns require indexing?
AI can generate an application.
But who monitors performance in the Production Environment?
A program running successfully does not automatically mean that it has been properly engineered.
A commercial system should consider Scalability, Performance, Logging, Debugging, Error Handling, Database Optimization, Security, Backup Strategy, and long-term Maintenance.
The problem with blindly relying on AI is that it can create the illusion that software development is simply a process of generating enough code until the application starts.
It is not.
The difficult part is understanding what happens after deployment.
When users report that the system is slow, an experienced developer investigates the bottleneck. They analyze logs, review database queries, inspect indexes, measure execution time, identify inefficient operations, and trace the root cause.
Without this knowledge, AI-generated code can quickly become Technical Debt.
The application may look complete.
The interface may look professional.
The code may even work correctly under basic testing.
But when the database grows or the workload increases, the underlying architectural problems begin to appear.
Artificial intelligence is not the problem.
AI is one of the most powerful tools currently available to developers. It can accelerate development, assist with debugging, generate boilerplate code, explain unfamiliar technologies, and improve productivity.
The problem begins when someone uses AI-generated code commercially without having the technical knowledge required to understand, maintain, and troubleshoot the system.
Software engineering is not about who can generate code faster.
It is about understanding the system you are responsible for.
AI can write the code.
But when performance degrades, production errors appear, database queries become slow, or the architecture starts failing under real-world usage, someone still needs to understand why.
And that is where software engineering experience cannot simply be generated with a prompt.
However, generating code is not the same as understanding software engineering.
I recently encountered a practical example while investigating a clinic management system that had been purchased from another local software provider. The application was offered at a very low price, but after approximately one month of use, the clinic started experiencing serious performance problems. The system became slow, recurring issues continued to appear, and there was no clear technical process for identifying the root cause.
After receiving permission to investigate the application and review its source code, I found that the software had been packaged from Python into a desktop application. However, the more important issue was not the programming language or packaging method.
The problem was related to software engineering fundamentals.
One of the major issues I identified was the lack of proper database indexing.
Database indexing is a basic part of database optimization. When an application repeatedly searches, filters, joins, or sorts large amounts of data without appropriate indexes, the database may perform inefficient operations such as Full Table Scans.
With a small number of records, this problem may not be immediately noticeable.
But a clinic management system is not a static application.
Over time, the database grows with patients, appointments, medical records, prescriptions, financial transactions, and other operational data. As the dataset grows, poorly optimized queries can become a serious performance bottleneck.
This is where the difference between AI-generated code and software engineering experience becomes clear.
AI can generate a database query.
But who analyzes the Query Execution Plan?
AI can generate a database model.
But who decides which columns require indexing?
AI can generate an application.
But who monitors performance in the Production Environment?
A program running successfully does not automatically mean that it has been properly engineered.
A commercial system should consider Scalability, Performance, Logging, Debugging, Error Handling, Database Optimization, Security, Backup Strategy, and long-term Maintenance.
The problem with blindly relying on AI is that it can create the illusion that software development is simply a process of generating enough code until the application starts.
It is not.
The difficult part is understanding what happens after deployment.
When users report that the system is slow, an experienced developer investigates the bottleneck. They analyze logs, review database queries, inspect indexes, measure execution time, identify inefficient operations, and trace the root cause.
Without this knowledge, AI-generated code can quickly become Technical Debt.
The application may look complete.
The interface may look professional.
The code may even work correctly under basic testing.
But when the database grows or the workload increases, the underlying architectural problems begin to appear.
Artificial intelligence is not the problem.
AI is one of the most powerful tools currently available to developers. It can accelerate development, assist with debugging, generate boilerplate code, explain unfamiliar technologies, and improve productivity.
The problem begins when someone uses AI-generated code commercially without having the technical knowledge required to understand, maintain, and troubleshoot the system.
Software engineering is not about who can generate code faster.
It is about understanding the system you are responsible for.
AI can write the code.
But when performance degrades, production errors appear, database queries become slow, or the architecture starts failing under real-world usage, someone still needs to understand why.
And that is where software engineering experience cannot simply be generated with a prompt.
Artificial IntelligenceAISoftware EngineeringProgrammingPythonDatabaseDatabase IndexingPerformance OptimizationSoftware DevelopmentClinic Management SystemAI Generated CodeSoftware Architecture