API Intersection

This week on API Intersection podcast, we dive into the challenges of integrating with legacy systems, integrating a variety of third-party systems, building diverse APIs, and how to manage different levels of sophistication between African banks and mobile network providers. We interviewed Chris Turner, Senior Software Engineer and Agile Practitioner at Segovia Technology, a Crown Agents Bank. Crown Agents Bank uses computer systems and APIs to move money between countries, particularly in Africa.

With his current role, Chris emphasizes that he could very well be working with one organization or agency with a modernized, high-technology stack that needs to integrate with an organization whose main form of technology is an array of spreadsheets.

There is a level of complexity and nuances involved in working with APIs across different domains and industries, particularly in the context of Crown Agents Bank's mission to facilitate cross-border money transfers. With such a stark variety of diverse integration partners and the complexity of their APIs, building a standardized API program is all the more critical.

Check out Chris's work at software.skipoles.co.uk
_____
To subscribe to the podcast, visit https://stoplight.io/podcast

--- API Intersection Podcast listeners are invited to sign up for Stoplight and save up to $650! Use code INTERSECTION10 to get 10% off a new subscription to Stoplight Platform Starter or Pro.

Offer good for annual or monthly payment option for first-time subscribers. 10% off an annual plan ($650 savings for Pro and $94.80 for Starter) or 10% off your first month ($9.99 for Starter and $39 for Pro).

What is API Intersection?

Building a successful API requires more than just coding.

It starts with collaborative design, focuses on creating a great developer experience, and ends with getting your company on board, maintaining consistency, and maximizing your API’s profitability.

In the API Intersection, you’ll learn from experienced API practitioners who transformed their organizations, and get tangible advice to build quality APIs with collaborative API-first design.

Jason Harmon brings over a decade of industry-recognized REST API experience to discuss topics around API design, governance, identity/auth versioning, and more.

They’ll answer listener questions, and discuss best practices on API design (definition, modeling, grammar), Governance (multi-team design, reviewing new API’s), Platform Transformation (culture, internal education, versioning) and more.

They’ll also chat with experienced API practitioners from a wide array of industries to draw out practical takeaways and insights you can use.

Have a question for the podcast? DM us or tag us on Twitter at @stoplightio.

Every place you come across as a different
way of doing it and is definitely that.

If you have specific rules or principles
and you try to apply them,

they probably work.

The first time you build the software
because it's nice and clean.

But then as soon as you

then try and expand the software,
maintain the software, add

new features into the software,
you get into this horrible world of do I

do I break the principles
to achieve what I want to do?

Or do I spend much longer
ripping everything apart

to insert the new stuff and maintain
the principles again.

I'm Jason Harmon
and this is API intersection

where you'll get insights from experienced
API practitioners to learn best

practices on things like API design,

governance, identity, versioning and more.

Welcome back to API Intersection.

So I'm not going to say the thing.

I would say
that we're going to do something different

because it's always different, right?

It's I'm reminded every day lately
that APIs are everywhere now.

I mean, if you can touch something,
there's probably an API for it.

You just haven't turned it on yet.

So from the UK,

joining me today is Chris Turner,
who's actually writes code for a living,

which I have to point out
is somewhat unusual for our guest.

So, Chris, thanks for joining.

And tell us a little bit about yourself.

Hi, I'm really glad to be here.

So, yeah, I'm
I'm a software engineer in the UK and I'm

still 25 years into my career.

I still my main goal is writing code.

I love writing code and designing systems
and works across a range of domains

from everything
from sort of travel reservation,

telecoms, media, e-commerce.

GreenTech But currently I am working for

a really niche UK bank called Crown Agents
Bank, and we're sort of a

a specialist bank
that's very specialized in moving money

in between countries, particularly
moving money from the developed world

into developing countries,
particularly in Africa,

and using sort of computer systems
and joining up all the APIs

in the various systems
to actually make those these payments

into countries where that money
really makes a difference.

Yeah, that's super interesting.

And, you know, I couldn't help but notice
on your profile,

you've been working on this API stuff
for quite some time

