Up in the cloud… it’s a bird, it’s a plane… it’s a Platform
One of the common questions I face in explaining what I build is, well, “What exactly is it?” Some people only see the kiosk. Some people think of it as a traditional financial system. What people don’t see is the Platform, and it is built to not be seen.
When we started this, I considered building our system on a traditional platform: J2EE. Having worked with it before, I knew that it would provide a lot of the basic needs our systems required such as threading, lifecycle management, request dispatching, etc. I even built an initial rudimentary server using JBoss… but was soon struggling with the vastness of the APIs and the overhead of the application server itself. What I needed was a platform tailored for fast transactionality, easy scalability, very high availability, and a simple API. So I created one.
Now, 3+ years later, we have a mature base upon which we build our services and product offerings. Our platform is tailored for processing financial transactions in a secure environment and designed for massive scale with “five nines” availability. In addition, we are constantly improving the architecture – thinning the transactional layer for lower latency, decoupling systems for better reliability and more flexibility, simplifying and partitioning the database for easier management and improved usage… and more! And as cool stuff happens, I’ll write about it here!
Of course, the platform – cool as it is – is really just the foundation of our products. We also have developed a set of services which can manage millions of individual users in a multi-tenant environment accessing a plethora of product services. Users can identify themselves to the system using a variety of identification and authorization methods, including biometrics, and securely access their personal information and perform secure financial transactions. Furthermore, the system manages a network of end terminals which access these services, and is able to deliver, add, and remove new services to the terminals “over the air”. To this end, we’ve created terminal client software which runs on a self-service financial transaction machine (a kiosk) which interacts with the user via an intuitive touch screen-based GUI and various devices such as card readers and cash dispensers. The terminal software is extremely flexible and can take delivery of new product services (screens, logic, and data) on-the-fly without on-site interaction. In addition, the terminal software is designed to be “hardware agnostic” – i.e. the core is not tied to any particular hardware or operating system or device.
So, that, is my system in a nutshell. Future posts in this series will dive deeper into these aspects as well as some interesting techniques and solutions we used to build it all. Let me know if you are curious about anything in particular, and I’ll try to write about it!