How MercuryWorks Leverages AI Tools in Software Development Practices
Artificial intelligence (AI) is clearly garnering an inordinate amount of attention these days with GPT, DALL-E, Bard, LLaMA, and more dominating news headlines in 2023. These AI systems captivate imaginations and bring to life the power of AI by putting it into the hands of the mainstream, building upon the familiarity introduced by Alexa and Siri in consumer devices. They really are quite amazing. So naturally, MercuryWorks is exploring AI tools in software development. We want to share what we’ve learned so far.
AI is influencing a wide range of industries, including software development. As a result, software developers now have access to an array of AI-driven tools that help streamline workflows, enhance productivity, and deliver better software. At MercuryWorks, we have been challenging ourselves to explore ways to use AI to ship high quality custom software platforms more effectively and efficiently for our clients. In doing so, we are particularly mindful of the trust our clients place in us to plan, design, architect, develop and deliver software solutions that are well aligned with their immediate and longer-terms goals in mind.
In our pursuits, we have spent time researching and experimenting with various AI enabled tools within the following areas of the software development process:
- Code Generation and Completion
- Bug Detection and Fixing
- Automated Testing
- Code Optimization and Refactoring
We’ve been impressed by what we’ve seen so far and have no doubt these tools will improve rapidly over time, as the AI models continue to get tuned and refined. Below we share our thoughts and observations from the work we’ve done to date.
Code Generation and Completion
One of the most immediate benefits from AI-tools in software development is through code generation and completion. AI-powered tools like GitHub Copilot and Tabnine are able to analyze the context and intent of the developer’s code, providing context-aware suggestions and autocompletion. This feature not only accelerates the coding process but also reduces the likelihood of syntax errors and helps developers adhere to coding best practices.
We have found that AI coding assistants work exceptionally well when you are writing code for basic components. Functionalities like calculating a net amount due or deduplicating items in a list don’t offer much leeway for variance in code that can be written, and these tools excel at generating usable code in these instances. Great completions are also available for the more widely used libraries in today’s development landscape. We have had less success with large code completions that require domain knowledge or a large amount of context.
Integrating these tools into our daily workflow has not been trivial. There is a learning curve for how to interact with and get the best results from these tools that we have not yet mastered. We haven’t seen any significant increase in developer productivity offered by these tools yet, as all the code generated by these tools must still be vetted and understood before it is used. However, we suspect this will change as the AI models are tuned and refined. Similarly, getting the correct prompt to get the code you want is not seamless yet. You must ask just the right question in just the right place.
Bug Detection and Fixing
AI-driven code analyzers, such as Synk help software developers identify potential bugs, vulnerabilities, and security risks in their code. By pinpointing issues early in the development process, developers can address them proactively, reducing the time and effort spent on debugging and improving the overall quality and security of the software. These AI tools in software development use machine learning algorithms to analyze vast amounts of code from various repositories, learning from patterns and common errors to provide valuable insights to developers.
The current generation of AI powered tools that focus on detecting and fixing bugs have an advantage over past tools and their human counterparts. They can leverage many more lifetime equivalents of code to provide suggestions on fixes to make, alongside reference material on how to make those fixes. We’re watching these developments closely to see how this area changes as more AI generated code makes its way into training data.
Automated Testing
Testing is a critical aspect of software development, and AI-based testing tools can significantly enhance this process. Tools like Testim and retest leverage AI and machine learning to generate test cases, automate testing procedures, and predict which areas of the code are more likely to have defects. This enables developers to focus their testing efforts on high-risk areas, leading to more thorough testing and increased test coverage. Consequently, the software’s reliability and stability are enhanced, resulting in better user experiences.
The most time intensive portion of having a test suite, like all code, is maintenance. Using AI-enabled tools help make the maintenance of automated easier. The work that’s being done by these tools to improve self-maintenance capability help to make the more in-depth types of testing more available.
Code Optimization and Refactoring
AI-driven code analyzers also help developers optimize their code by suggesting improvements, refactoring opportunities, and best practices. This allows developers to make their code more efficient, maintainable, and scalable, ensuring that the software remains performant and easy to manage as the project evolves. AI-tools like Tabninecan analyze the code and offer actionable insights, leading to more streamlined and cleaner codebases.
Code optimization and refactoring using AI-enabled tooling seems a bit limited at this stage. We’ve found that the time it takes a developer to interpret and validate the new code that been generated is longer than what it would take to have just refactored it manually. It is important to us that we don’t ignore how easy it is for a person to work with our code. In the end, if there’s a bug or the AI assistant has an outage, a person will make changes. We would expect this to improve over time.
What’s Ahead
The adoption of AI tools in software development practices has the potential to revolutionize the way developers work, making the process more efficient, productive, and accurate. By leveraging AI-driven tools for code generation, bug detection, testing, optimization, and project management, software developers can deliver high-quality software solutions that meet the growing demands of users and clients. However, we do not believe that these tools are quite yet ready to solve “wicked problems”, though we expect that to change over time.
As AI technology continues to advance, its role in software development will continue to expand, offering developers even more powerful tools and capabilities to enhance their work. At MercuryWorks we’ll be working to responsibly use these tools to deliver high-quality software solutions for our clients that drive value for their business.
Let’s connect, if you’re interested in discussing how MercuryWorks can help your team quickly develop high-quality software solutions. We have more than 25-years of experience planning, architecting, designing, building and maintaining custom software applications that delight customers and accelerate growth for business.