and, you know, it's like I was saying,
they're everywhere now.

So yeah, you end up
learning a lot of different things.

I guess when you look back at all
these different domains,

all these different kind of industries,

where does that kind

of take in your thinking
when now you're in fintech and banking,

which I have some experience with,
and it's pretty different, but

do you feel like there are sort of
portable things from that that you're now

more focused on and implementing this?

Yeah, definitely.

I think over the years I've been through,
again, all the all the standard things

like the journey through
so and all of those things and

still see this thing

that everyone sort of
kind of like creates their own API.

And each API is subtly different
to every other API, which is always makes

a, a fun integration challenge
and particularly sort of

what we're doing at Crown Banks.

We've got lots of legacy
banking systems, modern banking systems,

and we're also offering
integrating into banks and mobile

network providers in Africa,
which have again, a variety

of different levels
of sophistication on their APIs.

And just looking at that got
we think started to get us thinking around

how can we
how can we try and create a common view

of all those APIs without trying

to aggregate them all together,
because that's never going to happen.

We've just got such a diversity
and might spirits have years.

We've shown that it's
sort of try to create generic APIs

is never really worked.

I've always found that
what you end up with

is either a horrible giant mess,
which is really difficult

to deal with or something
which is like the worst of all worlds.

So what we started to look at is let's,

let's try and focus these APIs around

particular domains
and then use some sort of

the software engineering techniques
that we use to build good software

and see how we can apply them into
that world of APIs that we're building.

Yeah, it's interesting because I feel like

when I look at the
you mentioned like aggregation

and the idea that you can come up with
like the perfect API for a given vertical,

you know, I'm old enough
and I guess you probably asked you

to remember
like the days of Oasis and Soap, right?

And we saw these industry
groups get together and say, Well,

let's all agree

between all these different huge companies
as to what the specs should be.

And by the time they're done,
no one wants to use it because it's like,

you know, 50,000 fields to do anything.

But it's interesting to see these days
there's more

and more of these kind of aggregation
platforms

that are trying to make it easier
and that sort of thing.

But I'm kind of with you.

It seems like a fleeting goal
that is diminishing returns over time.

Yeah, I've definitely found
in particularly my previous dry work

settings of green tech energy,
and we were integrated

with a lot of energy APIs
and there were lots of developments

of standards for sort of grid management
and things like that.

But every new provider
that came in with something different

had a bit to add a bit to it
and you sort of end up with a core

and all these little extensions
that go off of their various profiles

and it actually becomes

such a big blob of stuff to try
and get your head around and implement.

It would have

it would have been so much easier
just to have half a dozen very simple APIs

that they understand ability
that I find would be a much greater.

So is easier to understand, easier
to build than trying to sort of create

something that requires

a massive amount of code
with lots of additional statements,

which is hard to test
and likely to have a lot more bugs in it.

Yes, it's an interesting facet
of what you're doing here

and having some prior experience
in fintech in my time at PayPal,

know, you know, one of the like American
perspective things that I learned was

the whole world
doesn't use credit cards to pay for stuff.

And certainly,
like I was more involved with Japan

but was aware of of Africa that like
mobile phone based payment is the way.

And so,

you know,

I would imagine connecting with all of
the different sort of telecom providers

and all that sort of stuff, which in that
market it's text based payment, right?

So super foreign
and seems like impossible to secure, but

so I'd imagine your your perspective
on consumption here is is somewhat

different too, which is partially the way
you're describing this problem.

Yeah. Yeah.

It's effectively

yeah every every single provider
that we potentially connect to has got a

that they're very similar because they're
all trying to do mobile payments of money

when we're moving sort of small amounts
into people's mobile accounts,

but they all do it
in a slightly different way.

And we, we, we still got some customers,
some providers that we integrate to

where are still using portals

and we actually have to web scraped them
so they're not even on the API.

I think they're
Yeah but but a lot of them are APIs but

there are lots of sort of an Excel
based APIs, I think.

So that and they're,

they're all very subtly different
in terms of exact ideas

and how they represent
sort of particular data.

