[MUSIC PLAYING]
MAX SALTONSTALL: My name is Max Saltonstall.
And I am in need of a new couch.
But finding a new couch is not actually that easy,
especially when I don't really want to go
into a whole bunch of stores.
If only there is some way that I could virtually
see a whole lot of different couch options.
Hm, I know a guy who works at a company that I think
can help us.
I'm here with Barry from Marxent.
Barry, thanks for joining me today.
Can you tell me a little bit about what you and Marxent do?
BARRY BESECKER: Hi, Max.
I'm the CTO and Cofounder of Marxent.
And we provide content management systems
for 3D products as well as applications
for ecommerce experiences for retailers and brands,
specifically products for the home.
MAX SALTONSTALL: So finding a new couch,
because I need a new couch, how can Marxent help me do that?
BARRY BESECKER: So Marxent provides
room-planning applications and augmented reality applications
and web AR experiences that let consumers come in and design
and layout a new floor plan for their kitchen,
for their bedroom, dining room, or living room.
And they take 3D products that are
the actual products that they can buy from a retailer
or from a manufacturer.
And they can arrange those products in the space.
They can try out different styles.
They can switch their wall paint, their flooring,
and their lighting.
And they can really design their future living space.
And then when they're done, they can add all those items to cart
and check out on a retailer or a manufacturer's website.
So that's what we do is bring those room planning and AR
experiences to life for the home.
MAX SALTONSTALL: That's awesome.
So that's going to be really helpful when I can't just
go to a whole bunch of furniture stores,
but I want to know what my options are.
Can you walk me through what is the life of, say,
one couch as it goes from an idea in some furniture
designer's mind to eventually landing in my living room?
Where do we start?
BARRY BESECKER: So it all starts with a content order, where
we'll work with a client who, let's say,
wants to put 3,000 couches with different fabrics, leathers,
different wood finishes, whatever
it happens to be into their room-planning application.
So they'll work with us to identify
what those SKUs are going to be and provide us
reference materials.
Sometimes that's a CAD engineering drawings.
Sometimes it's high-poly assets that they've used
for a photography replacement.
Sometimes it's just photos.
And sometimes it's just a link to their PDP on their website.
We'll take those assets.
And then we'll go through a planning exercise.
Now, a planning exercise will identify
with a unique set of assets that we
need to create to accomplish that order.
One of the things about the home space
is a lot of the products in a room can
share similar materials, can share similar subcomponents.
For instance, if you think about a sofa, you're buying the sofa.
You have the cushions.
You have the feet on the sofa.
You have pillows that may be shared
across the other items in the room, like a love seat,
for instance, that's styled in the same collection.
So we'll identify even subcomponents
of those products that can be built once or designed
once and then reused multiple times,
which really brings down the cost
and effort around maintenance or when changes come in
for that order.
So once that planning exercise is complete,
we'll go through a routing exercise
through our CMS application.
MAX SALTONSTALL: Very cool.
So in the very beginning, retailer says,
here's my 3,000 couches.
Luckily, I only need one couch, but you might need 3,000.
Where does that come to?
What does it sit in when you absorb that?
BARRY BESECKER: So the back end of our CMS
is a custom relational database that runs on Cloud SQL.
And then for the file assets, textures, images, the reference
material, 3D meshes--
all of those are stored in Cloud Storage.
And so the custom application is front
ended by an Angular application that runs on Firebase.
So all the artists, the planners, the analytics,
all of those users use that 3D workflow application
to manage the entire process, really, from beginning to end.
And then once it's published, those assets end up on a CDN.
MAX SALTONSTALL: Great.
So assets come in.
Artists might be making new textures or new models.
They're all being listed in the database,
and that's keeping track of how they relate to each other.
This is a type of wood, or this is a type of linen.
And then at some point, they need to be combined, right?
You need to know that my couch needs to be Naugahyde
because that's very important.
So how are you doing that combination ahead of time?
Because I'm assuming you don't want to do it right on demand
when I'm trying to put that couch in my living room.
BARRY BESECKER: Absolutely.
And that's really one of the big lessons
we learned early on as our session
started to scale that this relational database
system that we built for building
these individual assets is great for management,
great for maintenance, great for reusability,
and really reduces the effort around that content creation
lifecycle.
When it comes to consumption, it's
really not a great environment to pull all those assets
on demand.
We even found that in many cases,
pulling an individual product because of all the reuse
could end up with 50 different queries that need to be run,
which could really put a large load on a content management
system.
So we developed is a compile-time set of features
that would notice whenever an artist would change
one individual component of a product,
notifying all the products that would be affected
by that individual change.
And then really, at compile time,
just like you have nightly job services for a DevOps team,
would compile and basically build
a runtime version of that product that can then
be published to CDN at scale.
What's nice about that is then when the end application wants
to consume that 3D product, it just downloads that manifest
and then pulls all the individual assets
that needs to render that without really ever affecting
the core content management operation.
MAX SALTONSTALL: It's cool.
So does that mean that you're generating
new assets, new composite assets in the Cloud Storage buckets,
tracking the relationship between the core pieces
and the composites in your database,
and then publishing the finished composites to the CDN
so that they can be easily pulled down
to my laptop or my phone?
BARRY BESECKER: That's right.
And we've seen big benefits with that approach.
Really, our servers or our applications never go down.
You're taking advantage of a lot of cached data
that is deployed to CDN.
We even take some of the indexes around product lists
and the configuration of our applications
to deploy those via SQLite so that those
can be downloaded as little mini databases
when the application starts up.
So we can reduce the chattiness back and forth
through web services as the user is
experiencing the application.
So really, in many of these cases,
once they start the application up,
until they're ready to save their end room layout,
they could run in a completely offline way.
And so a lot of the information can be cached,
and we wait until changes happen to redownload it.
So users can come in and out of the application
if new content has been published.
They're running pretty much locally in the browser cache.
MAX SALTONSTALL: That sounds like it's
going to make performance for me, the consumer, a lot better
but also reduce the amount that you
have to send over the network.
BARRY BESECKER: Absolutely.
And that's really what it's about
is kind of pleasing these two different users
of this platform.
It's around letting the artists produce the most amount of 3D
products with the least number of assets
and then be able to respond to changes that
come in from the client or from the project team as they're
deploying a new application.
But at the same time, pleasing the end consumer,
creating as fast as downloads as we
can with a minimum number of assets.
And so we can create the best quality rendering experience
on the front end for the amount of assets that we're using.
MAX SALTONSTALL: And in retail, if you're too slow,
someone is going to wander away.
But also if your systems go down,
that downtime is lost money for all of your retailer clients.
So how do you make sure that your back end
is reliable enough to keep them still selling all the time?
BARRY BESECKER: It's really about isolating that production
environment and consumption environment from the creation
environment where all the assets are built.
And by keeping those separate, we don't really have
to worry about downtime at all.
When new content batches go out, they
can be tested through, really, an A/B testing deployment
that we've implemented.
And so we never really worry about downtime
when it comes to consuming the assets
or using the end applications.
MAX SALTONSTALL: Awesome.
It sounds like a pretty sophisticated system
that's mostly invisible to me is I just
get to enjoy virtual couches all over, filling my living room up
to the ceiling.
BARRY BESECKER: That's the hope.
It's been about 10 years in building this environment
and kind of solving all the different problems that we've
seen along the way with making the process more
efficient for creation and then also making
the process highly optimized for consumption as well.
MAX SALTONSTALL: That's awesome.
Thank you, Barry, for coming on and for telling us
this story about how these virtual sofas can travel
through that entire Cloud infrastructure
to end up in my virtual and hopefully,
eventually, my physical living room.
I really appreciate it.
BARRY BESECKER: Thanks, Max.
It's been great.
MAX SALTONSTALL: Wow.
So now I get how all those virtual couches ended up all
over my living room.
Oh, I guess I have to pick one now, huh?
Well, I'm really glad that Barry was
able to explain how Marxent is using
all these different pieces of Google Cloud
to power this super cool retail experience from home.
If you want to learn more about what they've done
and what many others have done on Google Cloud,
click on the link below to see the rest of "Architecting Cloud
Solutions."
Thanks for watching.