SlideShare ist ein Scribd-Unternehmen logo
1 von 182
Downloaden Sie, um offline zu lesen
BUILD THE API
YOU WANT TO SEE
IN THE WORLD
I’m going to talk to you
about GraphQL.
This is not a serious
deep dive into how
GraphQL works.
This is a talk about the
problems GraphQL can
solve in the real world.
Why did I choose to use
GraphQL?
A story of LIBERATING
an application from the
grips of a 3rd party API
...and finding happiness
with GraphQL <3
I am a Software Engineer at
Condé Nast International in London.
I organise Node Girls.
I GraphQL.
@msmichellegar
1. GRAPHQL + ME
2. GRAPHQL + YOU
WHAT I’LL TALK ABOUT
BUT FIRST...
GRAPHQL 101
GraphQL is “a query
language for APIs”.
GraphQL is a language
for requesting remote
data.
GraphQL is a syntax for
asking for information
from a server.
REST vs GraphQL
With REST you have
multiple endpoints.
eg. /articles /galleries
GraphQL has a single
multi-purpose endpoint.
eg. /graphql
With REST the endpoint
gives you a predefined
set of data.
GraphQL gives you
exactly what you ask
for. No more or less.
There is a “schema” that
tells you all the fields
you can request (and
their types).
To request data you write
a “query” describing
what you want.
MY GRAPHQL
STORY
SOME CONTEXT
*GQ is not a magazine about GraphQL
WHAT THE APP
USED TO LOOK LIKE
API
An API for the
content
management
system (CMS)
that our editors
use to write
content.
API
REACT
SSR
Redux
Hapi
PROBLEMS
WE HAD
1. A lot of our
components were tied
very specifically to the
API response.
const Title = ({ apiResponse }) => (
<div>
<h1>{apiResponse.title}</h1>
</div>
);
Why is this bad?
If the API changes, you
have to update your
components.
const Title = ({ apiResponse }) => (
<div>
<h1>{apiResponse.title}</h1>
</div>
);
const Title = ({ apiResponse }) => (
<div>
<h1>{apiResponse.head}</h1>
</div>
);
It’s less readable. It’s
not clear what data
your component needs.
const Title = ({ apiResponse }) => (
<div>
<h1>{apiResponse.title}</h1>
</div>
);
Our components know
too much about their
context.
Context: where data
comes from, structure
it’s fetched in, all data
available in the app.
Ideally we’d have a few
components that know
context, while most
have no idea.
PRESENTATIONAL CONTAINER
const Title = ({
text
}) => (
<div>
<h1>{text}</h1>
</div>
);
const Article = (data) => (
<article>
<Title text={data.title} />
</article>
);
export default compose(
withArticleData
)(Article);
PRESENTATIONAL
Knows nothing
about context.
No state or
dependencies.
Just takes in
data and
displays it.
const Title = ({
text
}) => (
<div>
<h1>{text}</h1>
</div>
);
const Title = ({ text }) => (
<div>
<h1>{text}</h1>
</div>
);
CONTAINERKnows about
context.
Often generated
by HOC.
Provides data to
presentational
components.
const Article = (data) => (
<article>
<Title text={data.title} />
</article>
);
export default compose(
withArticleData
)(Article);
const Article = (data) => (
<article>
<Title text={data.title} />
<Byline author={data.author} />
</article>
);
export withArticleData(Article);
We did not enforce this
strictly enough! Our
components knew too
much :(
Ideally even container
components don’t know
about the 3rd party API.
Our components
needed refactoring.
2. We sent a lot of data
we weren’t using to the
client.
Why is this bad?
Confusing clutter! We
don’t need it, why is it
there?
It can affect
performance. The
browser is downloading
unnecessary stuff.
It can be a security risk.
What if the API
developer introduces a
sensitive field?
Moral of the story: we
should not be sending
all this data to the
client!
3. If we switched data
sources, we’d have to
completely rewrite our
entire application.
Pretty much everything
in our app was closely
tied to the API.
If we switched CMS,
we’d have to throw
away our app and
rewrite it.
Why is this bad?
Technology changes,
your app should be
resilient!
It is a business risk to
couple your application
to a third party service.
We needed to
consciously decouple!
4. The API was difficult
to work with: it had
some quirks that we
didn’t understand.
Disclaimer: this is the
case with ALL third
party APIs.
It was not built with
our specific use case in
mind (can you believe?)
Some problems we
experienced:
Field names did not
always make sense to
us.
There was SO MUCH
DATA. More than we
needed.
Some data was not in
the format we
required.
body: “## Miranda Kerr
Hochzeits-Make-up”
There was not always
documentation.
(Documentation is hard
when it is done by
humans)
Third party APIs will
never be perfect!
But we needed to work
better with the API in
our application.
5. We were fetching
data in complicated
ways from deep trees in
the API every time.
/article/meghan-markle
/article/meghan-markle
/api/article/meghan-markle
/api/article/meghan-markle/history/publish
/api/contributor/michelle-garrett
/api/category/fashion
/api/recommendations?id=”meghan-markle”
/api/article/recommendation1
/api/article/recommendation2
/article/meghan-markle
/api/article/meghan-markle
/api/article/meghan-markle/history/publish
/api/contributor/michelle-garrett
/api/category/fashion
/api/recommendations?id=”meghan-markle”
/api/article/recommendation1
/api/article/recommendation2
Why is this bad?
It was cognitive
overload trying to
remember where to get
which data.
We had to navigate
complex relationships
between objects.
We had to make
multiple requests in our
main application to get
the data we wanted.
If you make multiple
requests client-side,
it’s not performant.
It’s harder to debug.
/article/meghan-markle
/api/article/meghan-markle
/api/article/meghan-markle/history/publish
/api/contributor/michelle-garrett
/api/category/fashion
/api/recommendations?id=”meghan-markle”
/api/article/recommendation1
/api/article/recommendation2
It was a lot to deal
with.
CLEARLY WE HAD
ISSUES!
HOW WE SOLVED
THESE PROBLEMS
We had a spike, and
prototyped different
solutions to our
problems.
One was a refactor
based purely on domain
driven design.
...and the other was
GraphQL.
We chose GraphQL!
API
REACT
SSR
Redux
Hapi
API
REACT
SSR
Redux
Hapi
Business Logic
API
REACT
SRR
Hapi
Apollo
Client
REACT
SRR
Hapi
Apollo
Client
API
Business Logic
WHAT GRAPHQL
GAVE US
1. Instant
documentation
The GraphQL ecosystem
has tools that generate
documentation from
your schema.
GraphiQL
GraphQL Playground
Queries
you can
make
Arguments
to include
What data
you can
ask for
Our documentation is
now useful and stays up
to date with no effort.
We now know for sure
what data we can
request for our client
side application.
2. We no longer have to
fetch data with multiple
requests in our main
application.
/article/meghan-markle
/api/article/meghan-markle
/api/article/meghan-markle/history/publish
/api/contributor/michelle-garrett
/api/category/fashion
/api/recommendations?id=”meghan-markle”
/api/article/recommendation1
/api/article/recommendation2
Now we make
one query
Now we get data in a
clear, consistent way.
(We still have to make
the same requests, but
they now happen in the
GraphQL layer).
Our React application
doesn’t have to know
about it.
Our lives are much
easier now that we only
have to think about one
query.
3. It encouraged good
patterns of structuring
our app.
We started fetching only
the data we needed.
We stripped all business
logic out of our
components
(separation of concerns)
We used field names that
made sense, instead of
using what the API gave
us.
Our UI is no longer tied
to the API.
Disclaimer: We could’ve
done this WITHOUT
GraphQL
With more discipline, we
could have avoided some
of these problems.
There are programming
patterns that encourage
these principles.
Domain Driven Design
Hexagonal Architecture
GraphQL enforces these
patterns without
requiring developers to
police it themselves.
GraphQL allows you to
follow these patterns
without having to think
about it.
4. We have the insurance
that if we ever need to
change our data source,
most of our app will not be
affected.
Scenario: Condé Nast
might decide to switch
its CMS to Wordpress
API
REACT
APP
API
REACT
APP
Changing data sources
will only affect the
GraphQL layer which
shields the React app.
The impact is limited to
updating the functions
that resolve data for
each field in the schema.
The API we use might
completely be
rewritten but we are
resilient
We can now react more
easily to technology
changes. Our application
won’t be devastated.
WHY YOU MIGHT
USE GRAPHQL
1. You have a set of data
that needs to serve
multiple applications.
API
GraphQL is
“product-friendly”.
It has a lower barrier to
entry for new
consumers to the API.
Because it reduces the
burden on consumers to
perform logic.
API
API
Business Logic
API
API
Business Logic
It does not enforce a
specific way to
consume an API.
It gives consumers the
flexibility to request
data in the way they
want.
{
category(
slug: "beauty"
) {
articles (limit: 10) {
title
image {
url
alt
}
}
}
{
category(
slug: "beauty"
) {
images (limit: 10) {
url
alt
}
}
}
Your applications can
be totally different, but
seamlessly use the
same set of data.
2. You’re building an
application that uses
multiple data sources.
Scenario: Condé Nast
introduces an extra data
source: a shoes API for a
feed of shoes.
API API
You can build a
GraphQL layer to fetch
data from all your
sources.
Combine data from
anywhere, but only
interact with one
interface.
Note: GraphQL and
REST are not mutually
exclusive!
You can get data from
lots of places (including
REST APIs) and smoosh
it all together.
Possible data sources:
- REST APIs
- Other GraphQL APIs
- A database
- JSON in your file system
API
API
REACT
APP
Your resolver functions
will handle all the
complication behind
the scenes.
API
API
REACT
APP
Meanwhile on the
frontend, you’re living
the sweet GraphQL life.
3. You’re stuck with a
legacy API.
Does your application
rely on a really old API
with an ugly interface?
API
Wrap it in a GraphQL
layer!
You can design and use
a modern interface that
you actually like.
API
API
4. You want to enforce
structure in your code
base.
GraphQL encourages
good habits.
It will help you
separate your concerns.
It will encourage you to
remove logic specific to
3rd party APIs from
your client application.
5. You’ve built your
REST API like a
pseudo-GraphQL API
anyway.
Do you have endpoints
that fetch fields based
a query param?
/articles
/articles?
slug=meghan-markle
&fields=title|author|body
...it’s basically already
GraphQL.
Just make it
GraphQL!
6. Because it’s fun and
everyone else is doing
it* :)
6. Because it’s fun and
everyone else is doing
it* :)
*This isn’t the only reason you should choose a tool
TO SUMMARISE
- It gives you instant documentation.
- It’ll stop you having to make multiple
requests for data.
- It’ll help you to better structure your
code base.
- It shields your app from changing data
sources with a consistent interface.
WHY GRAPHQL IS NICE
- You have a set of data that needs to serve
multiple applications.
- You’re building an application that uses
multiple data sources.
- You’re stuck with a legacy API.
- You want to enforce better structure in your
code base.
- Your REST API already fetches fields based
on a query param.
REASONS TO USE GRAPHQL
I HAVE DELUXE STICKERS
@msmichellegar
THANK YOU!