So it's kind of quite hard to aggregate
all of those into a common approach.

So we do tend to end up with a core
but sort of specific

implementations
for each sort of each provider

that we're actually
connecting to for that.

Yeah,
and connecting with that many providers.

I mean, beyond I guess, you know,
I would venture to guess you've got sort

of an internal representation
of how to aggregate those things

that, you know,
you only use for your own implementation.

But how do you look at sort
of the resilience of having to connect

all those different things,
which I could imagine

in a developing market like Africa,
you might have things that go up and down

and they might be a little shakier
than in some other parts of the world.

Yeah, that's absolutely.

We have a, a lot of the core
implementation of us of our code is around

sort of strategies for dealing with sort
of retry mechanisms, back off mechanisms.

And we even have some providers
who, for example, we might have a

a single account
that we have to log in to.

So we can only make payments sequentially.

So therefore we've then got some back off
queuing mechanisms

and sort of a semaphores

in that we have to kind of create
that actually prevent access

at multiple payments.

Don't try and process that,
putting everything in queues.

So it's a whole sort of gambit
of different things that we have to

sort of think on top of rather than just
the protocol that we send as well.

It makes it fun.

Yeah, for sure.

I think you just won four new term

on API intersection Semaphore,
so congrats.

I don't think I've ever heard anyone
mention it before.

CSS people ACA stuff
most people forget about.

Yeah.

They call those core techniques are still
they're still out there.

There's still they are under the covers.

Absolutely.

So on all this kind of resiliency stuff,

are there specific
sort of tools that you know you've used

that have made this easier to deal with
in terms of, you know, all the back office

and all these things you're talking about,
or is this all bespoke?

There's a lot of bespoke stuff,
but quite a lot.

We use a framework.

So taking from sort of
like the world of domain driven design,

one of the sort of concepts in there
after you may have sort of

come across these courts and seek you.

RS Command clear
responsibility, segregation.

So in this area you're having effectively
a stream of events, which is your event

event source,

which is your source of truth
and your timeline, and then you from that

you process the events and create
various views and things.

So we kind of tend to make use of that.

So there's a particular framework,
excellent framework,

which is an implementation of that,
which is very good and it contains lots of

useful technology for like timing events,
setting retry events to trigger

at some point in the future so we can
sort of send off a message asynchronously.

Wait, and if it times out,
we can then schedule a retry event

to occur
at some point in the future to try again.

And we use that to also schedule
events around managing resources and

the back of that.

So kind of using that sort of that
old audit

trail of all the transaction history
through that, we can actually use that.

And then everything is

then an event coming back in to trigger
sort of the the next stage or the retry

or some kind of building
queuing mechanism to stack the up.

So it's sort of like a lot of bespoke,
but building on some standard core sort of

modeling practices that have been proven
over a number of years.

Yeah, I feel like that
it's a thing that always comes up.

I'll say though,
I feel like a lot of shops I've been in,

I see folks fail at trying it.

They get halfway
and it's sort of like crass or curious

or something
like it's, you know, kind of halfway done.

But the dream is always that, well,
we can replay this stuff in

in tests, right?

So have you realized the dream
and can you actually do

the replay of log kind of stuff in test?

We're getting we're getting closer.

We're not we're definitely not there yet,
but we are We're definitely at the point

where we can collect the event source
and we can replay the stream through.

But we probably still got
a little bit of work to actually do that.

And that the real challenge
is, is when with most of the systems

we're integrating.

So a lot of them are very unreliable
and unstable.

So they actually don't even have like test
instances that we can use.

So we can't replay those events
against live services.

And so a lot of the work we're working on
towards now is how can we actually create

a simulation of those services
that actually honors the same API contract

and then be able to replay the sequence
of events against the simulation

to test our software.

But then can we use the stream of events
then against the actual API to test

that their system is still behaving
in the way we expect it to.

So we've
definitely got a long way to go on that.

But it's it's going to be
a very good journey when we get there.

I think.

Well,
I'll say in our experience at a stoplight,

when we see folks
using marking like you're describing,

