Let's Work Together

AI Assisted Development

Image by Barry Geipel

AI-Assisted Software Development

Introduction

We recently undertook a major project that required me to quickly teach a team of web developers inexperienced with Flutter and its clean architecture patterns, sometimes learning just ahead of them. Ensuring the project’s success required leveraging AI-assisted development to accelerate the learning curve, streamline decision-making, and quickly adapt to new tools.

The Project and Team

The project team consisted of four experienced web developers with minimal experience in mobile development and no prior exposure to Flutter. Our goal was to build a loyalty app from scratch, including both the mobile application and the backend infrastructure.

Given the tight timeline, I prioritized efficiency by setting clear milestones, structuring workflows to maximize productivity, and ensuring that AI tools were integrated effectively to support rapid development. Choosing Flutter was a strategic decision to allow the team to focus on delivering features and UI rather than managing separate iOS and Android codebases.

Since I had only recently learned Flutter myself, I saw this as an opportunity to foster collaborative learning within the team. By positioning myself as both a guide and a learner, I encouraged knowledge-sharing and problem-solving, which ultimately strengthened the team’s ability to adapt and innovate. I directed the team to high-quality tutorials on Flutter and MVVM-Clean and shared my own experiences using ChatGPT to accelerate learning. During our kickoff, I emphasized that ChatGPT was not a crutch but a strategic tool for fostering a culture of innovation and efficiency. By integrating AI thoughtfully, I encouraged the team to experiment, optimize workflows, and approach problem-solving with a forward-thinking mindset.

During the implementation phase, I was also called upon to contribute to backend development, which I had never done using Firebase. Once again, I was able to join the team as a learning participant. Using ChatGPT and later Copilot significantly expedited my ability to become a productive Firebase developer.

Using AI as a Learning Tool

At the start of the project, we used ChatGPT solely through a browser interface, manually following its guidance rather than integrating AI-driven automation into our IDE. Later, we incorporated Copilot into Visual Studio Code alongside ChatGPT, enhancing our workflow.

ChatGPT played a crucial role in helping us set up the project. One of the first challenges it solved was structuring the project to align with MVVM-Clean architecture while maintaining Flutter’s best practices. It provided sample implementations and helped clarify dependencies, significantly reducing the time it would have taken to figure this out manually. It provided guidance on structuring the project to balance standard Flutter conventions with the MVVM-Clean architecture and stateless UI widgets. This was an interactive process where I reviewed ChatGPT’s suggestions and refined them based on my understanding. ChatGPT’s ability to adapt to my feedback was impressive, much like mentoring a junior developer. Communicating in a conversational style helped clarify my requirements and refine the responses.

Beyond code snippets, ChatGPT’s explanations in plain language helped accelerate my understanding of Flutter - not only from a pure syntactical perspective but also from a best practice perspective. However, It also enabled me to recognize when its recommendations didn’t align with my architectural vision, allowing me to make necessary corrections. An example of this was how it seemed to favor making use of a monolithic data model as presented by the api rather than by transforming the data to what was needed by View models and use cases in our MVVM-Clean architecture. Once I provided that guidance it was able to apply that pattern in subsquent examples.

Mobile Development While Mobile

Later in the project, I needed to quickly implement a game component. At the time, I was on vacation and had a long drive ahead, so I decided to make use of the drive time and ChatGPT Mobile’s voice chat feature.

I explored various Flutter game and physics engines to determine the best fit. After deciding on the Flame game engine and Forge2D for physics, I engaged in meaningful discussions about how these packages functioned and how to implement our specific game mechanics.

ChatGPT also helped outline how our Firebase backend could support the game’s real-time data management needs. This discussion alleviated concerns about scalability and concurrent active users.

During this session, I relied solely on the voice interface. ChatGPT provided voice responses in plain language while also saving key code examples, making it easy to review and extract necessary components upon returning to the office.

ChatGPT vs. StackOverflow

ChatGPT offers instant, context-aware responses tailored to specific queries, making it a powerful tool for real-time problem-solving. In contrast, StackOverflow provides a vast repository of community-validated solutions, requiring users to search for applicable answers and adapt them to their needs. ChatGPT offers instant, conversational responses that adapt to the specific context you provide. It generates detailed explanations, provides code snippets, and refines answers based on follow-up questions, making it a useful tool for solving your specific problem rather than the specific problem posed original poster in StackOverflow.

Developers Must Be Active Participants

ChatGPT proved to be a powerful asset, but only when used within a structured context. Our responses needed to align with MVVM-Clean principles, and we had to ensure that our widgets remained stateless.

A recurring challenge in code reviews was developers pushing back against feedback with, “but ChatGPT recommended this.” In many cases, this happened because they hadn’t provided ChatGPT with the full architectural context. For instance, one developer used a stateful widget simply because ChatGPT suggested it. While technically valid, specifying our preference for stateless widgets upfront would have resulted in a more aligned response.

AI-assisted development is a powerful tool, but it requires strong leadership to ensure its effective adoption. I guided the team in implementing best practices for AI-assisted workflows, encouraging critical thinking, structured validation of AI-generated solutions, and continuous learning to maximize productivity while maintaining accuracy. While AI accelerates workflows and problem-solving, its outputs must be carefully reviewed to ensure accuracy and alignment with project goals. AI-generated solutions must be validated, especially when it comes to avoiding deprecated libraries, functions, and packages.

What Works Well

ChatGPT excelled in several key areas:

ChatGPT’s responses were most valuable when framed within our specific app architecture and implementation details. This contextual awareness significantly enhanced our learning and productivity. We often provided ChatGPT with real code snippets to maintain context.

Visual Studio and Copilot

Later in the project, team members began using integrated IDE tools like GitHub Copilot. In addition to providing more contextual answers for code samples, Copilot dynamically suggested updates to the code directly. Developers should thoroughly review all changes suggested by Copilot to ensure accuracy and alignment with project requirements.

Visual Studio and Copilot also provided more context-aware autocompletion, which we found particularly useful.

Conclusion

Ultimately, our project was successful and delivered on time, largely due to AI-assisted development. ChatGPT and Copilot enabled us to accelerate learning, resolve technical challenges quickly, and maintain high productivity. Without these tools, achieving our ambitious timeline with a team new to Flutter would have been significantly more difficult. Given our tight timeline and the team’s limited prior experience with Flutter, I firmly believe that using ChatGPT made it possible to achieve our goals efficiently. AI-assisted development is not just a convenience—it’s a transformative tool that, when used correctly, can reshape how teams approach software development.