Before I talk about this dev log, lemme give you a backstory to understand what led me to start the project, and every other thing in-between.
Prelude
Between late August 2025 and early September 2025, I did some extensive research into the demand for developers in Nigeria (I'm based in Nigeria at the time of writing this article), what market demands for them the most and how much a person gets at the end of the year. The answer I got is fintech, so I went deeper into it.
Looking at the backend side of things in the fintech space, the languages that are dominant include Java and C# (and their respective ecosystems). Having a basic knowledge of Java, and seeing the annual pay of devs in the space (₦3M to ₦9M in Nigeria, $30K to $150K globally), I told myself, "Alright. Let's get into this!".
Now that's settled, let's get into the main business of today.
The Project And Today's Update
The project simply simulates the experience of using an ATM machine via CLI. I've learnt a couple of things so far which include JDBC, Domain Driven Design(DDD) basics, Data Access Objects(DAOs), some understanding of software architecture as a whole, and the parts of the Java Standard Library which makes it an excellent fit for the fintech industry.
I started the project two months ago, making inconsistently consistent changes to it as time went on. I stopped for a while because of exams but after that, I got back into it, alongside other things I am doing, and today, I managed to finish the first feature: Withdraw Cash.
Initially, I thought that this is something that is going to be done within a short period of time, but it took longer than expected, and for good reason. On the surface level, 'Withdraw Cash' is a one-line SQL command to change the customer's account balance, but it transformed into a combination of checks, constraints and conditions working together to perform a specific task, and the logic has to be right. After all, na money matter be this!.
Just to illustrate how important it is to get it right, there are two images below that shows the impact of a single, small mistake I made when creating the withdrawCash function. 
In this image, it shows a successfully transaction process, withdrawing $200 from the balance, and printing out the new balance being $4800.
But in here, the balance shown is the amount withdrawn previously.
How?!
This is what happened:
Instead of passing the new balance to the query(abstracted within a class) to make the change in the DB,
 double tempAmount = account.getBalance() - amount;
 boolean isTransactionSuccessful = AccountDAO.changeBalance(account.getId(), account.getAccountType(), tempAmount);
I passed the amount to be withdrawn.
 double tempAmount = account.getBalance() - amount;
 boolean isTransactionSuccessful = AccountDAO.changeBalance(account.getId(), account.getAccountType(), amount);
And that's how a variable misplacement can cause a company to lose billions of dollars at a stretch.
It's a very scary thing and no one wants that to happen, but we prevent stuff like this from happening by writing tests. They help to conduct checks on individual parts of our codebase to ensure that they are working properly.
So yeah, that's it for today. I'll be making more dev logs like this on the things I'm learning and building, so If you want to stay tuned for more stuff like this, make sure to smash the Follow button on your screen.
Until the next commit, bye 👋


    
Top comments (0)