it's usually a good sign
of a level of maturity in approach.

It's not usually a thing.

People start with the kind of,
you know, learn about it over time.

So that's that's a good sign

On events.

I'm curious and I suppose this is valid
for the API side too.

Are you using sort of suspect formats
to describe these things?

Yeah, we again, we just released
wanting to get into proper

sort of API contracts
and things and enforcing those.

So for particularly
for our sort of our synchronous HTP stuff,

we're starting to get sort of open API
contracts properly drafted for all those

so that we've got sort of something
to validate and,

and creating them as well
for the third parties

that we're integrating
because most of them don't have that.

They have some,
some very flaky documentation quite often.

So actually trying to sort of
build some contracts for those as well.

Getting those PDFs
in your email. Apps, I mean,

you've got to love that way of working.

It'll never not exist.

It's always going to be a thing somewhere.

So open API for the synchronous stuff
on the event side,

are you using anything
in similar fashion for contract?

Not really at the moment,
so that's definitely

an interesting area to look at the most.

Fortunately, we're at the point where most
of the systems that we are integrating

with tend to be synchronous
and they tend to be fairly unstressed

excited and that we're polling them
because that's largely what they

they support.

And most of they are sort of converting

that sort of asynchronous events
happens within our own,

our own landscape
and our own microservices.

So we kind of largely in control of those,
but definitely

something we probably need to
look at a bit more is how we kind of

define those and contract
those events moving between the different

sort of the different bounded contexts
within our system.

Yeah, it's
it certainly seems to be a growing

trend of folks that are trying
a more event driven architecture.

And it's like in the same way
that you can kind of get this API sprawl

with the synchronous stuff where,
you know, you lose consistency as scale

goes up.

The same thing happens with events.

The upside being,
it seems to be predominantly

internally focused,
which it sounds like is your story here.

So I guess, you know,
we've been talking a lot

about all this stuff
you have to consume to operate,

but I guess if we shift back
to kind of that internal focus,

you know,

what do you do to kind of try
to gain some kind of consistency

with what sounds like a real patchwork
of external connections?

Yeah.

So so what we've been doing is we've
and it's very much going back to sort of

like 2004 actually, whereby sort
of journey on this started and there's a

and chuckled Eric Evans and he wrote
a book called Domain Driven design

which is it's one of it's
one of those classic books that

even though it's sort of almost 20 years
old, it's still,

if everything in it is still relevant,
just as relevant today

as it was when he wrote it back
all those years ago.

Unlike the books about various frameworks
which even become obsolete,

this is kind of like one of those
core books that I go back to all the time.

It's just got so much great material.

I definitely recommend it
for an investigation.

The read,
if you haven't sort of come across that.

But one of his main concepts in there is

that the domain is your focus.

And what we've discovered fairly
quickly is actually within our world,

there isn't just one domain,
there are lots of different domains.

And where we had
in previous versions of our architecture,

those domains that kind of overlaps
with each other a bit.

So concepts from one,
it's seeped into another.

So weird, weird, cryptic field values
or field names or data structures

from, say, the banking domain had sort of
seeped into the payments domain.

And then as the banking domain changes,

then the payments service
suddenly potentially breaks,

or you have those significant sort
of breaks in API contracts between them.

So what we've really been
focusing is not on this work

is actually looking at let's create
a proper bounded context for each domain,

define the domain model inside it
of how all the states is structured,

what it looks like,
how it integrates with all these services,

but then focus really clearly on the
the contracts

that that provides to other bits
in our infrastructure, other domains.

So have a very clean API model for that

and a really clean set of events
that we clarify.

And to document very thoroughly.

And that's the way
we trying to keep that separation so

we can build those two bits independently,
different teams, different speeds,

but without allowing 1 to 1
to cross-pollinate

too much in the other
into the other that causes that breakage.

Yeah, it's it's funny, I
think sometimes people get really wrapped

around the axle with DDT stuff
and I'm not saying you are,

but I often have to kind of remind folks,
just bring it back down

to like the simplest thing is just single
responsibility principle, right?

