ERP Application (v2)

A real world application demonstrating a modern technology stack demonstrating core concepts in multiple frameworks. A restrospective based on a past engagement, technical upgrade, my take on fine tuning a commercial level product.


Currently, like many other people in the software engineering field, I am experiencing a not-so-brief period of unemployment. I am making the best use of my time, keeping existing skills sharp, and soaking up new ones like a sponge.

In my quest to find projects to work on in my downtime, I have really made an effort to find real world applications. The world does not need another twitter client, or crud application. During an earlier phase in my career I played a significant role in an effort to rewrite an legacy, DEC based, ERP system. This was no small effort. The technical options were limited as this was around early 2000. No HTTP fetch API, no REST, and state was managed on the server. We take a lot of that for granted these days, however there was a time when that was not available. I personally refer to it as the dark ages. A lot of time, effort, and determination went into the effort on everyone's part involved, however given technical limitations, and a lot of poor outsourcing decisions made this the stuff of nightmares, especially for me.

From this point forward, I will be affectionately referring to the original system as ’the beast’. A well deserved title, with an implied warning level.

Facing my past demons, proving I am crazy enough to do it twice….

I decided to launch an effort to perform a rewrite of major sections of the application. It’s a real domain model, one I am familiar with, and the current technologies available today make this a realistic opportunity.

If you are a potential employer, this is a great way to view how I would architect a system. Not the next great instagram or twitter clone, but a real world app. If you are a fellow engineer, then this is an opportunity to see something enterprise in action. Perhaps this may validate your current practices, offer something new to learn, spark a new through process.

Given the fact that this was performed for a past employer, I wanted to avoid giving away any IP so I have updated the industry space in which this lives to something entirely different, in this case we will be building a solution for an organization that manufactures orange juice.

Build it better

After watching usage patterns on a day in and day out basis, I identified a number of areas where we could have improved the user experience. This is hard to do for enterprise organizations as they tend to set budgets, and are not really motivated to keep pumping more dollars into things that ‘are currently working’.

I will be identifying a few of these areas, and detailing the reasoning behind my decisions.

Build it faster

Performance sucked, really sucked. The beast was built at a time where ORM technologies were gaining momentum, but there were not a lot of conversations around optimizing for performance. Large objects graphs were in play, granular fetch operations were used, and the N+1 issue really became an issue.

I will also detail out approaches for optimizing data retrieval.

I started this effort over a year ago, and am finally revisiting the project. I have been really focused on AI, and have been working hands-on with agent assisted development, which I will apply here. Not vibe coding, but using an agent (Claude) to reduce boilerplate tasks, with emphasis on the fact that in a real world deployment I would sign up to support the code base long term. I would actually sign up for dogfooding this.

The source code is available on GitHub (https://github.com/west-coast-matthew/) and lives in a series of projects, applying filters using ‘ERP’ as the prefix to isolate relevant projects. The ‘start here’ project will serve as your entry point.

Given the fact that this was performed for a past employer, I wanted to avoid giving away any IP, so I have updated the industry space in which this lives to a completely different industry.

This original effort started just over a year ago. At the time, I was not making real use of agent assisted development. I was skeptical of using Claude to generate code, and like many the phrase ‘vibe coding’ scares me. This particularly hits home as I entered a time during when the project was in full swing, a large amount of development was occurring across three different teams, and a lot of technical debt materialized as a result. A lot has changed since then, and I have spent a lot of time learning how to effectively make use of Claude.

Project Goals

  • Implement a real world application, using modern technologies
  • Demonstrate common patterns in application design, and implementations on several stacks in order to illustrate how they can be applied, to show how certain concepts are transferable
  • Optimize user experience in some key areas, demonstrate my vision of how workflow processes may be improved
  • Migrate a previous monolith project into a more service centric approach
  • Refactor elements of the the core domain model to provide a better approach for modeling inventory transactions and accounting.
  • Demonstrate my use of agent-assisted development

Related content for this project has been split across a series of articles, which you can navigate from the bottom of each page. Jump right in by moving on to the next section, or jump into any one of them in any order.