Weitere ähnliche Inhalte

Was ist angesagt?

2008.07.17 발표
2008.07.17 발표2008.07.17 발표
2008.07.17 발표
Sunjoo Park
 
Finding Love with MongoDB
Finding Love with MongoDBFinding Love with MongoDB
Finding Love with MongoDB
MongoDB
 
2005 - .NET Chaostage: 1st class data driven applications with ASP.NET 2.0
2005 - .NET Chaostage: 1st class data driven applications with ASP.NET 2.02005 - .NET Chaostage: 1st class data driven applications with ASP.NET 2.0
2005 - .NET Chaostage: 1st class data driven applications with ASP.NET 2.0
Daniel Fisher
 
Accelerating distributed joins in Apache Hive: Runtime filtering enhancements
Accelerating distributed joins in Apache Hive: Runtime filtering enhancementsAccelerating distributed joins in Apache Hive: Runtime filtering enhancements
Accelerating distributed joins in Apache Hive: Runtime filtering enhancements
Panagiotis Garefalakis
 
P H P Part I I, By Kian
P H P  Part  I I,  By  KianP H P  Part  I I,  By  Kian
P H P Part I I, By Kian
phelios
 

Was ist angesagt? (16)

Open Policy Agent Deep Dive Seattle 2018
Open Policy Agent Deep Dive Seattle 2018Open Policy Agent Deep Dive Seattle 2018
Open Policy Agent Deep Dive Seattle 2018
 