Build the thing to do one thing.

If it takes more than one word
to describe it, you're probably doing it

wrong, right?

If you've got the end or the slash
in the name of this capability

or this API, right?

Like take a step back.

Is it really doing a single purpose,
you know,

and you don't need to read a book
to understand that idea either.

So it,

it sounds like on kind of the

I'd imagine
you have a lot of legacy things here.

We were talking before

and you're saying this is like a 200 year
old company or something.

Yeah, Yeah.

It's originally a a sort of a
a British colonial era

era bank that sort of evolved
evolved over time from sort of

investing in these foreign countries,

sort of part of the British Empire legacy,
gone through lots of various changes

and now is sort of evolved
into much more of a

it's a fintech
with a banking history behind it.

So it has a nice network of correspondents

in Africa
and other countries all around the world.

But actually at the heart of the front,
it's becoming more and more of a fintech

embracing payments.

But there are legacy banking systems
in there with nice sort of XML based APIs

and a couple of systems that you have
to talk to where we actually just invoke

stored procedures on a database
because that's all that's there.

And we're trying to sort of

wrap those with APIs
to make that much more integrated.

Okay. But again,
keep treating them in their own context.

So the details of those systems
as they gradually move away and change

over time
and get replaced by newer systems

that we're trying to make sure that
we don't build our our new fintech stuff,

all that sort of foundation where we're
tied to whatever those old services were.

And that's
where the domain modeling really comes in.

Is this define a domain for that
that we don't necessarily worry

about exactly how it's implemented
at the moment.

We know we've got a domain
a new domain model

that's backed by an old legacy system
with a good public contract.

And then as we strip away one of those old
layers and replace it with a new layer,

hopefully if we've done the domain
modeling right, working with the business

to make sure we've captured
all the concepts that they want,

then we hopefully don't end up with that

change of back
end system having to impact on us.

FinTech Payment engine.

Well said.

Yeah.

You know, sometimes I see these threads
where, you know, it's like

Reddit or StackOverflow or something,

and some of these like, well, clearly
you're doing it all wrong

because you haven't all designed,
you know, designed it all perfect.

And having worked in some places before,
like I worked at a place that was like

67 year old manufacturing company,
you realize like

on a long enough timeline,
there's going to be masses.

And just having it's like
dressing up the order,

taking window because nobody wants to take
a tour in the kitchen, right?

Like, just make sure that that contract
is clean and then you can swap out

the underlying implementation
by trim off all the capillaries

of sideloaded traffic, right?

It's at scale.

It's kind of the only way to do it.

As much as, you know, idealists who
haven't seen it might have other ideas.

So I can totally respect that,
I guess other other aspects besides and

I know it's it's not exactly a concept,
but to me it is a single responsibility.

Are there other aspects of that
from a design perspective,

when you think about

scaling out the future of the platform
that you feel have been really powerful

from Didi?

Yeah, that definitely the

sort of the whole concept of context of a
bounded context that we've got isolation

and there are some really good patterns
in there sort of adapt to patterns,

which is how we're sort of managing sort
of talking to those systems.

This was a really good stuff
in there around

what they call an anti-corruption layer,
which is kind of quite good on the API

world, which is all about
rather than just take taking the concept

of taking the domain model
that you've got in your in one domain.

So say we've got a domain
about core banking,

so bank accounts and statement entries,
we could shift that

straightaway over into our payments
domain and build that on the same model.

And actually it's okay.

We want to debit money from an account,
credit money to a different account.

But actually you're you're then bringing
the concepts of one domain inside another.

And that creates that sort of fragility
between the two.

So that's sort of the anti-corruption
there indeed

kind of says rather than doing that,
what you do is you make sure

that your banking domain exposes something

which is meaningful to the payments
domain, but not its internal details.

And then when you bring that

into the payments debate,
we actually transform it from

that into a payment domain model world
and then manipulate it in there.

So it's a it's a transformation
between one domain and another,

rather than exposing the details of one
into another across the API.

And that then means that the two can move
at different paces and develop

as long as they as long as you maintain
that transformation from one to the other,

