United Kingdom
hello@creative-computing.co.uk
The battle for competitive advantage in development has always been a defining feature of Dynamics. System providers have fought to create the most advanced, customised code in the fastest turnaround for their customers.
As we look to the future, the potential for speed, usability and functionality grows ever greater. And ambitious companies are doing all they can to get ahead of that curve.
But if we are to plan for the future of Dynamics Development with any confidence, we must first understand the past…
Finance systems began life as highly standardised and extremely limited in functionality (essentially built for companies selling widgets to consumers, based on standard processes for receivables and payables).
For many organisations, this was a frustrating situation – they wanted a system that acknowledged the nuances of their industry and idiosyncrasies of the particular processes of their business.
In response, system providers began customising their solutions. And in some cases were able to offer a much more satisfactory level of functionality and usability to the customer.
There was just one problem – the customisation never stopped.
Core functionality became confused and diluted by endless tinkering. And of course each time a new stakeholder emerged, the system would be pulled in a new direction entirely.
With constant iteration and adaption, formal documentation tended to be an afterthought and all too often the architecture sat entirely in the head of the developer. The documentation that did exist tended to be retrospective. And of course by failing to define these details during the technical design stage, it often meant there was a huge gulf between the visions of the developer and customer. A disparity that only emerged when it was already too late.
Another consequence of the ongoing customisation was a huge inflation of costs. Scoping and pricing projects became extremely difficult, and all too often both parties would be left frustrated – customers feeling aggrieved by the additional costs, and system providers having to sweep a growing proportion of their development time under the carpet. It was lose/lose for all concerned.
However, the more customisation added, the more the customer was locked in to the provider. Relationships endured but with each upgrade came costs that were sometimes prohibitive to progress.
While demand for advanced customisation was high, supply for those with the necessary development skills was short. The code was hard and resources few. After all, this was the generation that had witnessed the birth of the internet.
With available training limited to “on the job learning”, there was a significant barrier to entry for new talent. Those with the skills knew their value and priced their time accordingly.
C/AL (C/SIDE) was the primary programming language used in Navision. C/AL code was a declarative language written in the integrated development environment called C/SIDE (Client/Server Integrated Development Environment) and it allowed developers to define the logic and behaviour of various elements in the system.
In Navision, the coding for different business entities and processes were represented as objects. Each object type served a specific purpose. Triggers in Navision were pieces of code that run automatically when a certain action occurred. The development environment in Navision – C/SIDE – provided a graphical interface for developers to design and modify objects, write C/AL code, and manage the overall structure of the application.
Developers then used C/AL to define how data was accessed and manipulated within the system. This includes creating and modifying records in tables, handling data validations, and managing relationships between different data entities.
One of the strengths of Navision was its customisation capability. Developers used C/AL to customise existing objects or create new ones to tailor the system to the specific needs of a business.
Where standardisation once meant limitation, it now means possibility. Standard functionality has expanded in so many ways and in so many directions, companies can enjoy a system that fits around them whilst essentially paying for an “out of the box” solution.
At the heart of this shift has been the emergence of apps. Where customisation used to involve endless changes to the central code, there is now a standard core platform on top of which an ever growing number of apps can be bolted on. Some of these apps are horizontal and can be applied to any industry, such as Creative Computing’s expense management app.
This new structure makes it so much easier for the system provider to retain a core platform for upgrades, service packs and hotfixes, while delivering a longer term roadmap.
As with the system itself, the accompanying documentation has evolved significantly. A key driver has been the customer’s desire to target the success of the project against pre-defined criteria. Which in turn has forced scoping and technical design documents to become far more extensive than anything that came before.
While some of these costs have to be built into the price, where the customisation is designed into a horizontal or vertical app the documentation is not for a single project but for any business within that category. It is something that adds value to the system provider’s IP and therefore the cost is not borne by any individual customer.
A great example of this can be seen with Creative Computing. In recent years we have invested enormously in sector focused applications and documentation. This has transformed the experience for our customers but in a way that minimises their up-front costs.
Another dimension of this change has occurred within the code itself. In more recent versions of Dynamics 365 Business Central, Microsoft has transitioned away from C/AL to AL – a new language based on Visual Studio Code that’s considered more modern and better aligned with industry standards.
Visual Studio Code is a widely used code editor that provides a more intuitive development environment, as well as better integration with modern development aids, such as source code control systems (like Git), debugging tools and a wide range of extensions. This enhances the development experience and allows developers to leverage a rich ecosystem of extensions and plugins.
The AL language is designed to be more intuitive and aligned to modern programming languages. It follows a more standardised syntax, making it easier for developers to understand and write code. AL is also more consistent with the syntax of other programming languages, which helps developers who have experience with different technologies.
AL code tends to be more readable and concise, and the language includes modern programming constructs that make it easier to express logic in a clear and straightforward manner. This can lead to more maintenance-friendly code and easier collaboration among developers.
AL is designed around the concept of extensions, allowing developers to add or modify functionality without directly changing the base application code. This promotes a modular and extensible architecture, making it easier to manage customisations and updates.
AL includes improved error handling mechanisms, providing developers with better tools for identifying and addressing issues in their code. This can lead to faster development cycles and more robust applications. AL supports the creation and consumption of web services and APIs more seamlessly. This is crucial in modern applications where integration with other systems and services is common. AL supports containerisation and deployment through Docker, which aligns with modern DevOps practices, making it easier to manage and deploy applications in different environments.
Microsoft’s long term strategy is towards a cloud-first, mobile-first world. AL aligns better with this vision, supporting cloud-based deployments and accommodating the evolving needs of any business.
The creation of the app layer has meant Dynamics system providers need only upgrade their apps, rather than editing the core solution itself, which is continually maintained and updated within the confines of the cloud platform. This allows Microsoft to drive innovation across the entire cloud base simultaneously.
Less cost and fuss. More innovation and value.
Finding great developers for the cloud platforms remains a challenge. A large proportion of expertise continues to be held in a small number of brilliant brains, and these developers know how to leverage their value.
Ambitious system providers are investing significantly in building their teams, and many are now looking at apprenticeship schemes as a way of nurturing talent in-house.
Training is far more readily available. There is a wealth of online resources for training developers, and much of it is interactive or video based.
The greatest change, however, is occurring with the code itself. Low code / no code initiatives within the software platforms are slowly broadening the array of people who can contribute. The need for a solution architect developer will remain, but there is hope that the overall resource pool can expand significantly in the years ahead.
Take Power BI, for instance – not so long ago companies would have to go to their solution provider every time they wanted a report producing. But now Power BI makes it easy for non-coders to create a huge range of reports and dashboard, reducing the workload of the developers and empowering the end users to exploit their own data.
So while for now development talent remains a scarce and expensive resource, better training resources combined with low code / no code solutions, mean that the #1 bottleneck to better development may soon become unblocked.
LLMs like ChatGPT have given developers an incredibly exciting new tool to produce code at scale, faster than they would have ever imagined possible. And this year Microsoft launched Copilot; their own Large Language Model powered chatbot.
It’s important to remember, however, that a tool is only as useful as the person wielding it. You need someone at the helm that not only understands the problems being solved at strategically, but also knows what good looks like in terms of code.
Place ChatGPT in the hands of a bad developer and you should expect bad outcomes. Only faster. And when things go wrong – which they will – the poor individual will have no idea how to identify the problem source, let alone rectify it.
On the other hand, place ChatGPT in the hands of someone who has a clear sense of the objectives, understands the desired user experience, and can identify any flaws in the code produced, and you are looking at the most powerful and valuable Dynamics developer that has ever existed.
Alongside quality, the other big question is about the ownership of IP. An issue that will only be tested and addressed in the fullness of time.
Copilot utilizes the Microsoft Prometheus model, which was built on top of OpenAI’s GPT-4 foundational large language model, which in turn has been fine-tuned using both supervised and reinforcement learning techniques. Copilot’s conversational interface style resembles that of ChatGPT. Copilot is able to cite sources, create poems and songs, and use its Image Creator to generate images based on text prompts. It is able to understand and communicate in numerous languages and dialects.
Whilst low code / no code platforms are already with us, it’s fair to say we’re right at the beginning of that journey. With every year that passes the complexity of traditional coding is chipped away, with the addition of visual interfaces, drag and drop components and pre-built templates. This can significantly reduce the learning curve for new developers, and even open up possibilities for non-developers.
For now, there remain lots of applications and scenarios where low code options don’t exist, and so the value of skilled developers remains high. But there is no question that this is a paradigm only moving in one direction.
Any development team is just a product of the people within it, so how do you spot talent and differentiate between good and great?
This part is more straightforward. Of course great coders understand their worth and expect to be paid the fair market rate for their expertise, but beyond that it’s very simple.
Great coders want to work on great projects.
If you want to retain your top talent for all the challenges and opportunities ahead, you need to ensure they are working on projects that really get them excited. Forget the repetitive upgrades, they want to drive the development of an ambitious new app that has the potential to transform the way a business function operates. And they want to do it with other world class developers, just like them.
The world of finance systems and the code that fuels them has transformed over the years. And it’s likely that the greatest changes of all are still ahead of us, with the true impact of AI and machine learning only now being felt.
That said, certain fundamentals have remained constant, and it’s only by identifying these principles that you can ensure your development team continue to excel, no matter what changes or challenges lay ahead:
A robust approach to documentation – this has always been a critical factor in determining the long term success of a project. You must be clear about the deliverables and the needs they’re fulfilling. Poor documentation was destructive a decade ago, it’s destructive today, and it will be in the future. So unless you detail what you’re going to do, how you’ll do it and why you’re going to do it, you should expect disappointing outcomes.
The user experience comes first – it’s always been crucial and continues to be that the way the customer uses the system is more important than the way the developer builds it. It doesn’t matter how technically gifted a coder is, if they don’t put themselves in the shoes of the end user, the outcome will fall short.
Tying things back to the key success criteria of the business – when we’re elbow deep in code it’s easy to forget why we’re engaging in this project and how it will drive a commercial return to the business. The systems that deliver the greatest value are those that most clearly define the success criteria in advance, and commit to thorough scoping and technical design at the outset.
Solution providers that combine these user and organisational considerations, with a deep insight into the technological possibilities of the day, have been and always will be a profoundly valuable partner to any organisation.