New software development practices key to IoT success
Mark Warren, Perforce Software
Many businesses are reaping the rewards of the connectivity that IoT provides, while many more are rapidly developing their plans to join this revolution, writes Mark Warren, the product marketing director of Perforce Software. As they do so, they are starting to appreciate the practical challenges that IoT brings: Getting products to market quickly, changing standards – or no standards, rapidly improving hardware, addressing security issues and, especially, coping with the vast amounts of data being generated. All of these challenges are putting a strain on traditional software product development and deployment processes.
A fundamental element of their success will be redesigning of infrastructure, code and product development practices to address these challenges while, of course, maintaining customer satisfaction and competitive advantage.
Infrastructure as code
Although a lot of focus has been on developing the internet of connected devices such as the classic smart refrigerator or activity tracking bands, increasingly attention is focusing on developing the server-side applications that handle this torrential flow of data and use it for commercial benefit. Being able to handle rapidly growing datasets, always-on connectivity and scalability on-demand is leading organisations to revisit their entire development and operations processes. In this scenario, DevOps is widely seen as a key to success because it breaks down barriers between developing a product and getting that product into production.
One of the keys to DevOps success is the ability to rapidly provision servers to host the business applications at the core of the IoT ecosystem. Rapidity requires automation. Systems are too complex and changing too fast to rely on heroic efforts by a limited number of systems administrators. Deploying software code is a well-known and well-practiced activity; however, trying to do the same with physical hardware is all but impossible. That’s why virtualisation and infrastructure as code (IaC) are seen as the saviours of systems administrators.
With IaC, the environment on which the software applications execute – including processors, memory, network interfaces and communications services – are all defined in software-defined configurations. These configurations are typically in the form of structured XML files, effectively plain text files. This has several advantages: They are – mostly – human readable but, more importantly, they are in an easy-to-manage file format.
These infrastructure definitions look a lot like software source code, and IT teams have known how to manage such files for decades. IaC definitions are easy to handle with version management tools to track changes and allow collaboration across different teams. For example, the software developers may contribute requirements for storage or database connections while a security team may control which ports are open or how encryption will be managed.
Track, react, secure
The version management system at the heart of this process should also be the audit trail to ensure that the operations team or, more importantly, any compliance authorities can verify exactly what code is running where at any point in history. As a result, teams adopting this approach should ensure that their version management tool provides an immutable history of changes – which isn’t the case with many modern open source tools.
The actual IaC environment definitions may be a collection of assets: multiple files to define different aspects of the system and the code or services being deployed on the servers – such as databases and third-party libraries. As a result, the version management system also needs to be able to handle all digital artefacts, not just source code, and be able to manage the related sets of artefacts as a single item – also known as configuration management.
Finally, securing these files is another priority. After all, these definitions could expose potential attack surfaces to hackers or be a competitive differentiator that should not fall into a competitor’s hands.
Empowering internal teams
A final but extremely important part of successful IaC is creating a working environment that makes the most of in-house talent. The most successful IaC-led IoT projects are likely to be those where organisations have given in-house teams the chance to experiment, sometimes fail but hopefully achieve success. Since these individuals are within the organisation, they are already in a strong position to collaborate, understand the company culture and ideally have visibility across business needs and product lines. However, it is vital that these employees are equipped with the technology tools they need, including the ability to view different versions, who is working on what, the history of a project’s code, plus support for transparent collaboration.
With the acceleration of the IoT, IaC – if executed well – could prove to be a catalyst that helps product development teams react rapidly to market demand, while maintaining a high level of finished work.