you actually get that.

You get that

that you break that fragility pattern,
which is why it's called anti fragility.

You break that fragility of changes
in one place affecting another place.

So that that's something we've really been
focused on is what is the core.

Again, the single responsibility
of this domain to this other domain.

And let's just encapsulate
just the essence of that in those APIs.

Yeah, for sure.

I don't know.

Again, I feel like that whole
how do you take a big, you know, pile of,

you know, interlaced things
and peel them apart?

This is why I said that, you know,
these are the ways to peel them apart.

Another thing that you

you've mentioned

in kind of some of your writing and stuff
is this idea of this Cupid concept,

which I'll admit like news to me until
about 30 minutes before we got on here.

So tell me more. I'm intrigued.

Yeah.

So, yeah, there's a there's a software
engineer, sort of architect,

sort of thought leader based in this of UK
software development

community called Daniel North,
who's quite respected, written a few books

and he started,
he came up with this idea of beat

based on looking at the sort of

the original solid principles
which most anyone who's worked in object

oriented development should understand
the basic, solid principles.

But he started looking at it
a slightly different ways, how

those are great for an engineering
point of view, but they are sort of

they're almost like a set of rules where
you have to follow them and it's actually

why do you need a fixed set of rules
that don't always apply to everything?

So he started looking for a different set
of properties

that you could use to describe software

that's really good to work with software
that's actually joyful.

Hey, his word is joyful.

So software that's joyful to work with
and that we started looking at that

a bit more is actually can those apply
to architecture, Can they apply to APIs?

And actually they work really,
really well to APIs.

So he's kind of a Cupid.

If I go through the five terms,
which is kind of the thing.

So he's to focus much more on the role
of the being principles or rules.

They're more
the more properties that you lose.

So that kind of you, you can evaluate
where you are along the line.

You don't have to be absolutely dived into
into this layer in the maximum detail.

You can start at the other end
and gradually move away,

move along the line of these properties
which is why they're

that they're so structured in that way.

But yeah,
so the five of properties of Cupid and

there's a if you have a look on his Cupid
dot dev website, it's

actually really good explanation,
but the first one is composable.

So this is about
rather than having an API one API

that does something and then another API
which has done something

so in a completely different way is mate
and so you can chain them together.

So the, the outputs and one API should be

with a small transformation, the inputs
to the next step in the workflows.

If you're building a work
for at most main points,

you can just call transform,
call, transform,

and then with a sort of a common error
handling pattern across them all.

So it's actually easy
to just build a chain of APIs.

And then if you want a different workflow,
you can take out the certain endpoints

that you don't need
and replace them with different endpoints

rather than having to rebuild the whole
lot with heavyweights of API from scratch.

Yeah, this is the
this is the legacy slide.

Everyone sticks in their API
talk, right? That this is.

Yeah that's that's

what it's about plug and play different
keep that common capabilities yeah.

Yeah yeah and the second one is

he's called it Unix like which is kind of
to make the Cupid's acronym.

But is that it.

That is the,

that's the single responsibility principle
and that whole sort of

like lining stuff together each,
each in each endpoint you do one thing

and what you're actually trying to
then do is build a workflow

by composing all these little bits
that do one thing together well.

And I have to call out
from like the to Cupid dev site, you know,

And for those not watching video of you
too, I'm tapping on my heart here

that it's described as Unix philosophy
which this is like a

if you look across software in the last
call it 50 years if you want

there's no single more

successful thing
than kind of the Unix philosophy of,

you know, if you try to write like a Linux
or UNIX command

line thing,
it's got to do one job real good.

And if you embrace that in design
perspective, when it comes to APIs,

it just fits, just makes sense,

but yet is still ultimately
single responsibility at its core, right?

Yeah, absolutely.

Yeah. Yeah.

And the next one he's got is predictable.

So this is, this is one of my pet
peeves on API is where you you call it

you call an API and it does one thing
and then you call it another time.

And depending on some kind of state
or some weird

cryptic field value that it does something

completely different
the next time you call it.

