When talking about his work, Steve Jobs often cited the quote “good artists copy, great artists steal” which he attributed to Pablo Picasso.
This rings particularly true for an open-source project like myActivo.
I could not have put this piece of software together if I was not relying on other great projects.
Remember the ladder of abstraction concept?, well, this is it in action. I will use other people’s work as building blocks in my project.
In this article I describe the software stack of technologies and frameworks I am using to implement myActivo.
Like many things in our modern world, I have many options that I could use to implement a feature.
From the User Interface (UI) to the backend systems, there are many frameworks available that could be potential fits.
My challenge is then to select the elements that give the project the best balance of flexibility and convenience.
I will run through each element of the architecture and describe what tool I am using (if any) and why.
User Interface
Whilst all the components of a software project are important, the User Interface has prominent role to play. The UI has probably the most substantial impact on the User Experience.
A well-designed and pleasant-to-use software will have better chances to be adopted by a larger number of users.
I expect that users of myActivo would like to interact with it on different platforms, like web, mobile and desktop. Early on I made the decision that I would first implement myActivo as a web application. I think this will give the project the greatest exposure and lowest friction for new users.
According to the 2021 Stackoverflow Developer Survey, the top five frameworks to develop web applications are React.js, jQuery, Express, Angular and Vue.js.
I have been developing web apps with Vue.js over the past few years. I have been very pleased with the way that Vue structures the development of components and functionality for the UI.
Vue provides the core UI functionality with routing, state management, component-based development and reactivity.
Next, we need to consider how to provide a consistent visual style to the application. We need to define a layout and overall visual styles.
There are many options based in Vue that accomplish this, but the one that I particularly like is the Quasar Framework.
Quasar provides a very well developed framework of UI components to build applications. A particularly nice feature is its “all platforms in one go” aspect. Using Quasar I can deploy the application to web, mobile and desktop environments using a single source code base.
These two frameworks will be the foundation of the UI layer of the myActivo platform.
UI Components
Additionally, I will be using a number of smaller components that perform specific functions in the UI. I will keep a list of these components here as I go through the development process.
Project | Use |
---|---|
ShepherdJS | Great tool to create guided tours of the application. |
Vue.D3.tree | I use Vue D3 Tree visually represent and interact with hierarchical structures. |
Vuex-ORM | A great Object Relational Mapping plugin for Vuex. Provides a clean way to define and manipulate data models. |
VueUse | A great collection of composable utility functions that follow the “use<Function>” style. |
Backend
As per the architecture of this project, the backend will implement the core entities, use cases, controllers and API of the platform.
In other words, this part of the platform implements all aspects that do not have a direct interaction with the user.
Similarly to the front end (UI), there are plenty of choices to pick from when it comes to backend technologies.
The two main choices I have to make here are:
- What language and framework am I going to use to implement all this logic?
- What database technology will I use as the main persistence mechanism?
The first question is really two choices in one, the programming language and the associated framework.
There is a myriad of programming languages available, the ones I considered for this project are: C#, PHP, Go, Python and Ruby.
myActivo is targeted at managing physical assets which often belong to large corporations and enterprises. Given that these organisations tend to develop solutions using C#, I decided I would go with this as my main backend language.
I’m sufficiently comfortable with C# and have developed similar enterprise-grade solutions in this language in the past.
Given this choice of language, the natural choice of development platform is .NET (dotnet).
.NET is open source, cross-platform and provides a wide range of options when it comes to developing applications.
With regards to the second choice, the persistence mechanism, PostgreSQL is a good open source choice for this project. It is a robust and mature database technology with a wealth of documentation and battle-tested use cases.
PostgreSQL is also supported as a database provider by Entity Framework which is the database access technology of choice for .NET projects.
So there you have it, that is the technology stack that I will be using to build myActivo.