Thinking in react
Thinking in reactThinking in react
Thinking in react
 
Query Classification on Steroids with BERT
Query Classification on Steroids with BERTQuery Classification on Steroids with BERT
Query Classification on Steroids with BERT
 
[@IndeedEng] Building Indeed Resume Search
[@IndeedEng] Building Indeed Resume Search[@IndeedEng] Building Indeed Resume Search
[@IndeedEng] Building Indeed Resume Search
 
2008.07.17 발표
2008.07.17 발표2008.07.17 발표
2008.07.17 발표
 
Finding Love with MongoDB
Finding Love with MongoDBFinding Love with MongoDB
Finding Love with MongoDB
 
Introduction to GraphQL: Mobile Week SF
Introduction to GraphQL: Mobile Week SFIntroduction to GraphQL: Mobile Week SF
Introduction to GraphQL: Mobile Week SF
 
Redux Form | ReactJS Tutorial for Beginners | React Redux Tutorial | ReactJS ...
Redux Form | ReactJS Tutorial for Beginners | React Redux Tutorial | ReactJS ...Redux Form | ReactJS Tutorial for Beginners | React Redux Tutorial | ReactJS ...
Redux Form | ReactJS Tutorial for Beginners | React Redux Tutorial | ReactJS ...
 
Let's your users share your App with Friends: App Invites for Android
 Let's your users share your App with Friends: App Invites for Android Let's your users share your App with Friends: App Invites for Android
Let's your users share your App with Friends: App Invites for Android
 