And that's kind of the,
the predictability.

It should do the same.

It should
you should know what it's going to do

and it should reliably do that for you
every single time.

Yeah,
I would argue that, like predictability

in software
engineering is pervasive like that.

I mean, you know,

like you can ask a team at a stoplight,
like first thing I did

when I walked in the door
a couple of years ago

says, we're going to get predictable
as an organization.

But that boils down through every layer
of what you do.

Like something should not have unintended
unintended side effects

as much as you can prevent it. Right?

So yeah, I love that one again.

And then the next next one is idiomatic.

So that's kind of just stuff.

Stuff should work in the way
you expect it to work.

And again, in the API world,
another one of my sort of tech pieces,

people are adding all these sort
of extra document elements to re

replicate the error handling that's
actually built into the protocol itself

or sort of re reusing

HP response code in unexpected ways
to mean different things

than they actually do mean.

It's like it's there's an idiomatic view
of how APIs should work

within particular protocols
or within particular structure.

Your API should stick to that.

Yeah, I won't go down the rabbit hole,
but I will call out here that in the

the show notes that Bailey put together
for Chris, it just said Chris hates

GraphQL, so I'm going to leave that one
there next to idiomatic and we'll move on.

Yes, that's a whole other discussion.

Yeah, it is where we don't have time.

Maybe we'll have you back
for that one joke.

And then the final element
is sort of going back to the domain

driven design, which is domain based,
so that the API is the stuff

that the names of your APIs,
the data structures in your APIs

should be in a meet, have a meaningful
domain structure that's understandable

to the business and particularly
understandable to the client.

And that's one of the things
we've particularly looking is it's great

if you build a really complex domain,
but if the client can't understand that

domain, then actually you've sort of you
failed on the purpose

of making that joyful
for them to integrate to.

It's it's domain based,
but it's got to be a domain that the,

you know, structured in a way
that the client can do with it

rather than just the sort of the engineers
who built it.

Understand.

Yeah, I think it's part of why I like
I tend to have a bit of an allergy to

sometimes folks can be real ideologues
with the TDD stuff because they're looking

at it in this very modularity
technical perspective.

But like when I talk to product folks

who are learning APIs, it's
like this is about customer centricity.

That's all it really is, right?

If we had to describe our platform on a
marker board with a roomful of customers,

would they be able to go,
Oh yeah, that's my stuff.

I understand that, right?

If you haven't accomplished that,

then you're just kind of like shouting,
aren't you?

Yeah, absolutely.

And again, it's

sort of another example from our world
is and of sanctioned screening

so that we have to do like

for a lot of these payments
in some countries we have to check for

that we're not sending them to people

who are doing money
laundering and things like that.

And that's a whole other
sort of that's a world of expertise.

And actually you could do that two ways.

You can actually expose all the details
of sanctioned screening into our payments

domain and make it really complex that
unless you're an absolute expert in that,

that you can't really understand
or we kind of ship that into its own

bounded context rapidly
tweet traffic behind some APIs

and actually the payments
domain just needs to effectively know, oh,

we send this for screening,
did it pass or not?

And then that's something
that the business

and the clients of that
can actually understand

without having to deal
with all that sort of those nuances of

of all the various different scenarios
it can fail in.

Yeah, it was honestly one of my single
biggest learnings about my couple of years

in FinTech
is that the real hidden game in that space

for people who get all, you
know, zealot, excited about,

Oh, we're going to solve this, it's
going to be easy.

So you've got to be good at risk
and compliance if you want to go global.

And it takes at least a decade
to figure out all those different markets

and like especially in developing markets,
I mean, you're talking about like

go into a window
with paper to get stuff done sometimes.

So yeah, I totally get that.

Yeah.

I want to reflect real quick though,
on this Cupid thing.

I'm totally enamored.

That's probably just because it said
Unix philosophy and it sucked me in, but

I want
to reflect on you started with Solid,

which for listeners who maybe

aren't familiar with this from a software
engineering perspective

and I'm going to go down this list

and it's not going to be fun
I'm sorry, listeners, but we got to do it

