This weekend is an exciting one for several of our developers here at Hardin Design & Development. After 6 months of hard work, we’re launching version 7.7 of Visual Manager, a corporate real estate management platform we’ve been building for one of our clients, Fischer & Company based in Dallas, TX. Visual Manager allows real estate analysts to perform complicated data aggregation, data visualization, and business process automation for their clients, as well as offering a wealth of reporting capabilities.
This project grew from being a simple market study in its infancy to a complex web of interconnected systems over the years. This is a common trend with software projects; the scope of an application is simple or limited in the early days and grows far beyond what the original developers and analysts ever imagined. While trying to get to market, this will often result in a situation developers around the world can relate to: the continual accumulation of a technical debt as you try to build an application that can make sales or create revenue.
We’ve finally reached a point with Visual Manager where we know who we are and what we’re trying to do. With a clearly defined scope and time to address our technical debt, it was time to refactor! This offered us the opportunity to assess the direction we were headed as far as the choices of technologies, development environment, workflow, and procedures were concerned. We ended up making changes across the board.
Our first decision was to move towards building a single page app on the front end. This led us to building out a RESTful API using Laravel to support our backend processes and electing to use React and Redux for our front-end development. These technologies all offer numerous advantages and ease the process of separating concerns. We also switched to using local development with Vagrant and Puphpet, and have built out a process to integrate Vagrant with Amazon Web Services, allowing us to use the same technology stack whether we’re developing locally, staging releases, or putting up production code. Along with this we took the time to refactor our Data Model and integrate it within our API. The Data Model is the single most important aspect of our application and what all our analytical tools rely on to provide value. Improving this offered numerous advantages in speed, stability and scalability.
Laravel has proven to be a fantastic development experience, offering support out of the box for database migrations, routing, authentication, and a fully featured ORM in Eloquent. Database migrations make it easy to go from one version of the product to the next without forgetting to apply an update somewhere in the database, and to revert those changes if a mistake is made. Eloquent allows us to enforce relationships in the source code as well as in the database.
When evaluating modern front-end frameworks, we had a lot to consider. AngularJS has been a staple for several years now, while React has exploded in popularity and Polymer was an interesting choice offered by Google. While all these frameworks offer solutions to managing application state on the front-end, we elected to use React partly because of the way it encouraged reusable components, the speed it offered in rendering a UI compared to other frameworks, and the addition of Redux to the front-end stack. Redux offers all the advantages of the FLUX design pattern, with the added emphasis on immutability. The unidirectional flow of data and immutability of data make it very easy for a developer to understand how and why state changed the way it did.
With Vagrant helping us achieve an ideal workflow, a strong framework on which to build our RESTful API, and front end frameworks encouraging DRY (Don’t Repeat Yourself) methodology, as well as reusable components and sensible data flow, we can’t wait to get started on 8.0. These changes give us a strong foundation to build upon as we move forward.