Sponsor: Do you build complex software systems? See how NServiceBus makes it easier to design, build, and manage software systems that use message queues to achieve loose coupling. Get started for free.
If you’re creating a line of business or enterprise-type software, I think one of the most valuable skills you can have isn’t technical. Rather it’s understanding how the business domain you are in works. One way is following how money flows through a system by having a fintech mindset.
Check out my YouTube channel, where I post all kinds of content accompanying my posts, including this video showing everything in this post.
Revenue & Cost
I was on the Azure Devops Podcast, where I mentioned that a big influence on my career was working with an Accountant. No surprise, this has affected how I look at a line of business and enterprise-type systems, how they can be decomposed, and how money flows through the system.
At a high level, I’m thinking about Revenue and Cost.
For context, I’m going to talk about project-based work to illustrate.
How does the company generate revenue? How does the software system we are building fit into how the company generates revenue?
How does the company incur costs to generate that revenue? How do we keep track of that in the system, similar to how we generate revenue.
We generally have customers, sales, and invoicing on the revenue side.
There is some type of sales process involved with a CRM that ultimately leads us to a sale and invoice a customer to get paid.
On the cost side, we may have employees with a salary or work per hour. We pay them at some interval (weekly, bi-weekly, monthly) based on their salary or hours worked (timesheet).
Other costs can occur, such as materials or services from outside vendors. We will create purchase orders and get receipts.
Follow the Money
When thinking about decomposing a system and understanding a domain, I help to follow the money. This can lead to understanding the workflows and processes that generate revenue and cost.
In the case of project base work, the heart is in the execution. The actual project. There are many ways to “sell” a project, such as Time & Materials, Fixed Price, etc. The same goes for costs, some employees might be Salary (fixed) some may be hourly.
Regardless, the point is the execution of the project is where the complexity lies. This is likely to be the heart of the system you’re building.
For example, if you’ve worked on a software project before or done any project management, you can relate that this is the heart of complexity.
So if you were writing a system to manage the full lifecycle of project-based work, the execution of the project would be the core. Many boundaries would act purely in a supporting role, such as CRM, Employee, Payroll, Vendors, and Invoicing. You don’t necessarily need to write your own; this is usually pretty generic, and you can buy it off the shelf or software as a service.
And this makes sense because you’re not about to write a CRM or Accounting system. You can integrate with those to push/pull the relevant data required.
On the other hand, Timesheets, Sales, and Purchasing may be something you choose to write because there isn’t anything specific enough for the context/niche of what you’re building.
I’ve written software for Distribution, Accounting, Manufacturing, and various forms of Transportation, and they have all of this in common. Have a fintech mindset by understanding revenue and costs and how each is made.
Here’s a screenshot of QuickBooks, an accounting system typically used for small businesses. It gives a good example of how everything is related and how money flows.
In writing line of business and enterprise type systems, I’ve always found the best developers are the ones that have equally great technical development ability as well as domain knowledge. Having a fintech mindset and understanding how money flows helps.
Developer-level members of my YouTube channel or Patreon get access to a private Discord server to chat with other developers about Software Architecture and Design and access to source code for any working demo application I post on my blog or YouTube. Check out the YouTube Membership or Patreon for more info.