App Refactoring, Meet AI

A Long Overdue Introduction

In software development, one of the holy grails is a tool or platform that can completely refactor an application without the need for a software developer to write any code.  With no loss of functionality, translating from one language to another onto a superior tech stack and deployment environment.

Wait.  Developers building software to make developers obsolete.  Nice try program managers.  Not likely anytime soon.  However what is likely is the creation of software that can generate massive amounts of reusable scalable functionality. 

A form of intelligence has found its way into application generation, for both new app dev and app rewrites.  Being relatively new it holds great promise.  Developers will soon expect a certain amount of an application’s code base to be established before they begin their development. 

Sticks and Stones to Build Masterpieces

In every trade and profession one can think of, the level of tool sophistication is greater than or equal to what the tool creates.  This, however is not true in traditional software development. Developers manually write code for the creation of automated systems.  As I say it aloud it does not make sense.  It seems more logical that developers should use more sophisticated systems than the systems they create.

Let’s try this again.

Developers should use automated tools to write code for the creation of automated systems. Doesn’t that make more sense? Of course it does but it isn’t reality. Why is it acceptable?  What is it about software development that the tools of the craft are often less sophisticated than the systems created by the tools?  Very few industries have such a gap in sophistication, and perhaps none have a larger one. 

Paradigm Shift in DevOps

The pyramids are a feat unparalleled, yet for all the engineering and mathematics, manual labor is at the core of their production. We would not dream of repeating such an accomplishment manually, instead choosing tools that are the result of centuries of refinement.  Yet, when it comes to software development, for the most part we still write code as we have for decades. It is a manual process using our favorite editor and some sort of compilation.  Regardless the language or target environment, sophisticated new app development and complex cross language app refactoring still require brute force to go from concept to executable.

Interestingly, every other phase of DevOps is automated.  Check your code into GitHub and suddenly it runs through a toolchain to be built, packaged, validated, and deployed.  Why doesn’t code creation have a similar high level of automated sophistication?  Most cloud vendors allow for the selection of a wide variety of tech stacks when provisioning a server.  Basically the components of the tech stack are pre-installed on the server, saving us time.  Not a bad idea and I have grown to appreciate this step.  However…you knew I had a however…what is installed and our usage of it is mostly ( at least initially ) a manual process.  Great news MySQL and Spring are installed, but the effort is still substantial to go from the idea of an applications to one that uses these software projects. 

Intelligent Project Generation

Here is a thought.  Let’s create a developer’s tool.  I know, yet another one, but give me a minute. A tool whose sophistication matches the level of sophistication of what it creates. What if we could provide a high level descriptive input of our requirement to the tool and what if we select from an array of technology stacks? Using the input and selected tech stack, what if the tool output the maximum amount of code necessary for the app to be considered MVP-like? Shameless plug alert…it is the sole purpose for creating Harbormaster.

This is the first phase of AI-based Application Generation.  Consider it applied intelligence.  At this level,  user involvement is no-to-low touch, requiring no level of software development experience.  However, its output is exactly what an experienced developer would have written AND expects to enhance. The support for descriptive input should be independent of a targeted technology, yet include recent and prior methods.  Technology stacks are defined in such a way to be reusable and independent from the business problem they will be applied to solve.  The tool understands how to merge these two independent aspects to output a relatively sophisticated application. This initial version of the application will expose a great amount of functionality.