osteel's blog Web development resources

A crypto activity tracking tool. Introduction: why?

Been here before?

You can also subscribe to the RSS or Atom feed, or follow me on Twitter.

A transparent whiteboard

Photo by Kvalifik on Unsplash

Anyone following me on Twitter is well aware of my interest in crypto. I find it a fascinating topic with ramifications that I believe will change society in many ways.

But it doesn't matter if you agree with me or if you think it's all a big scam accelerating the destruction of the planet – this post isn't about crypto. Crypto just happens to serve as a backdrop for this project and series, which I'm starting for a few reasons.

Taxes

The first one is that, as I keep exploring the ever-expanding crypto-sphere, I'm performing all sorts of actions, some of which Her Majesty's Revenue and Customs (HMRC) has an interest in. I live in the UK and, like many other places, the government is grappling with this rapidly evolving field. It adds new rules and amends existing ones on a regular basis, to try and keep up with new practices.

While it's fairly easy to keep track of and compute a limited number of transactions, it becomes far more complicated when that number goes up (wait – isn't NGU supposed to be good?). There are lots of portfolio- and tax-tracking tools out there, but I couldn't find one that covers all my use cases or that reports numbers I can make sense of.

As I want to understand what's going on under the hood and as I need to know the rules to make informed decisions anyway, I figured I might as well build my own tool.

Technical exploration

The second reason for this series is that I realised this project has some interesting technical aspects to it:

  1. It's a good candidate for a console application, a topic I've been looking into and covering lately;

  2. It's sufficiently complex that it could use some advanced features typically provided by a framework. Laravel Zero has been on my radar for a while and this feels like a good opportunity to use it;

  3. I've recently been exposed to Event Sourcing, an approach where an application's state is stored as a sequence of events instead of keeping the current state only. Storing my crypto-activity this way could help me understand why the numbers are what they are and allow me to process the data in ways I haven't thought of yet (e.g. through new projections);

  4. Event Sourcing is considered a pattern of Domain-Driven Design (DDD), which involves talking to experts to come up with a model matching the business domain. I've got access to an accountant I can ask questions to and there's now plenty of literature available, which makes this approach possible for this project.

Build in public

Finally, the third reason I'm writing this series is that I've been interested in building in public for a while now. This approach is usually taken with an entrepreneurial mindset – advertise the product you're planning to build, document and share your progress, grow an audience and gather feedback along the way, and hopefully convert part of that audience to buyers when the product is finally available.

The main difference here is I've got nothing to sell. The tool will be open-source and people will be free to use it if they want to, although if they do it will be their responsibility to ensure the implemented rules are correct (by running the results through an accountant, for instance).

People joining me on this journey should come for the process first and foremost, and not so much for the outcome.

I am not an expert in DDD any more than I am an Event Sourcing guru. My aim here is to learn as much as possible on these topics by building, and to document my findings as I go. I hope to help others along the way, and maybe gather useful feedback if people care enough to chip in.

Since I haven't done anything yet, I don't know how many parts this series will comprise.

But as DDD commands, let us start with the domain.

Enjoying the content?

You can also subscribe to the RSS or Atom feed, or follow me on Twitter.

Last updated by osteel on :: [ ]

Comments