because I want to show you the contrast
single responsibility principle.

We talked about that one a lot.

It's easy to understand
open, closed principle.

I don't have time to explain it right now,
but list of substitution principle.

I definitely don't have time
to explain that

interface segregation principle
and dependency inversion principle.

So, you know, for hardcore software
engineers are going to go, yes,

that sounds great.

But I do think that the computer
science world sometimes doesn't translate

well into a design context.

And when you're just looking
at designing something, it's,

you know,
designing a platform in particular,

you need a set of principles
that are understandable that everyone

can can kind of grok
not just the software engineer.

So I love these kinds of efforts.

There's been a lot of them out there,

but it's it's way like one of

my core ideals is like principles,
not frameworks.

Like don't give me a rigid structure
because every place is different, right?

And I'd imagine you've been in enough
different shops to know this too.

Yeah. Yeah.

If every every place you come across

as a different way of doing it
and is definitely that

if you have specific rules or principles
and you try to apply them,

they probably work
the first time you build the software

because it's nice and clean.

But then as soon as you
then try and expand

the software, maintain the software,
add new features into the software,

you get into this horrible world of
what do I do?

I break the principles
to achieve what I want to do or do I spend

much longer ripping everything apart
to insert all the new stuff and maintain

the principles again,
which is why sort of something like Cupid,

which takes much more sort of it's
a property, it's not a rigid thing,

it's kind of a guideline.

You should be aiming to try and
get to the better end of the guideline,

but it accepts
you're not there at the moment.

And then you move
in that way. It just makes

it makes those it makes your life building
the software much easier, having those

guides, but not sort of an absolute
rigid set of things that you can follow.

Yeah, every platform project
I've ever worked on, it inevitably becomes

the thing is like,
what are our principles?

And I feel like it's
kind of like a social contract exercise

where it's not so much
what you end up with.

You can have anything from kindergartners
to executives.

The list looks pretty similar in defining
a social contract between a group,

but it's about having the discussion and
really embracing ideals for yourselves.

But I feel like this is a fantastic

starting point
and definitely want to dig into it.

So thank you for sharing it.

Excellent. Thank you. Very pleased to.

Well, Chris, I appreciate you having

given some of your very valuable
time to us here in closing.

And if you've ever listened to the podcast
before, you'll know this is coming.

But we just talked about
a whole lot of stuff that for someone

who's just, you know, kind of setting up
to look at the self,

evaluate their own situation
might go, that is overwhelming.

Where do I get started?

What do you think is the most kind
of valuable thing to embrace, to start

turning a corner on either transformation
or kind of starting from scratch?

And I probably can look definitely

the Q site because that just gives
a good outline of that.

And there

there are lots of sort of really good sort
of starting tutorials

on domain driven design.

So that's a, that's a good point.

And I've kind of like tried to summarize
those a little bit in my blog post

so you can potentially hunt down

those as a reading point,
as a sort of starting point.

I've tried to keep them sort of
not at a too technical level,

but yeah, I would definitely start
having a look at just

touching into the domain driven design
because there's a few basic concepts

like creating a ubiquitous language
that the business understands,

separating stuff
into those separate concerns.

It just start playing around
with some of those ideas

and then the rest kind of
you can build on gradually after that.

Yeah, So you tried to plug yourself there,
but you got to tell us where

where do we go
to find your things that you write?

Okay, that's on my

blog, which is software
I don't ski Postcode UK.

Nice.

Well, Chris, thanks again for coming on

and giving us a little bit of a grimier
hands on view of the world.

But I have to say it's it's
not really probably that much different

than the typical management types
we get on here.

But by the way, thank you so much.

Thanks for listening.

If you have a question you want to ask,
look in the description of whichever

platform you're viewing or listening on
and there should be a link there

so you can go submit a question
and we'll do our best to find out

the right answer for you.

API Intersection Podcast listeners

are invited to sign up for Stoplight
and save up to $650.

Is the code intersection
tend to get 10% off a new subscription

to stoplight platform starter or pro.

Take a look at this episode's
description for more details.