Along with the emergence of the Fourth Industrial Revolution (4IR) we are seeing an increased usage of rebranded terms, that now contain the word “Intelligent”.
We find ourselves surrounded by concepts like Intelligent Automation, Intelligent Digital Workplaces, Intelligent Customer Experience, Intelligent Infrastructure and many more. How much longer until we are faced with the new and improved concept of Intelligent Development as a rebrand of DevOps?
What is “Intelligent Development”?
Intelligent Development, in the context of software development, would refer to concepts, designs and approaches that developers could explore in order to create solutions that would continue to develop, maintain and even enhance themselves.
A large portion of the concepts that may form the basis of Intelligent Development would most likely be adopted from modern DevOps elements. By applying concepts like critical and design thinking to the planning of a solution, the solution may be developed in a manner that is sophisticated enough to cater for foreseeable use cases (like further repetitive or predictable development, maintenance and enhancements). Thus, it can be argued that if architects and developers work together to develop intelligently, Intelligent Development would be no more than a “fancy” term to encapsulate a concept that is much more powerful than the catch-phrase depicts.
An example of a high-level implementation of Intelligent Development is depicted in the figure below:
In the figure above, the existing concept of using source control repositories and pipelines is expanded upon to accommodate for consistent (or standard) elements of a solution. With this approach, the developer is also allowed the opportunity to review the changes before accepting the pull request and kicking off the publishing process – this ensures that the appropriate level of visibility and responsibility are still maintained. Let’s consider an example.
There is a need for a Web API that can be expanded to onboard new data sets (with consistent data source types, ie different SQL Server Databases with SQL Server as the consistent data source type) over time. Each time that a new data set is introduced, the solution would need to be enhanced to accommodate for the change. What if the solution developed itself? But how?
Let’s consider the steps that would be involved in making the above possible:
- A source control repository would need to be created and a standard branching strategy would need to be defined
- The Web API project would need to be created and stored in the repository
- The business logic would need to be defined
- A pipeline would need to be created to control environmental specific (dev, qa, prod) publishes
- Documentation would need to be created and stored somewhere that is centrally accessible
- A reusable mechanism to clone a repository, push code and create pull requests would need to exist
- A lead developer would need to take responsibility for reviewing changes and approving the pull request so that the pipeline may be kicked off
Most of the above is feasible for automation, considering a few reusable elements that are mentioned in my previous posts as well as my GitHub repo:
- SQL Validation
- Using Python Through Command Line
- Automating ASP.NET Core Web API Creation That Communicates With Your Database in 60 Seconds or Less
- Message Notification
What About The Moral Standing of Self-Developing Solutions?
In the space of Automation, the focus on repurposing certain job roles is significant. Automating repetitive tasks has many benefits but the fear of job loss definitely is not one of them.
As developers, we should understand that not even we are safe from the capability that technology has to offer. We, too, need to repurpose our skills towards more meaningful, complex and cognitive tasks. In retrospect, being able to concentrate on research and development instead of supporting an existing solution is the dream that many developers would want to work towards. The ability to pivot towards practically implementing self-developing solutions is what separates good developers from great developers.
Personally, I believe that the benefits of developing intelligently outweigh the shortfalls by far. It has become a new way of approaching problems for me. By remaining conscious of Intelligent Development while architecting and developing solutions, I am enabling myself to work on more innovative projects and supporting less legacy solutions. My hope is that as a collective of developers we strive towards the same goal of continuously adding intelligence to our development process – Let’s take this opportunity to be better together!