At Thinslices, we are developers and craftsmen and we don't like to create waste. We want to create value. For us, that means building efficient software that takes into consideration the constraints of our clients: limited budgets, faster time to market, quality foundations to build upon.
After many projects, we started to see a pattern. Most applications in the same industry cluster had a common set of features, such as user management, payments, or inventory management.
When we looked more closely, another pattern emerged in the way we worked. For most of these projects, we were using the same set of practices regarding security, scalability, fault-tolerance, UI and UX.
This is how Ivory started, as a way to make these patterns work for us and for our clients. For the software craftsmen who built Ivory, it is their way to make the world of software applications a better place.
The need for Ivory
“The ratio of time spent reading versus writing code is well over 10 to 1. We are constantly reading old code as part of the effort to write new code.”
Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship
Uncle Bob, as he is colloquially known, perfectly describes the main activity of a developer i.e. reading code, but there is more to this story. In our experience, developers spend a good amount of time wiring together different technologies into a coherent architecture and this happens especially when working with new technologies.
So, if developers spend most of their time reading code or wiring together different technologies, when do they have time to implement the features that the business needs? A lot of time and money is wasted on aspects that can be automated and abstracted.
This is the problem that Ivory is trying to solve. It takes the latest technologies and common use cases and creates generic, ready-to-use components so that developers can focus on the features that bring the most business value and provide a competitive edge.
Defining Ivory’s value proposition
The early days were a little bit chaotic. We were doing research & development but, at the same time, we were testing the waters to see if we could build a spin-off product or company around it. The split focus made it even more difficult to define Ivory but it offered some valuable insight in the long run.
We started by playing with ideas of micro-frontends, microservices, and serverless to try and define the features of Ivory. The challenge we set for ourselves was to develop and deliver software with the following constraints in mind:
- Short development iterations and fast time to market,
- Reduced costs with infrastructure and IT operations,
- Security, fault-tolerance, high-availability, scalability,
- A good foundation to build on, based on best practices like IaC, CI/CD pipelines, design patterns, UI theming, and responsiveness.
Creating the Ivory architecture
We looked at what were some of the latest technologies and best practices we could use to create an Ivory component, which is at the core of the framework.
A component encapsulates UI & Business Logic and can be reused, composed and developed independently from other components. It’s the main method for delivering features. To glue everything together we created an Ivory CLI and Web Builder to create apps using Ivory components.
Ivory is a highly opinionated framework. It has an opinion on what technologies it’s using, on what programming languages it’s using, on how it wants to deploy, and how a UI/UX experience would unfold.
The framework is designed for business efficiency so it uses the best and most popular technologies on the market and puts them together in such a way that development teams can deliver more business value faster to their customers.
Next steps for Ivory
We recently launched the first version of Ivory.io.
npm install ivory and in less then 30 minutes you can create a fully-functional single-page web application built with React, with an AWS Amplify serverless (Dynamo and Lambda) backend, a fully-configured build pipeline and user acceptance tests; all provisioned with infrastructure as code.