Advice on Using AI and An Example
Introduction
AI has recently become a contentious topic in the software engineering community. CEOs of popular tech companies are hypothesizing that AI will eventually replace software engineers (https://www.forbes.com/sites/quickerbettertech/2025/01/26/business-tech-news-zuckerberg-says-ai-will-replace-mid-level-engineers-soon/) or are requiring employees to learn how to use AI in their jobs effectively (https://www.forbes.com/sites/douglaslaney/2025/04/09/selling-ai-strategy-to-employees-shopify-ceos-manifesto/).
Additionally, senior engineers are concerned that using AI to replace junior and mid-level engineers will eradicate the pipeline necessary for engineers to grow and learn. Similarly, new graduates are concerned that their job prospects are dwindling because of the prevalence of AI.
Engineers need to recognize the benefits and pitfalls of using AI. On one hand, completely ignoring it can make an engineer obsolete. Conversely, completely embracing AI without understanding where and how it needs to be monitored can be disastrous. It may produce buggy software, requiring invasive troubleshooting, eliminating any gains from using AI.
In the worst case, especially in my core practice of embedded software engineering, nuanced interactions between the AI-generated software and the underlying hardware may result in crashes. Even worse, these crashes may cause safety-critical issues.
What advice can I give junior engineers just starting their career so they’re not paralyzed by fear from sensational articles on AI? What advice can I give to senior engineers to leverage AI to supercharge their own careers? How do I use AI in my practice?
Advice to Junior Engineers
My advice to junior engineers is best summarized by this YouTube video of “Coding Jesus” outlining why AI will never replace software engineers: https://www.youtube.com/watch?v=OxbEwjWv3rs. Software engineering does not only involve coding. Instead, there are other tasks that software engineers must perform that cannot be easily replaced by AI. For example, developing an architecture and design that meets the hard requirements set forth and is flexible to accommodate any soft requirements is not something that AI can easily replace. The decision-making involved in these tasks requires wisdom that can only be gained from years of experience, making and learning from mistakes. Additionally, AI does not easily replace navigating interpersonal relationships when working on a team. Everyone has different opinions based on their own experience; it’s crucial not only for the success of the product, but the success of the team and the organization, that these opinions are carefully managed so as not to marginalize any one person or group.
Advice to Senior Engineers
I advise senior engineers to use AI to accelerate tasks that are not part of their core expertise but are needed for their day-to-day job. For example, although my day-to-day responsibilities mainly involve developing and delivering embedded software in C or C++, I need to perform the following tasks that are outside of my core expertise but still necessary:
Offline data analysis using Matlab or Python: Some applications I develop implement an algorithm to process sensor data and make a decision based on the algorithm’s result. Before implementing the algorithm on the target platform, I implement it on a PC using Python or Matlab to ensure it’s correct. I collect sensor data from several controlled scenarios and ensure the algorithm's output matches the expected output. Since I’m only concerned about the algorithm's accuracy at this stage and not its performance, I use an AI tool to generate an initial implementation. I still review the output generated by the AI tool to ensure that it makes sense and runs correctly in my environment. Then, I use the collected raw sample data to verify the generated algorithm and adjust as needed.
Hardware-In-The-Loop (HIL) Tests Using Python: Testing is critical in the embedded software development workflow. However, I usually don’t like spending too much time initially crafting a perfect test framework. Instead, since all the embedded software applications have a built-in shell, whether over a UART or network connection, I rely on AI to generate a simple Python application to form the basis of the testing ecosystem. I then iterate and improve the AI output while developing the embedded software.
Simple Web Dashboard: I love to explore new technologies and frameworks, especially if they help me quickly visualize and analyze data (see the first point). I have recognized that web development, because of the nature of its use cases, has some of the best analysis and visualization frameworks. However, I’m not an expert in web development, and I rely on AI to generate the applications to analyze and visualize data collected from the embedded software applications I develop. To save time, I don’t require the web application to operate in real-time. Instead, I am fine with a manual process to store data collected from the embedded system and feed it to the web analysis engine. I do consider that web applications may have vulnerabilities, so I take care to secure my system by other means. For example, these dashboards run on older laptops that I have refurbished. Like all my machines, these machines always sit behind a VPN in my office.
Streamline Non-technical Tasks: As we’ll see in the next section, I use AI to help manage the logistical aspects of my day-to-day responsibilities. For example, I use AI to collect and present all my tasks for all projects on a TV screen in my office. This way, every morning, I can immediately identify critical tasks that need to be accomplished that day.
Example
As mentioned in the previous section, I use AI to manage all my tasks across all projects. I display these on a TV screen in my office so I know what tasks I need to work on every morning. The following diagram shows the process:
As shown above, I used the following tools:
Fireflies (https://fireflies.ai/): I use Fireflies to record meetings. One of its benefits is that it generates an accurate action item list and assigns them to the appropriate individual in the meeting. I’ve been impressed with Fireflies’ accuracy.
Zapier (https://zapier.com/app/home): Now that I have a list of all action items assigned to each individual in the meeting, I need to filter it to include only those assigned to me. Luckily, Fireflies integrates nicely with Zapier. I created a Zap for each client that gets activated whenever a new Fireflies recording is created and does the following:
Filters the recording on relevant subject keywords or client email addresses.
Uses ChatGPT to filter the “Super Summary List Action Items” for tasks assigned to me (I tell ChatGPT my name). I also instruct ChatGPT to create a bulleted list with a '“[]” sentinel.
Checks to ensure a non-empty list exists (to ensure I have tasks assigned to me).
For each item, creates a task in Todoist.
Todoist (https://app.todoist.com/app/today): Todoist is a no-frills task management application. I don’t need anything special; I just need a repository for all tasks organized based on each project.
ChatGPT (https://chatgpt.com/): I used ChatGPT to create a JavaScript-based server application that does the following:
Every morning at 8 AM, it fetches the list of tasks from Todoist.
It refreshes any clients connected to the server (using Websockets).
It displays tasks in separate categories for each client/project, in rows of 4 columns.
FireTV: Not AI, but I use the web browser on a FireTV to connect to the server to display the tasks, as shown above.
I was pleasantly surprised to discover that Android runs on a FireTV and could use ADB commands to prevent the TV from timing out.
Conclusion
AI is here. Just like computers, CAD tools, compilers, and IDEs, software engineers don’t need to fear AI and consider it as just another tool in their toolbox. Instead, we need to explore how AI tools can help us accelerate our typical workflows and day-to-day responsibilities and embrace their utility in improving our productivity.