This week on the API Intersection podcast, we spoke with Wesley Beary–Architect of Engineering Practices and Culture, previously at Salesforce Technology. We originally reached out to Wesley after writing about the history of API Style Guides, as he played a key role in publishing one of the first open sourced API standards. However, that was many years ago, and Wesley has continued to grow into a broader role at Salesforce after Heroku was acquired.
Focused on people, innovation, and learning, Wesley has been a part of Salesforce for over a decade now (including his time at Heroku). Using his technical background and focusing on API governance evidently led him to the organizational side of things. With hundreds of architects and thousands of developers, things can get muddled quickly without proper process, education and communication. And that's where Wesley comes in.
We’ve yet to have an episode where the lines of API governance blur with greater company standardization and company-wide process, it was definitely a unique insight into a very large scale way of doing things.
To subscribe to the podcast, visit https://stoplight.io/podcast
Do you have a question you'd like answered, or a topic you want to see in a future episode? Let us know here: stoplight.io/question/
--- 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). Valid until December 31, 2022
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.
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.
We'll come back to API intersection.
We are playing a little bit of,
I don't know, OG today, right?
A bit of a walk down
memory lane for myself., certainly
is where I came from when we asked Wesley
Beary to join us on the podcast
and talk a little bit
about some of his past with APIs
and some of the things he's doing today.
My co-host again, Anna, Anna, thank you.
And so
Wesley tell us a little about yourself
and then we'll kind of get into it.
Sure. Yeah.
I work for Salesforce.
Have for just over ten years now.
Most of that time was inside of Heroku.
So when I joined, that's definitely
where I was and that's where I was for,
I think six or seven years
really over the ten years. So
worked a lot on Heroku API
stuff, which is definitely what brought me
to the attention of you all.
I think and I think we'll have some things
to say about that.
Otherwise, I live in Iowa,
so I've worked remotely for Salesforce
the whole time I've worked there,
which is kind of interesting
in its own right, maybe and
farther relatively recently.
I mean, she's like three and a half now,
but it still feels like yesterday almost.
And when I was into woodworking,
into gymnastics,
among other things, kind of pretty
eclectic set of interests, I guess.
So I think that'll probably come out
as we chat more as well.
Nice.
Well,
I try to frame my mess out, but yeah,
I think we probably have some make
or empathizing to do there.
Sure.
Cool.
Well,
you know, we were kind of doing some
look back
on how sort of API style guides
in their current form
and certainly with our interests
around spectral and kind of the community
growing around that and automating
some of this stuff.
Know my time at PayPal.
One of the things we did
there is said, you know, let's,
let's take our internal guidelines
for API design and make some sort of,
you know, vignette of that
for external consumption
just out of the interest
that people doing these things
don't really
there's not a way to share it.
And at the time,
I was very inspired by Hiroki as work
and as I learned over time
that you played a big part in that
in sort of publicly
publishing some of these guidelines.
So I'm curious, most of all, first off,
like, you know, where did that come from?
And I suppose this was pre Salesforce,
so perhaps you didn't have sort of
the corporate overlord factor to deal with
that sometimes stops
these things from happening.
But, you know, why did you do it?
What did you learn from it?
All that stuff.
I'd love to hear all about it.
Sure. I mean,
where do you even start? Wow.
I mean, for me, a lot of the journey of,
like, just a lot of my like, I guess
career trajectory in some sense
really took off right around the start
of a lot of cloud stuff becoming a thing,
you know, is the original Amazon
Web Services came out, that sort of thing.
And so one of the things that I ended up
getting really involved in,
just because I was interested, you know,
kind of relating to this whole like maker
tinkerer, kind of esthetic,
like cloud stuff seemed really cool.
But boy, was it a pain
to figure out how to actually use it
when none of us were familiar with it.
All of this stuff was brand new.
I wouldn't say that a lot of it was APIs
or necessarily the most user friendly.
So just like trying to kind of
like figure that out. So one of the
things that I sort
of just like undertook in order to learn
that better was to start writing
API client libraries in Ruby.
And I started with us with especially
some of the services
that were not supported at all yet
there just wasn't a client library for it
because it was so new, like Dynamo TV
or other things that had just come out
and it eventually then
spread across to make them for more
and more of the obvious things.
And then like Rackspace
came out with their offering
and other people came out with theirs
and I was curious about those.
And so I started making clients for those
and then eventually built out
this whole suite of libraries
to support a bunch of different
cloud providers that has a somewhat
shared interface anyway.
That in and of itself is kind of a
sore spot, I guess, in
terms of how much of a common interface
you can really have
because of how different
the different cloud providers are.
But it's a it's a library
called Fog in Ruby.
And so from that whole experience,
I had the opportunity,
you know, blessing, curse,
I don't know some of those maybe to
be exposed to a lot of different APIs
that were kind of sort
of trying to do the same thing,
which was interesting in terms of
I guess being able to kind of build
my palette almost.
I guess it's like we almost need like API,
like wine tasting or something
and sort of like, oh, I note hints of rest
in this one
and there's just this little bit of,
you know, like graph influence
or something.
I kind of like that mix or something,
right?
So, you know, everybody has their own
kind of style and flavor.
And so I think a lot of that, you know,
this is the long way of me
getting to like
that really helped me to build
a sense of my
own taste and preferences
so that when it came time then
for us to really talk seriously
about within the context of Heroku,
what we were going to do,
how that API was going to come together,
what we did and didn't want.
I wasn't just like starting from scratch.
I had this sense of like, well,
you know, I've, I've looked at these like
ten, 15, 20 APIs and some level of detail.
I like that part.
I didn't like this part.
And then it was still,
I think, an interesting
exercise to go through the process
of trying to articulate
why I didn't and didn't like things like
that wasn't always as easy.
And that's really what a lot of the style
guide was trying to do is not just say,
this is what
we should do, because I say so, but more.
This is what we should, we should do.
And here is some reasoning as to why
I think that is the better approach,
and I don't think we got it all right.
But I think that, you know, putting some
kind of stake in the ground was helpful.
And for me,
there was a mix of motivations, too.
I mean, some of it certainly was,
you know, just me
trying to better educate my colleagues
so that I wouldn't have to be the one
that made every API decision any more.
Right.
That, you know, I could say,
hey, I wrote up as much as I could,
like how I think about APIs.
I know it's a lot to digest or whatever,
but like I want to be able
to refer back to that
and help you to learn how I think about it
so that you can think
more like that as well.
Or if I'm wrong, that you can call me out
and we can have a discussion
explicitly about what I think
you know, why I reason that way,
why that's not right, how we should change
it, that sort of thing.
And you know,
given my background
and how a lot of my coming up
and everything was based on open source,
like whenever
I can, I would prefer to do something
more publicly.
Like I've rarely found that to be
something that has many downsides.
I mean, there are challenges
sometimes in terms of maintaining
and keeping those things running
and supporting the community
that sometimes builds around them.
But for me, that's always felt worth it.
I guess that makes sense.
I think that's a perfectly adequate answer
and I just want to call out here.
This is very interesting
and that I think most people would say,
hey, if you came up with an API, you know,
a guide for how to design good APIs,
I think most people would assume
you built APIs all the time.
And what I find fascinating here
is it's actually
that client or consumer advocacy.
But like, here's all the things I tried
and all the things I didn't like that
I want to prevent
from having to interact with again.
I think it's super valuable
for folks to learn from listening that
I find that in a lot of especially
larger enterprises, they get all the back
end architects together
and they worried out over
you know, some technical faction aspects.
And it's like ask the people who use them.
Right? You might get a different look.
Yeah. Yeah.
And I mean, I think
we get stuck in that mindset
a lot in technology for whatever reason.
But like in a lot of other worlds,
you wouldn't expect that, right?
Like, I don't know.
Like, you know, touching on
some of my other hobbies.
Like I'm really interested
in like making chairs.
I haven't succeeded yet
and actually doing it,
but this is something
that I would like to do.
Like, I wouldn't expect that as someone
that's new to trying to make chairs
that I would just go and reason it out
and figure out the right way
to make a chair.
I'm going to go
and look at a bunch of different chairs
and see what I like
and don't like about them.
And that is how I'm going
to get to a hypothesis about what
a good chair might look like, right?
I don't think that working from it
the other way is going to end up
in a good result.
I mean, there's a similar thing
just like as in my experience
of like all programing,
if I try to go straight
to like the abstraction basically,
which is, you know, what
we're talking about really with an API
you should like is abstracting
how you interface this thing
by trying to go straight
to writing the abstraction
without working through a few examples.
First,
the abstraction is almost always terrible.
Like I really need to usually work
through two or three examples of something
to kind of see the shape of it
and then work backwards from there
to figure out what the right abstraction
is that's going to map to that shape in
a meaningful way.
And yeah, I think otherwise, you end up
painting yourself into a corner
and you know, similarly there's
just like a cost benefit
ratio kind of thing, right?
Like the cost to consume
another API is relatively low.
The cost to build
another API is enormous in many cases.
Right.
And the cost of a mistake in the two cases
is also way different.
Like I'm consuming your API
and I make a mistake.
Like,
who cares, right?
It's very recoverable,
like very low impact.
But if I make an API and release it
to the world, that is wrong.
I'm in for months, two years of pain
in one way or another, probably like that.
So yeah, I think that made sense to me.
Although you know, I guess
I hadn't really thought about it
in quite the terms that you spoke of it.
So yeah.
So I love this idea of like
finding the cost and benefit.
And my question was going to be,
how do you balance sort of that
flavor and style and innovation
and excitement with sort of a need
for more standardization and a need
for more consistency without, you know,
designing out innovation?
That's a tricky one for sure.
I mean, I think for a lot of this,
like it's a balancing act, right?
So like,
I don't think I should try to like
innovate or come up with a new idea
for every single part of the API.
But that doesn't mean that I can't do,
you know, 80 or 90% of it in a way
that seems relatively
straightforward and traditional
and then try some things around the edges.
So even in the context of the Heroku
API, we did some things that
are kind of weird and I
don't know if I would do them again
or whatever,
but they were areas where we were trying
to do something interesting.
So the way we do like pagination and stuff
is, is quirky I think,
and not really exactly
like I've seen elsewhere, although
I've seen things that are similar,
like it wasn't totally from scratch.
So, you know, like it's just I guess
you have to pick your battles, right?
Like,
I don't think having everything be new
and shiny in
whatever is going to be the best.
I mean, to some extent
it goes back to this
sort of like user experience
or like client development angle, right?
Like I don't want to have to completely
figure out your weird
not like anything else API from scratch
like that's going to turn me off
from even interacting with your service
at all.
Like I want some degree of familiarity,
but I also can appreciate when it's
mostly familiar.
But there's a little twist, right?
And in some ways I think it even helps you
to appreciate that twist even more like,
Oh, I really appreciate this difference
that you bring to this space
like that, that is.
And you know, again,
I think that's something that came for me
from consuming a bunch of APIs
that we're in a similar space, right.
To see the nuances between how Rackspace
or OpenStack or Google approached,
I don't know, like a blob store
versus how Amazon did it right
and which features they did
and didn't emphasize
and what was easy to do
and what was harder to do
and things like that.
So I guess I should have qualified earlier
that the time frame
that we're talking about,
because I want to give you a pass on
like the paging stuff because this was,
if I remember right, something like 2013.
So like verging on ten years ago now.
Yeah, that's not really true.
Yeah, there, there were a lot of things
where, you know,
I probably would have used standards
if there were clear ones around.
But there were a lot of cases
where there were a few things
that were competing
to become the standard.
And so we just kind of had to make a call
because we needed to move forward.
Yeah, and I
think that's that the relevant bit
to that story and maybe in a part of
answering your question in a
more like let's say
timeline sensitive way is the areas
in my interpretation here
you experimented with the areas
that were unclear as to what clear
expectations would be, right?
So like paging at the time,
I remember like it was there
were a couple of different ways
that people tended to do it,
and I think that's still true
to some extent.
But there is kind of a flavor
of what people like to see, right.
That is much more clear now versus eight,
ten years ago,
which I think is an interesting one, too.
To look back on
now is when you think about, well,
first of all, I should also qualify.
We've asked Wesley
to go on a trip down the history lane
with or memory lane with us, but
that's not really what he's doing today,
and we're going to get to that.
But if you had to, like,
go and do all this again today,
you know, do
you think
that would be a different exercise,
perhaps discounting
your obviously much greater experience
and then.
It's a good question.
I mean, I think it's it's it's tricky.
I mean, I was younger in my career
as well. Right.
And I think there is a degree to which
when you're earlier in your career,
you're more likely
to have a little bit of a chip
on your shoulder
or feel like you have something to prove.
So I think there are some parts there
where it's like
I wanted to show that I had the chops
or something to come up with something
that could do this in an interesting way,
as opposed to just doing the,
the more staid or whatever
the thing that existed before
that would maybe have been good enough.
Like I think there were some cases
where now
I would think harder about whether or not
those were battles
that I wanted to fight for,
some of those things
where they were quirky
or whatever, right to be like,
it's not that I don't have a reason
for doing this,
but is that reason really good enough
for me to go off and do this?
Like at the time I was like, Yeah,
because I don't know.
Again,
I think there was some extent to which
like I wanted to prove something right,
which
I think I've mellowed out a little bit,
or maybe I already proved some things.
And so now I don't feel
as much of compulsion to do that.
But I think there were
some places like that where
I might not have pushed as hard.
I don't know.
I also, I think
I'm a little bit more comfortable
with nuance
maybe now than I was at times then.
There are definitely some things
where I sort of like,
even if it's a little bit weird,
if we can choose, like if we can pick and
sort of explain one rule
and then apply it uniformly across
everything that we're doing,
that's going to be easier
because then we don't have to explain
exceptions, whatever else,
having had many more years of experience,
you know, like you see that
exceptions are inevitable really.
And so then I don't know that I would have
railed so much against that and pushed
back as hard, especially because
it's like that worked until it didn't.
Right.
There are cases where it was like, yeah,
we picked a good rule, this is great.
And then you're almost done with the API
and like there's that one more endpoint
or something
and you're like, Oh, this it's just
is totally untenable
for me to still apply this one rule here.
And so now do
I need to go back to the drawing board
and reconsider whether or not
it made sense to be so strict
about applying it everywhere else?
Because now I can't actually apply it
everywhere like I originally intended.
And that's, you know, that's tricky, but
I don't know.
There's not too many things.
I don't think that I would call out
and say this particularly I would change.
Like overall,
I feel relatively satisfied with it.
I think one of the things,
if I had to name something would probably
have to do with like how deeply nested
some of the resources were or weren't.
There were some cases where it's like,
I don't know, we can get into the, you
know, the nitty gritty of the Heroku API.
But there are a lot of things
that are like,
you can only address this resource if you
nested underneath that particular app.
And so then that ends up implying
basically that you have like
a compound foreign key
where you need to know the app side
and the idea of whatever resource
you need to reference.
But like there's
no reason why you can't look at that app,
that resource by its direct reference.
And so like having a top level version
of that that you can just directly access
and not have to reference it
inside of an app.
Seems like it would have been a better
experience in a lot of cases and simpler
like you don't have to construct.
It is like weird
if URLs and things and clients like that
just would have been probably
a better experience.
But of course,
like we came to this realization
after that ship had sailed to some extent
and like reining that back in
or supporting both options, it's
kind of a pain in its own right.
So that's probably one of the ones
that really caught me out of like,
oh, like there are cases where you really
basically it is a compound foreign key.
So sure, like let's make a huge URL
that has all the keys in it
that it needs or whatever.
But if you really have something
that has a unique identifier, like
just let people access it by that unique
identifier, more or less the top level.
And you know, all of today.
So yeah, I think
you touch on two principles that I've
worked with folks on on their API designs
many, many times over the years.
One is what you said, like don't force
a compound identifier on the consumer.
If you can do more work on the server on
their behalf to have a single identifier
like that's just when you're doing
when you're on the client side,
that's a no brainer.
And yeah, happens all the time
and yeah, once it's out in the wild,
you can't rule it back.
Right?
You already said that one before.
I wanted to back up a little bit though,
to a thing that you touched on earlier
about about yourself
that I think I find is true
in sort of managing engineers
in their earlier careers.
Is this sort of the ego versus need?
And I'm certainly guilty of this one,
too, right.
Is this kind of.
Well, this is what we need,
which looks a little boring.
So how can I spice
set up and put my mark on it right there?
I think this makes a great Segway
to maybe put our walk down memory lane
back in the memories
of I might circle back and ask another
question and I forgot, but that's okay.
So it's like these
days you're much more involved
in kind of engineering
culture ish, by the sounds of it,
the way it reads within Salesforce.
Now I'm curious, like,
how did you get from, you know, writing
Standard Style Guide, whatever
you want to call it, around APIs and
you know, the kind of developer experience
around Heroku into,
you know, kind of how Salesforce does
engineering.
Sure, there's
maybe more of a common thread in my mind
than is obvious.
I mean, I'm not sure that
that sounds obvious when you just say it
for me, really
a lot of my time
at like in my career in general,
but especially within Heroku
and Salesforce has been
identifying some underserved need
and then finding
a way to work on that thing.
So even when I initially joined Heroku,
the position that I negotiated for myself,
even though that wasn't
what they had listed on the listing
initially or whatever, was to just work
directly on the CLIA client.
Like the
CLIA client existed certainly
at that point people liked it pretty well,
but it was something
where people came in and worked on it
when something needed to happen on it
for their future.
And then they walked away again.
There wasn't like really an owner.
There wasn't like an overarching
sense of what the CLIA should be.
And so there were some inconsistencies
over time that had slipped into it.
Like you'd notice, if you look closely
between different commands and stuff,
that it's like those are more or less
doing the same thing.
Why does it have a completely different
like verb kind of in the CLIA commands?
Like, you know, that that doesn't make
that much sense.
Could be
just make this a more consistent uniform
experience so that it's easier to learn.
Basically, if you already know it,
it kind of doesn't matter, right?
Like you have the muscle memory
of whatever you can run the command.
But if you've never learned this thing
before, the more differences
there are between, you know, this things
called create and that things called ADD,
but really in effect,
they're doing the exact same thing.
So why do we call it two different things?
So that's what I started working on.
And then over time
worked on a lot of things, including then
from working on the CLIA.
I actually got a ton of experience
working with our Heroku API
because that was what I was interacting
with all the time and started to see that
in the same way that CLIA had forums
like the exact same thing
happen on the server side where somebody
needed something for a feature
and they added something to the API
and then they walked away again and
you know, that works.
Okay. Ish.
But you know, it's
not really a sustainable way to do things
and doesn't really end up
with a good uniform interface over time.
And so we also had
a lot of idiosyncrasies.
There are a lot of inconsistencies.
And after I had kind of
gotten things settle down and like
locked in a little bit on the seal,
I ended up transitioning over
then to the API team
and working actually specifically on
moving towards that public API.
What that would look like,
how we would do it actually
doing a lot of the implementation
as well as the sort of design aspects
did that for quite some time
and then coming out of that started
working more on
really in many ways
thinking
about some of the governance things.
I think that's
what kind of started leading me
more towards this culture stuff.
So in addition to some of this
sort of like API related governance things
like I wasn't designing every endpoint
anymore, other people were,
so how did we like help them to
not have
such a hard time doing the right thing
and make it not a painful process
and make it not take forever
that they can still add things,
but still have it be up to the quality
standards that we want to have it
be consistent in the ways
we wanted, that sort of thing.
That's also why we did the design guide.
You know.
And so through all of that,
then I saw that it felt like
there was a broader, more
general need there.
And that led to defining our process
that we started using internally
and helping
to run that defining set of things
for doing architecture, decision records
and just more general decision records.
And so anyway,
it was this sort of like iterative
step more and more towards
that more organizational side of things.
And I felt really like
there were a number of things
organizationally where again,
there were needs that just weren't quite
getting met, that
the things that fell in between the cracks
and especially like within broader
Salesforce, the way we were organized
is that we have architects
which are sort of like our most senior
individual contributors
and they are sprinkled
throughout the organization,
but technically dotted line up
to sort of the office of the CTO.
And so it ends up that
because they're distributed in that way,
there wasn't someone
that was really taking a holistic view
of what it meant to be an architect,
what that ecosystem was like,
what particular needs they had.
Like for any individual leader,
they're like,
I have two or three architects
out of my several hundred people.
I'm not going to give them
special treatment or worry too much
about what they need in particular,
but deal across the whole org
and you have a few hundred architects
then you're like, actually, this is a
the size of a population that like
could probably use some, some support. And
so let's think
about how we can make their life easier
and how we can help them
to be more effective. And,
you know, I think the other thing
that people don't realize
until we got into it more deeply
is that the things that make their lives
easier and help them to be more effective
are frequently not very technical.
Like by the time they've reached
that point in their career,
like they've got the technical thing
like locked down.
Like that's not the challenge really.
Like, really, it's more,
hey, it turns out as in senior
individual contributor,
you are part of the leadership
of the company, but you don't have
any authority, you just have influence.
And trying to direct
the way that we will go in the future
without that
is a challenge, especially if that's not
something you've done before,
if that's not your background,
if you haven't gotten some support
and thought about doing that, you know, so
that's kind of more and more
the realm that I'm in of like,
how do we get folks to be able
to take their technical knowledge and
be able to effectively advocate for that
to impact the direction that we're going
and to take advantage of what they know
and to really just move the company
forward.
That's a common challenge
that we hear from so many of our guests.
Is is do we have the mandate?
Do we have the the ability to do what
we're suggesting or recommending?
How are you solving
some of the challenges for them?
How are you solving challenges
for architects across your work?
You know, it's a work in progress.
Some of it, I think, is really
I think
from my perspective
anyway, a lot of it is thinking about how,
you know, it isn't that we need to like
bring in more external knowledge
for the most part.
Like we have a lot of the knowledge
we need inside the organization.
It just isn't necessarily connected
and it isn't necessarily very leveraged.
So it's like the whole sort
of like skeletons in the closet
kind of situation, right?
It's like somebody knows this thing
that would be really valuable to know
right now.
Can we find them in this situation?
Can we get them to then share that
in a way that's going to resonate
with the people involved? Right.
And so there's definitely a lot of it
that involves
making connections basically,
and getting people to
learn from each other
about what's going on
and about what works or what doesn't work
within our organizational contexts.
Right.
It's not a
here's a generic leadership book,
please read it and you'll be better off.
It's like, Hey, you've had to pitch
something to this leader before.
What resonated with them?
Or like what is really the bee
in their bonnet right now?
Like what is going to be the thing
that's going to land with them?
Like,
how can I pitch this effectively, right?
And really thinking about
more sort
of like coaching and apprenticeship
and things like that of like,
hey, I'm on my way to being an architect.
I don't want to just like suddenly find
that I'm on the architect diving board,
about to jump in and don't know
how I'm going to manage this.
Right.
I'd like to have like
a more general transition of like
starting at the waiting end of the pool
and getting a little bit deeper
and a little bit deeper as someone like is
there to make sure that it's safe for me
and that if I have questions
or need support, that I can get it.
So yeah, I think,
you know, we got by, but
as the organization grew, like just
getting by is
less and less consistent over time.
I'll say, I guess like
some people get by better than
other people and some people get by worse
than other people.
And there's also just like
I think from my perspective at least,
I have a lot of concern about like the DEI
implications of that, for instance.
Right?
Like, yeah, in many cases,
the people that get by more readily
and the implied state of things
are the people who look like the people
who've historically gotten by OC,
which is mostly a bunch of graying white
dudes, right
as we were talking about before, like,
you know, of, of whom I am one, but
so, you know, really like just trying
to figure out how to get those supports.
And in many cases I think they are like
person to person supports.
It's not a I'm going
to bring in this external consultant
and they're going to teach a class to you
and you're going to be better off.
It's a hey, we all have a lot
we can learn from one another.
And the things that we need to learn
actually
are the things that each other knows,
not the things
that some other magical guru
we find is going to know or something.
So yeah,
just kind of trying to connect the dots.
I'm focusing a lot on like community
of practice
kinds of things
and trying to really figure out how to
do that in a way
that will build these connections, help
that transfer of knowledge, but also not
be too much of an ask for people, right?
Like people are busy.
I know. I don't know.
Just want to say, hey, by the way,
can you just spend an extra
five or 6 hours
a week contributing to my community?
I promise it'll be worth it.
You'll love it, right? Great.
But to really kind of
balance, you know, how to make that
as easy as possible
to do, how to make it as obvious,
what the benefit to you in doing that is.
And then, yeah, just slowly
but surely hopefully build some momentum
behind that and get it to something
that can hopefully sustain and really
get that transfer of knowledge going,
get people supported, get them to be able
to make that transition up
through the levels,
get them to be more successful
at the higher levels, just the
just the whole thing. So
do you find that
some element of that
is that everybody's got their siloed
version of kind of company
direction and strategy and that
getting those kind of viewpoints aligned
that there's like synergy
and sort of teamwork that that emerges
from that that wouldn't otherwise.
Yeah, I mean, there's
definitely some challenges there.
You know, the we use this
process called beauty mom, which I think
does a pretty good job in particular of
like providing vertical alignment to us.
So usually like we're pretty well aligned
I think, and have a good understanding of
like if we trace upward
through our hierarchy
what that person wants,
like what our leader wants.
But that doesn't always
give you the context
to necessarily know if I have a team
that's kind of near me,
but reports out through someone else, like
what is it that their leader wants
and how does that relate to
what my leader wants? And if they don't
like line up, then what?
Because there's definitely some situations
and especially if there is the,
you know, like
it makes things like whether or not
we should build shared services.
A very fraught question sometimes, right?
Like, well,
we would love it if you would build
a shared service and support it for us.
Okay.
But like
does that really align with what
we're trying to do or does that, you know,
will that create sort of like drag for us
that now
we need to support this broader thing
than we really need?
You know, so
all of those kinds of things
that you might imagine, right,
happen in a large organization
and they're not insurmountable.
But sometimes you have to get creative
about who you need to bring in to,
you know, broker that conversation or
make sure that that conversation happens.
I mean,
I think sometimes it's just a matter of
at least
to get started raising that awareness.
I think sometimes it's easy for those two
things to just fall under the radar.
And I think that's one of the things
that I really hope
to do with some of this community stuff
is to better connect people
that are sort of like horizontally
in the organization where
I don't know,
I've suggested this to a few people
and I always feel
like it's a little bit weird,
but it's this notion
that like on some level, I personally
I'm not sure that I care that much
if we have duplicate implementations,
as long as we don't have like duplicate
efforts to learn the same lesson.
Like I feel like in some ways
that's the more costly thing,
like if you're going to build a service.
But we already know
exactly what all of the specifications are
and how it should work like that.
Duplication probably isn't really
that expensive to us and a lot of ways.
But if you're going to start not really
knowing exactly what the requirements are,
which let's be honest, is
how we approach my software
most of the time in my experience, like
and there's one group
that's kind of sort of trying
to figure out exactly what I should do
over here and a different group over there
that's trying to kind of
sort of figure out what it's going to do.
And they come to more
or less the same conclusions
by having all the same costly
trial and error like that
seems really like a problem
that seems like such a waste.
Like if you learn something
interesting about I don't know how to run
event based systems and not very many
of us in the company have done that yet.
Like, please help us to learn
what that important lesson was so that
you don't
just do that same thing over again.
And that I
feel like there is often a big gap, right?
Like because okay, I learn something like
where do I put it
so that the relevant people can find it?
How does this work?
You know, how do I even know
if anybody cares about this?
And beyond that? Like,
is taking the time
to put that into a presentation
or a report or whatever else,
like something that's actually recognized
and rewarded in the company.
Or should I just like go back
to having heads down
because that's
what's going to get you promoted?
I mean, it's not the only thing that
causes people to do things,
but it's a factor for sure.
So yeah.
And on the learning, I guess.
On the listener context, I mean,
these days, Salesforce is pretty big.
I mean, what's this
sort of number of developers
and or architects
that we're talking about here
that you're working on? The scale of.
A fine question.
I never exactly know.
That's a really, really big
it's a good answer.
Hundreds of architects
and thousands of developers for sure.
But I don't know the exact number of it.
Yeah, yeah.
Which is I don't know.
I guess my observation here
is like on some level
you're working on sort of organizational
and systemic design.
Now as it turns to sort of this API design
and the bigger the scale of the problem,
while it would seem obvious
that the generic things where there's
the exception seem to be the rule.
Sounds like that's the thing in common
here, right?
Yeah.
And I mean,
I think the other thing that is
I don't know makes sense to me.
But again,
maybe sounds weird to other people.
It's like there feel like
there's a lot of parallels.
Like a lot of what I work on now is sort
of like the interface of the organization.
Like how do we make sure that information
transfers between these groups
if they're trying
to make an important decision,
like what's a good effective process
for them to do that
so they don't have to just make it up.
And to me at least, that feels a lot
like the parallels you might see
between like a private interface
and a public API or something, right?
It's like,
hey, all of these architects end up having
to do kind of sort of these same things.
Like they shouldn't have to renegotiate
what their interface is among them
while they're doing this important thing.
Also, like, can we just kind of agree
that at least most of the time
this is a reasonable way to go
about doing that thing,
like making an important decision
and then just focus
on the actual decisions
and not have to renegotiate
that every time.
Because I think there's, you know,
just this sort of like text that you get
otherwise you don't realize it.
But it's like
if we haven't really like come into this
with an understanding of how this process
is going to go, we're inherently going
to have to figure it out as we go along.
And sometimes that will be good
and sometimes all we've got.
But it's always going to cost something.
It's always going to be a distraction,
it's always going take away from us doing
the thing that we came here to do.
But at the same time,
I don't want to be like so strict
that people have no autonomy, right?
So it's this balancing
act of like, where do we draw the lines of
making recommendations versus
requirements or mandates or,
you know, however that might work out.
So, you know, for me, I'm
a big fan of just like defaults, right?
Or it's like this is the default.
If you have a really good reason
to deviate from it, more power to you.
But when you do that deviation, please
tell us what you learned right like that.
That is a requirement
if you're going to deviate
is that I want to learn what you learned
whether that's we deviated
and it was great here's
why or we deviated
and it was a terrible idea.
It turns out we should have just used
the default like, fine,
you know, just help us to figure out
if the defaults are wrong
or if there's a better default
or if we should recommend
80% of time use the default.
But here's this other set of cases
that sometimes this other thing will work.
All right?
Like, again, just like
how do we keep capturing that knowledge,
shifting it around,
helping everyone to continue to grow
and progress?
Well said.
At the at the time that you were
looking at it sort of opening up the
these sort of Heroku API design standards
guide, style guide, whatever we call it.
Did you have sort of inspirations
that you were looking out of others
who had done something similar?
Like looking back at it now,
the only thing I could find was like White
House was the only other project I found
that had really done it at the time.
But were there other sort of public
things like this
that you were looking at back then?
Yeah, I think I also remember
seeing the White House stuff at the time.
I think right around that time
the JSON API stuff had been kind of
initially written.
So I believe I looked at that time
and that was one of the things
where it's like I like how you're
talking about this stuff generally,
but I don't necessarily agree
with some of your conclusions like yeah,
and I think that was similar
with some of the White House stuff
where it's like,
I really like that
there is something like this.
But some of the particulars aren't quite
what I think
is going to work for us or what
I think is more generally applicable
otherwise.
I mean, I was definitely keeping an eye
on a lot of the different schema
things, right?
And the progress of those.
That was also another place
where it's like,
if I had it to do again, I don't know that
I would make the same decision.
We just did basically raw JS on schema
because that was also a place
that was very unsettled and basically
everything was ending up just using JSON
schema inside of its overarching schema
in some way, shape or form.
And so we were just sort of like, well,
JSON schema seems like the common thing
and it can pretty much cover the bases.
So let's just do that very not user
friendly though unfortunately.
It's like kind of a pain
to work directly with Jason schema. So
see, I
mean I was definitely like keeping an eye
on what was happening in the space,
but there weren't a lot of other examples.
That being said, like, you know, we had
actually done a style guide for the CEI
at Heroku like, you know, style guides
for something that like it was
something that I was familiar
with trying to use, right, to say,
here are kind of our preferences, here's
what we prefer.
Here are good defaults,
things like that, to
just help people
to be closer to the same page.
So yeah, I don't know.
There were I think it's like a lot
of things like I often that I draw from
indirect things, right?
Like so it's not that
I didn't look at style
guides, it's just that there weren't
that many API style guys. So it got.
So I looked at other style guides
and thought about what seemed to work.
Well, there were not work
well what I liked about them and you know,
you have to be a little bit creative
sometimes to figure out how that maps
between the domains or whatever.
But that doesn't mean
that there's not still interesting things
that you can draw there.
All right.
Well, I think you confirmed
what I've been fishing for
and doing this little history dig,
which is I'm pretty sure
that that publication was like
the first of sort of a private company
or a company that published their own view
on stuff as opposed to like Jason API,
which was sort of,
you know, trying to be one of the spec
standards or White House being government.
I mean, that was certainly an important
innovation, but I just want to
I guess I have to say and on behalf of all
probably a lot of folks listening, that
that time era, I think was important
in that step
that you guys took with heroic you
you may not have realized
at the time was super relevant
to a lot of people and realizing,
yeah, we should share this stuff
and we should all start
moving toward common ways of doing things
that really led down the road of,
you know, certainly in our world,
that stoplight like,
you know, having this sort of programmatic
method of of lynching for these things
instead of having to write out a bunch of,
you know, big, lengthy tomes,
I think we're just reflecting on that
and realizing like and the actions
you took were really important back then.
So for me, to you and I think
the community, thank you for doing that.
Wow. Well, that's very
humbling.
I, I mean,
I put a lot into it.
You know, it's something that I cared
about and I was glad of the result.
But yeah,
I guess it can be hard sometimes to know
how much of an impact
it really does or doesn't have on people.
And I'm I'm glad that it has had
that positive impact.
That's very rewarding for sure.
All right.
Well, that feels like a good place
for us to wrap, I think.
And I guess, you know,
I promised we were going to we're going
to talk Epilog stuff here talking
nearly ten years ago for style guides.
But but I love
your your perspectives of a
very gritty, hands on reality
of the culture change that comes
with these kinds of things over time.
And what it's like building a vast
engineering
empire, right now.
So just really appreciate
all the transparency
and and how much you shared with us today,
I guess.
Any closing thoughts for listeners
to maybe kind of
wrap this up
or give them some words of wisdom?
I mean, I think
kind of, you know, looking back
and thinking about some of the things
we talked about, one of the big things
I think is just, you know, to
try to draw really diverse inspiration
from different things and places.
I think that's been really impactful
for me in terms of, like I said, you know,
looking at
lots of different cloud providers
to kind of figure out what I liked
and what I didn't like or looking at style
guides that weren't even API style guides
because they're still, you know,
like that's
what I'm kind of trying to design for.
Yeah. Like it's.
There's so much that I learned,
for instance, from just like,
don't make me think and other UX stuff,
even though
API isn't always thought
about as being like a you sexy thing.
I think it is now, but especially when
I was doing it, it didn't feel that way.
And so there were definitely
like all of these things where,
you know, I don't think that I'm like
some crazy genius or something.
A lot of was just sort of like,
Oh, that was a really interesting idea
over from this totally other subject.
How could I apply that here?
Oh, interesting.
Maybe I can try this thing
and maybe that will be better
and not quite the way
that people think about it, because,
you know,
we're all in our little echo chamber
or whatever. Right.
So I definitely recommend.
Yeah, I just like
thinking about how to apply
these weird things from other realms
because that's where I feel like
for me at least, where I find a lot
of these inspirations and I'm able
to really push the thanks for it. So
I love it.
I think, you know, my takeaways are like
kind of design
thinking approach to all the things,
whether it be an organization,
an API or whatever, right?
And to some extent like systems
thinking that being a subset of that
and that kind of diversity
of inputs,
both in terms of people and in practice.
Right.
And that is
that's fantastic stuff.
And really, I couldn't it couldn't support
more what you're saying.
So for listeners, pay attention.
I know she's talking about.
All right. Well, thanks so much, Leslie.
Really appreciated this today.
And thanks Santa again for co-hosting.
Thanks for having me.
Yeah, thanks for having me.
API Intersection Podcast
listeners are invited
to sign up for stoplight
and save up to $650.
Use the code intersection
ten to get 10% off a new subscription
to Stoplight, platform starter or Pro.
Take a look at this episode's description
for more details.
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.