RIP @simple. Here's a walk down memory lane. The fintech technology edition...
Context note. This 2010+ architecture. You probably don’t want to copy it today. A lot of the principles remain but the choice technologies have shifted. So beware. Also, I haven’t worked @simple for years, so some of this is probably outdated.
Simple ran on @awscloud. We started building in the cloud pre-VPC when dinosaurs roamed the earth. We built a bespoke IaC system called CloudBank. It worked. Mostly.
We moved the backend to a monorepo a few years in. Almost all backend code was @scala_lang. Source control on a self-hosted @github enterprise instance. Build was Jenkins + Maven. Not the best monorepo stack.
We had a service oriented architecture. A “service” was a few EC2 instances and a dedicated @postgresql database. These all lived in a walled garden VPC. I’ll talk more about services shortly.
The service instance stack was @scala_lang and Dropwizard. Thanks @coda. Pure REST APIs.
Authnz was handled externally but all service-to-service/database chatter was x509 cert secured.
Service discovery was through DNS. Kind of janky but worked for the most part. It's always DNS.
Ok, so the fun part: services. Naming services was a bone of contention among the team. Not quite as controversial as the great IRC to @slack move but controversial none the less.
The primary concern was that the service names are not self evident to what the service actually does. For me, it’s now the most endearing part of the system, so that’s what I’m going to focus on.
Also, most every service also had a startup ASCII banner. I’ve collected those where I could and linked to them.
Aperture:
The authenticated proxy service for all backend requests. https://gist.github.com/jarreds/64d85ec045a2c7768f6e7d3a0671c21e
The authenticated proxy service for all backend requests. https://gist.github.com/jarreds/64d85ec045a2c7768f6e7d3a0671c21e
Arroway:
Handles customer-to-customer contacts, transfers, and a never released feature called MoneyDrop. Like AirDrop but for money. https://gist.github.com/jarreds/24b288df366e37c17fa6b8b9cceebd8a
Handles customer-to-customer contacts, transfers, and a never released feature called MoneyDrop. Like AirDrop but for money. https://gist.github.com/jarreds/24b288df366e37c17fa6b8b9cceebd8a
Beam:
Communicated with The Bancorp Bank to keep systems-of-record in sync. We owned the SoR in this case. They had a SOAP API called CorpConnect which we lovingly wrote a SOAP client for called CorpseConnect. https://gist.github.com/jarreds/c1410eace18447cf6ef12d5e95a36d68
Communicated with The Bancorp Bank to keep systems-of-record in sync. We owned the SoR in this case. They had a SOAP API called CorpConnect which we lovingly wrote a SOAP client for called CorpseConnect. https://gist.github.com/jarreds/c1410eace18447cf6ef12d5e95a36d68
Botton:
Mobile device push tokens and notifications. https://gist.github.com/jarreds/2c437eec7064342a30013398a490b295
Mobile device push tokens and notifications. https://gist.github.com/jarreds/2c437eec7064342a30013398a490b295
Buckingham:
An accounting service. Implemented an append only ledger. Kept track of transactions and balances for a long time. https://gist.github.com/jarreds/19ca75481e107e9cf99703ebb8790136
An accounting service. Implemented an append only ledger. Kept track of transactions and balances for a long time. https://gist.github.com/jarreds/19ca75481e107e9cf99703ebb8790136
Capers (previously Obelisk):
A bill payment service. Integrated with FiServ.
A bill payment service. Integrated with FiServ.
Carmel
The user service. Passwords (bcrypt), customer metadata, and a hodgepodge of stuff. Maybe the oldest service? https://gist.github.com/jarreds/6c1e4bbc270e06348f5e0e3939c32753
The user service. Passwords (bcrypt), customer metadata, and a hodgepodge of stuff. Maybe the oldest service? https://gist.github.com/jarreds/6c1e4bbc270e06348f5e0e3939c32753
Cartesian
Account, balances, transactions, etc proxy service for parent bank. https://gist.github.com/jarreds/1fbd18ae0c4d0c872641796c246c0fbc
Account, balances, transactions, etc proxy service for parent bank. https://gist.github.com/jarreds/1fbd18ae0c4d0c872641796c246c0fbc
Cheddar:
Manages goals (envelope budgeting) and the accounting for that.
Manages goals (envelope budgeting) and the accounting for that.
Clownshoes
Remote deposit capture. Taking pictures of checks. Good times. https://gist.github.com/jarreds/554b125853d2133f2ced5610bbec0719
Remote deposit capture. Taking pictures of checks. Good times. https://gist.github.com/jarreds/554b125853d2133f2ced5610bbec0719
Corndog (originally Corndoge):
Recon service that did lots of SFTP file processing. Corndog is an anagram of recon if you squint right. Not the only recon system. Recon is *very* important if you’r a fintech. https://gist.github.com/jarreds/1ee9ccd73556a053d3481b4c5044b4e9
Recon service that did lots of SFTP file processing. Corndog is an anagram of recon if you squint right. Not the only recon system. Recon is *very* important if you’r a fintech. https://gist.github.com/jarreds/1ee9ccd73556a053d3481b4c5044b4e9
Cryptkeeper:
A tokenization service. Encrypts + tokenizes PII and other secure data. https://gist.github.com/jarreds/a635b7204c1e65adaa68216c138a4d0f
A tokenization service. Encrypts + tokenizes PII and other secure data. https://gist.github.com/jarreds/a635b7204c1e65adaa68216c138a4d0f
Demux:
Kafka + PostgreSQL logical replication demultiplexer.
Kafka + PostgreSQL logical replication demultiplexer.
Hindenburg (aka Memento):
Moments activity feed and transaction meta data enrichment service. https://gist.github.com/jarreds/9c8c522ce76fd7c111e8548ca89f70e5
Moments activity feed and transaction meta data enrichment service. https://gist.github.com/jarreds/9c8c522ce76fd7c111e8548ca89f70e5
Hummingbird & MechaHummingbird:
Support messaging. https://gist.github.com/jarreds/56350ec8e80cb6b900a3e20ea7e99248
Support messaging. https://gist.github.com/jarreds/56350ec8e80cb6b900a3e20ea7e99248
Hundi:
Check ordering service. Yes, paper checks. https://gist.github.com/jarreds/e7e205175788035678b594b5da175abc
Check ordering service. Yes, paper checks. https://gist.github.com/jarreds/e7e205175788035678b594b5da175abc
Kumquat:
Bridge to FDC through IBM WebSphere MQ using OpenDataStreams (ODS, sometimes called "odius"). https://gist.github.com/jarreds/0d5a4284fddd7f3cc93f6802cfa14fbd
Bridge to FDC through IBM WebSphere MQ using OpenDataStreams (ODS, sometimes called "odius"). https://gist.github.com/jarreds/0d5a4284fddd7f3cc93f6802cfa14fbd
Manfried:
Card, EMV, PIN management. https://gist.github.com/jarreds/e1fbd112176e7b5c8503169eda71c1b6
Card, EMV, PIN management. https://gist.github.com/jarreds/e1fbd112176e7b5c8503169eda71c1b6
Multipass:
Identity verification (IDV) service.
Identity verification (IDV) service.
Mux:
Finite state machine driven materialized views as a service.
Finite state machine driven materialized views as a service.
Pantry:
@plaid integrations. Note: https://www.plaidpantry.com — a local chain of convenience stores. https://gist.github.com/jarreds/7f648271ede67cc60b13b2e651e19268
@plaid integrations. Note: https://www.plaidpantry.com — a local chain of convenience stores. https://gist.github.com/jarreds/7f648271ede67cc60b13b2e651e19268
Peanuts:
Supports the merry-go-round insights. https://gist.github.com/jarreds/b901a31d19dba4c42f708dddb2a9dc11
Supports the merry-go-round insights. https://gist.github.com/jarreds/b901a31d19dba4c42f708dddb2a9dc11
Poseidon:
The ISO 8583 communication service ("CPU link") communicating with First Data. https://gist.github.com/jarreds/92099b211dfe3f2f0384a197a5f7cc48
The ISO 8583 communication service ("CPU link") communicating with First Data. https://gist.github.com/jarreds/92099b211dfe3f2f0384a197a5f7cc48
Sails:
Obviously a @salesforce integration service. https://gist.github.com/jarreds/8a41f0882ef2c7ca8b27e6f2cca95c62
Obviously a @salesforce integration service. https://gist.github.com/jarreds/8a41f0882ef2c7ca8b27e6f2cca95c62
Seegull:
Sends and verifies SMS pins (a poor MFA) via the @twilio. https://gist.github.com/jarreds/c3f16bb24464224181b6b16831ec76a5
Sends and verifies SMS pins (a poor MFA) via the @twilio. https://gist.github.com/jarreds/c3f16bb24464224181b6b16831ec76a5
Semisonic:
I honestly don’t remember :(
I honestly don’t remember :(
Sippy:
Customer and identity verification via @socure @IDology plus a cool rules engine. https://gist.github.com/jarreds/5ccc9e5e21ebd29c1f2e79bf1a60220e
Customer and identity verification via @socure @IDology plus a cool rules engine. https://gist.github.com/jarreds/5ccc9e5e21ebd29c1f2e79bf1a60220e
Skyliner:
Previous activity feed service. Not ironically replaced by Hindenburg. https://gist.github.com/jarreds/481c1defd18e453f43e2fd5ab40371d3
Previous activity feed service. Not ironically replaced by Hindenburg. https://gist.github.com/jarreds/481c1defd18e453f43e2fd5ab40371d3
Testbed:
A shell service for experiments. https://gist.github.com/jarreds/6df6bdcabde3805b385c33e4e9541ed9
A shell service for experiments. https://gist.github.com/jarreds/6df6bdcabde3805b385c33e4e9541ed9
Tonic:
Another Salesforce synchronization service. https://gist.github.com/jarreds/00a7300123868b09c9e2a5a793d764bf
Another Salesforce synchronization service. https://gist.github.com/jarreds/00a7300123868b09c9e2a5a793d764bf