I have put a lot of effort into becoming proficient with C++ of recent. One of the ways to become confident is to build applications. I decided to write a program to simulate the ATM. Users would be able to withdraw money, deposit, transfer to another customer and check account details. I thought it would be easy but it turns out, it is actually not that easy if you don’t plan it all from the beginning. That’s the most important lesson I have learnt from this. There is a need to have a very clearly defined end-goal and if possible design everything from the beginning with this in mind, top-down. I realized I didn’t have this as I was building. I was still making decisions on what functions to write and how to use them. Part of this has to do with a lack of familiarity with using sqlite3 with C++ (is that really an excuse? ) . I know that next time, I would have to do a lot more design before I code.