Gaining the Knowledge of the Open Data Protocol (OData) - Prairie Dev Con
Gaining the Knowledge of the Open Data Protocol (OData) - Prairie Dev ConGaining the Knowledge of the Open Data Protocol (OData) - Prairie Dev Con
Gaining the Knowledge of the Open Data Protocol (OData) - Prairie Dev Con
 
2005 - .NET Chaostage: 1st class data driven applications with ASP.NET 2.0
2005 - .NET Chaostage: 1st class data driven applications with ASP.NET 2.02005 - .NET Chaostage: 1st class data driven applications with ASP.NET 2.0
2005 - .NET Chaostage: 1st class data driven applications with ASP.NET 2.0
 
Querying data on the Web – client or server?
Querying data on the Web – client or server?Querying data on the Web – client or server?
Querying data on the Web – client or server?
 
Linking media, data, and services
Linking media, data, and servicesLinking media, data, and services
Linking media, data, and services
 
Accelerating distributed joins in Apache Hive: Runtime filtering enhancements
Accelerating distributed joins in Apache Hive: Runtime filtering enhancementsAccelerating distributed joins in Apache Hive: Runtime filtering enhancements
Accelerating distributed joins in Apache Hive: Runtime filtering enhancements
 
P H P Part I I, By Kian
P H P  Part  I I,  By  KianP H P  Part  I I,  By  Kian
P H P Part I I, By Kian
 
P1C3 Etiquetas JavaServer Faces al detalle
P1C3 Etiquetas JavaServer Faces al detalleP1C3 Etiquetas JavaServer Faces al detalle
P1C3 Etiquetas JavaServer Faces al detalle
 

Ähnlich wie Michelle Garrett - Build the API you want to see in the world (with GraphQL) - Codemotion Berlin 2018

Ähnlich wie Michelle Garrett - Build the API you want to see in the world (with GraphQL) - Codemotion Berlin 2018 (20)

GraphQL over REST at Reactathon 2018
GraphQL over REST at Reactathon 2018GraphQL over REST at Reactathon 2018
GraphQL over REST at Reactathon 2018
 
GraphQL across the stack: How everything fits together
GraphQL across the stack: How everything fits togetherGraphQL across the stack: How everything fits together
GraphQL across the stack: How everything fits together
 
Scaling Your Team With GraphQL: Why Relationships Matter
Scaling Your Team With GraphQL: Why Relationships MatterScaling Your Team With GraphQL: Why Relationships Matter
Scaling Your Team With GraphQL: Why Relationships Matter
 
Graphql
GraphqlGraphql
Graphql
 
Wrapping and securing REST APIs with GraphQL
Wrapping and securing REST APIs with GraphQLWrapping and securing REST APIs with GraphQL
Wrapping and securing REST APIs with GraphQL
 
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
 
apidays LIVE Paris - GraphQL meshes by Jens Neuse
apidays LIVE Paris - GraphQL meshes by Jens Neuseapidays LIVE Paris - GraphQL meshes by Jens Neuse
apidays LIVE Paris - GraphQL meshes by Jens Neuse
 
Graphql presentation
Graphql presentationGraphql presentation
Graphql presentation
 
GraphQL research summary
GraphQL research summaryGraphQL research summary
GraphQL research summary
 
Serverless GraphQL for Product Developers
Serverless GraphQL for Product DevelopersServerless GraphQL for Product Developers
Serverless GraphQL for Product Developers
 
How easy (or hard) it is to monitor your graph ql service performance
How easy (or hard) it is to monitor your graph ql service performanceHow easy (or hard) it is to monitor your graph ql service performance
How easy (or hard) it is to monitor your graph ql service performance
 
React Flux to GraphQL
React Flux to GraphQLReact Flux to GraphQL
React Flux to GraphQL
 
REST API Graph API GraphQL GraphiQL Presentation
REST API Graph API  GraphQL GraphiQL Presentation REST API Graph API  GraphQL GraphiQL Presentation
REST API Graph API GraphQL GraphiQL Presentation
 
Professional JavaScript: AntiPatterns
Professional JavaScript: AntiPatternsProfessional JavaScript: AntiPatterns
Professional JavaScript: AntiPatterns
 
GraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdfGraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdf
 
Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0
 
Agile Data Science
Agile Data ScienceAgile Data Science
Agile Data Science
 
Tutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHPTutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHP
 
Big Data Transformation Powered By Apache Spark.pptx
Big Data Transformation Powered By Apache Spark.pptxBig Data Transformation Powered By Apache Spark.pptx
Big Data Transformation Powered By Apache Spark.pptx
 
Big Data Transformations Powered By Spark
Big Data Transformations Powered By SparkBig Data Transformations Powered By Spark
Big Data Transformations Powered By Spark
 

Mehr von Codemotion

Mehr von Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Kürzlich hochgeladen (20)

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 

Michelle Garrett - Build the API you want to see in the world (with GraphQL) - Codemotion Berlin 2018