SlideShare a Scribd company logo
How Optimizely scaled 

its REST API with asyncio
Nick DiRienzo
@nickdirienzo
Software Engineer
Optimizely
@Optimizely
Vinay Tota
@vinaytota
Senior Software Engineer
Optimizely
We’ll talk about:
• Optimizely’s API story
• What makes an API “good”
• Optimizely’s API gateway
• Improving it with asyncio
• Lessons learned
Where we started
Where we started
Where we started
Optimizely Classic was an
A/B Testing Solution
Optimizely X is an experimentation platform
Optimizely X Web
Visual Editor Based Experimentation
Optimizely X Full Stack
Code Based Experimentation
Optimizely X Web
Visual Editor Based Experimentation
Optimizely X Full Stack
Code Based Experimentation
Optimizely X Web
Visual Editor Based Experimentation
Experimentation Platform
What is happening?
How can we turn a good web UI into
a good API?
What makes an API “good”?
Easy to use APIs
What makes an API “good”?
More than mapping a data model to an
HTTP endpoint
API is the UI for developers
TODO: Add results slide.
Getting Optimizely Results
1. Get Experiment data
Getting Optimizely Results
1. Get Experiment data
2. Get Layer data
Getting Optimizely Results
1. Get Experiment data
2. Get Layer data (whatever that is)
Getting Optimizely Results
1. Get Experiment data
2. Get Layer data (whatever that is)
3. Get Project Settings
Getting Optimizely Results
1. Get Experiment data
2. Get Layer data (whatever that is)
3. Get Project Settings
4. Get results data
1. Get Experiment data
2. Get Layer data (whatever that is)
3. Get Project Settings
4. Get results data
GET /v2/experiments/:id/results
Getting Optimizely Results
Easy to use APIs
What makes an API “good”?
Ensured Trust
Build a business on our APIs
How do we ensure trust?
No surprises
How do we ensure trust?
No surprises
Reliable platform
How do we ensure trust?
No surprises
Reliable platform
Performant platform
Trust can be made with:
Interface Stability
Interface stability means...
Beta & Stable APIs
Interface stability means...
Beta & Stable APIs
No breaking
changes
Interface stability means...
Beta & Stable APIs
No breaking
changes
Versioning
Trust can be made with:
Interface Stability
Reliability
99.999%
Trust can be made with:
Interface Stability
Reliability
Performance
Performance is mission critical
Performance can be a

dealbreaker
Trust can be made with:
Interface Stability
Reliability
Performance
Easy to use APIs
What makes an API “good”?
Ensured Trust Documentation
Write documentation
Write documentation
Generate documentation
Generate documentation with
swagger-ui to ensure docs
are...
Generate documentation with
swagger-ui to ensure docs
are...
Up to Date
Generate documentation with
swagger-ui to ensure docs
are...
Up to Date Comprehensive
Generate documentation with
swagger-ui to ensure docs
are...
Up to Date Comprehensive Accurate
Easy to use APIs
What makes an API “good”?
Ensured Trust Documentation
How can we provide

“good” APIs?
How can we provide
“good” APIs?
Getting Optimizely Results
1. Get Experiment data
2. Get Layer data (whatever that is)
3. Get Project Settings
4. Get results data
1. Get Experiment data
2. Get Layer data (whatever that is)
3. Get Project Settings
4. Get results data
/v2/experiments/:id/results
Getting Optimizely Results
We’ve got data all over
We’ve got data all over
Experiments
We’ve got data all over
Experiments Projects
We’ve got data all over
Experiments Projects Results
We’ve got data all over
Experiments Projects Results
API
Gateway
Benefits of an API gateway
Operations through the API look a lot like
their web UI counterparts

Benefits of an API gateway
Operations through the API look a lot like
their web UI counterparts
Allows us to orchestrate APIs instead of
data models

Benefits of an API gateway
Operations through the API look a lot like
their web UI counterparts
Allows us to orchestrate APIs instead of
data models



Pulls problems away from business logic
into a higher-level



Benefits of an API gateway
Operations through the API look a lot like
their web UI counterparts
Allows us to orchestrate APIs instead of
data models



Pulls problems away from business logic
into a higher-level



Internal and external consumers go
through the same application



api.optimizely.com What we’ve got
Python 3 + Pyramid + pyramid_swagger
We need to do a bunch of things in parallel...
Pyramid and Multiprocessing
with multiprocessing.Pool() as pool, multiprocessing.Manager() as manager:

response_queue = manager.Queue()

try:

# send our requests get back responses from the response_queue

finally:

pool.join()

pool.terminate()
Pyramid and Multiprocessing
with multiprocessing.Pool() as pool, multiprocessing.Manager() as manager:

response_queue = manager.Queue()

try:

# send our requests get back responses from the response_queue

finally:

pool.join()

pool.terminate()
Pyramid and Multiprocessing
with multiprocessing.Pool() as pool, multiprocessing.Manager() as manager:

response_queue = manager.Queue()

try:

# send our requests get back responses from the response_queue

finally:

pool.join()

pool.terminate()
Pyramid and Multiprocessing
with multiprocessing.Pool() as pool, multiprocessing.Manager() as manager:

response_queue = manager.Queue()

try:

# send our requests get back responses from the response_queue

finally:

pool.join()

pool.terminate()
An Unhealthy Situation
AWS Elastic Load Balancer 5XX
An Unhealthy Situation
Textbook case for non blocking IO
AWS Elastic Load Balancer 5XX
Not the Experience We Want
Blocking IO: “Normal” PythonApplicationKernel
Start
Blocking IO: “Normal” PythonApplicationKernel
Start read()
Blocking IO: “Normal” PythonApplicationKernel
Start read()
Initiate read
Blocking IO: “Normal” PythonApplicationKernel
Start read()
Initiate read
Receive
response
Blocking IO: “Normal” PythonApplicationKernel
Start read()
Initiate read
read()
returns
Receive
response
Blocking IO: “Normal” PythonApplicationKernel
Start read()
Initiate read
read()
returns
Receive
response
Nonblocking IOApplicationKernel
Start
Nonblocking IOApplicationKernel
Start read()
Nonblocking IOApplicationKernel
Start read()
Initiate read,
returns
immediately
Nonblocking IOApplicationKernel
Start read()
Initiate read,
returns
immediately
poll()until
data has arrived
Nonblocking IOApplicationKernel
Start read()
Initiate read,
returns
immediately
Receive
response
poll()until
data has arrived
Nonblocking IOApplicationKernel
Start read()
Initiate read,
returns
immediately
read()
Receive
response
poll()until
data has arrived
Nonblocking IOApplicationKernel
Start read()
Initiate read,
returns
immediately
read()
Receive
response
poll()until
data has arrived
Nonblocking IOApplicationKernel
poll(5)
Nonblocking IOApplicationKernel
poll(5) poll(5)
Nonblocking IOApplicationKernel
poll(5) poll(5)poll(5)
Nonblocking IOApplicationKernel
Receive
response
poll(5) poll(5)poll(5)
Nonblocking IOApplicationKernel
read()
Receive
response
poll(5) poll(5)poll(5)
Nonblocking IOApplicationKernel
read()
Receive
response
poll(5) poll(5)poll(5)
Non Blocking IO
Tw
isted
N
odeJS
Tornado
2002
N
etty2004 20092006
EventM
achine
2008
Eventlet
2015
Asyncio
2012
G
o/G
orutines
What’s it good for?
Proxy
What’s it good for?
Proxy
What’s it good for?
Push Updates/Chat
What’s it good for?
Push Updates/Chat
How do you schedule this work?
What framework?
Enter Asyncio
Python 3.4
async def i_take_a_while():
print('slow func start')
await asyncio.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_take_a_while()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_take_a_whilei_run_fast
async def i_take_a_while():
print('slow func start')
await asyncio.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_take_a_while()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_take_a_whilei_run_fast
async def i_take_a_while():
print('slow func start')
await asyncio.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_take_a_while()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_take_a_whilei_run_fast
fast func
start
async def i_take_a_while():
print('slow func start')
await asyncio.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_take_a_while()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_take_a_whilei_run_fast
fast func
start
async def i_take_a_while():
print('slow func start')
await asyncio.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_take_a_while()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_take_a_whilei_run_fast
slow func
start
fast func
start
async def i_take_a_while():
print('slow func start')
await asyncio.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_take_a_while()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_take_a_whilei_run_fast
slow func
start
fast func
start
async def i_take_a_while():
print('slow func start')
await asyncio.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_take_a_while()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_take_a_whilei_run_fast
slow func
start
fast func
start
async def i_take_a_while():
print('slow func start')
await asyncio.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_take_a_while()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_take_a_whilei_run_fast
slow func
start
fast func
start
1 sec after start
fast func
done
async def i_take_a_while():
print('slow func start')
await asyncio.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_take_a_while()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_take_a_whilei_run_fast
slow func
start
fast func
start
1 sec after start
fast func
done
async def i_take_a_while():
print('slow func start')
await asyncio.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_take_a_while()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_take_a_whilei_run_fast
slow func
start
fast func
start
1 sec after start
fast func
done
async def i_take_a_while():
print('slow func start')
await asyncio.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_take_a_while()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_take_a_whilei_run_fast
slow func
start
fast func
start
1 sec after start
fast func
done
3 sec after start
slow func
done
Blocking -> Asyncio
Gunicorn Pyramid Pyramid View
Blocking -> Asyncio
Gunicorn Pyramid Pyramid View
Switch to asyncio worker class http://
docs.gunicorn.org/en/stable/design.html#asyncio-
workers
Blocking -> Asyncio
Gunicorn Pyramid Pyramid View
Switch to aiopyramid https://github.com/housleyjk/aiopyramid
Blocking -> Asyncio
Gunicorn Pyramid Pyramid View
We can rewrite the views incrementally? Right?
async def i_block():
print('slow func start')
time.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_block()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_blocki_run_fast
async def i_block():
print('slow func start')
time.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_block()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_blocki_run_fast
fast func
start
async def i_block():
print('slow func start')
time.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_block()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_blocki_run_fast
fast func
start
async def i_block():
print('slow func start')
time.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_block()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_blocki_run_fast
block func
start
fast func
start
async def i_block():
print('slow func start')
time.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_block()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_blocki_run_fast
block func
start
fast func
start
async def i_block():
print('slow func start')
time.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_block()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_blocki_run_fast
block func
start
fast func
start
3 sec later
block func
done
async def i_block():
print('slow func start')
time.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_block()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_blocki_run_fast
block func
start
fast func
start
3 sec later
block func
done
async def i_block():
print('slow func start')
time.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_block()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_blocki_run_fast
block func
start
fast func
start
3 sec later
block func
done
async def i_block():
print('slow func start')
time.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_block()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_blocki_run_fast
block func
start
fast func
start
3 sec later
block func
done
async def i_block():
print('slow func start')
time.sleep(3)
print('slow func done')
async def i_run_fast():
print('fast func start')
await asyncio.sleep(1)
print('fast func done')
async def run_me():
await asyncio.gather(
i_run_fast(),
i_block()
)
loop = asyncio.get_event_loop()

loop.run_until_complete(run_me())

loop.close()
Event loop i_blocki_run_fast
block func
start
fast func
start
3 sec later
block func
done
fast func
done
Blocking and Nonblocking IO Don’t Mix
Blocking and Nonblocking IO Don’t Mix
asyncio all the things
asyncio all the things
How Do You Make Big Changes?
How Do You Make Big Changes?
How Do You Make Big Changes?
Code is Social
Code is Social
• Better make sure it actually works!
Code is Social
• Better make sure it actually works!
• Pull Request Open 3+ weeks
Code is Social
• Better make sure it actually works!
• Pull Request Open 3+ weeks
• Everyone on team added as a reviewer
Code is Social
• Better make sure it actually works!
• Pull Request Open 3+ weeks
• Everyone on team added as a reviewer
• 63 comments on Pull Request
Code is Social
• Better make sure it actually works!
• Pull Request Open 3+ weeks
• Everyone on team added as a reviewer
• 63 comments on Pull Request
• Meetings for questions/concerns
Happily ever after
AWS Elastic Load Balancer 5XX
Happily ever after
AWS Elastic Load Balancer 5XX
Happily ever after
99th percentile latency
Happily ever after
99th percentile latency
asyncio
• asyncio from the start is ideal
asyncio
• asyncio from the start is ideal
• But can add it later if you have to
asyncio
• asyncio from the start is ideal
• But can add it later if you have to
• Still early, but support will only improve
asyncio
Good APIs are Hard

Good APIs are Hard

• Lots of details to get right
Good APIs are Hard

• Lots of details to get right
• Using the right technologies helps
Good APIs are Hard

• Lots of details to get right
• Using the right technologies helps
• Always keep iterating and improving
Come visit us at our booth!
@Optimizely
Try out Optimizely:
optimizely.com/get-started
Q&A

More Related Content

What's hot

Dan Cuellar
Dan CuellarDan Cuellar
Dan Cuellar
CodeFest
 
Story Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium FrameworkStory Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium Framework
Oleksiy Rezchykov
 
Continuous everything
Continuous everythingContinuous everything
Continuous everything
TEST Huddle
 
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Applitools
 
Best Practices for a Repeatable Shift-Left Commitment
Best Practices for a Repeatable Shift-Left CommitmentBest Practices for a Repeatable Shift-Left Commitment
Best Practices for a Repeatable Shift-Left Commitment
Applause
 
Jenkins as the Test Reporting Framework
Jenkins as the Test Reporting FrameworkJenkins as the Test Reporting Framework
Jenkins as the Test Reporting Framework
Nitin Sharma
 
Visual Studio 2010 Testing for Developers
Visual Studio 2010 Testing for DevelopersVisual Studio 2010 Testing for Developers
Visual Studio 2010 Testing for Developers
Steve Lange
 
Visual Studio LightSwitch (Beta 1) Overview
Visual Studio LightSwitch (Beta 1) OverviewVisual Studio LightSwitch (Beta 1) Overview
Visual Studio LightSwitch (Beta 1) Overview
Steve Lange
 
STARWest: Use Jenkins For Continuous 
Load Testing And Mobile Test Automation
STARWest: Use Jenkins For Continuous 
Load Testing And Mobile Test AutomationSTARWest: Use Jenkins For Continuous 
Load Testing And Mobile Test Automation
STARWest: Use Jenkins For Continuous 
Load Testing And Mobile Test Automation
Clever Moe
 
Use Jenkins For Continuous Load Testing And Mobile Test Automation
Use Jenkins For Continuous Load Testing And Mobile Test AutomationUse Jenkins For Continuous Load Testing And Mobile Test Automation
Use Jenkins For Continuous Load Testing And Mobile Test Automation
Clever Moe
 
DevOps - Agile on Steroids by Tom Clement Oketch and Augustine Kisitu
DevOps - Agile on Steroids by Tom Clement Oketch and Augustine KisituDevOps - Agile on Steroids by Tom Clement Oketch and Augustine Kisitu
DevOps - Agile on Steroids by Tom Clement Oketch and Augustine Kisitu
Thoughtworks
 
Shipping to Learn and Accelerate Growth with GitHub
Shipping to Learn and Accelerate Growth with GitHubShipping to Learn and Accelerate Growth with GitHub
Shipping to Learn and Accelerate Growth with GitHub
Optimizely
 
Test Automation With Cucumber JVM, Selenium, and Mocha
Test Automation With Cucumber JVM, Selenium, and MochaTest Automation With Cucumber JVM, Selenium, and Mocha
Test Automation With Cucumber JVM, Selenium, and Mocha
Salesforce Developers
 
Delivery With Chef - ChefConf 2015
Delivery With Chef - ChefConf 2015 Delivery With Chef - ChefConf 2015
Delivery With Chef - ChefConf 2015
Chef
 
Automated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and JenkinsAutomated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and Jenkins
Work at Play
 
Running JMeter Tests In Appvance PerformanceCloud
Running JMeter Tests In Appvance PerformanceCloudRunning JMeter Tests In Appvance PerformanceCloud
Running JMeter Tests In Appvance PerformanceCloud
Clever Moe
 
Use Automation to Assist -Not Replace- Manual Testing
Use Automation to Assist -Not Replace- Manual TestingUse Automation to Assist -Not Replace- Manual Testing
Use Automation to Assist -Not Replace- Manual Testing
SmartBear
 
Continuous Integration, Deploy, Test From Beginning To End 2014
Continuous Integration, Deploy, Test From Beginning To End 2014Continuous Integration, Deploy, Test From Beginning To End 2014
Continuous Integration, Deploy, Test From Beginning To End 2014
Clever Moe
 
CloudBees Continuous Integration and Test with Appvance PerformanceCloud
CloudBees Continuous Integration and Test with Appvance PerformanceCloudCloudBees Continuous Integration and Test with Appvance PerformanceCloud
CloudBees Continuous Integration and Test with Appvance PerformanceCloud
Clever Moe
 
Testing Ajax, Mobile Apps the Agile Way
Testing Ajax, Mobile Apps the Agile WayTesting Ajax, Mobile Apps the Agile Way
Testing Ajax, Mobile Apps the Agile Way
Clever Moe
 

What's hot (20)

Dan Cuellar
Dan CuellarDan Cuellar
Dan Cuellar
 
Story Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium FrameworkStory Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium Framework
 
Continuous everything
Continuous everythingContinuous everything
Continuous everything
 
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
 
Best Practices for a Repeatable Shift-Left Commitment
Best Practices for a Repeatable Shift-Left CommitmentBest Practices for a Repeatable Shift-Left Commitment
Best Practices for a Repeatable Shift-Left Commitment
 
Jenkins as the Test Reporting Framework
Jenkins as the Test Reporting FrameworkJenkins as the Test Reporting Framework
Jenkins as the Test Reporting Framework
 
Visual Studio 2010 Testing for Developers
Visual Studio 2010 Testing for DevelopersVisual Studio 2010 Testing for Developers
Visual Studio 2010 Testing for Developers
 
Visual Studio LightSwitch (Beta 1) Overview
Visual Studio LightSwitch (Beta 1) OverviewVisual Studio LightSwitch (Beta 1) Overview
Visual Studio LightSwitch (Beta 1) Overview
 
STARWest: Use Jenkins For Continuous 
Load Testing And Mobile Test Automation
STARWest: Use Jenkins For Continuous 
Load Testing And Mobile Test AutomationSTARWest: Use Jenkins For Continuous 
Load Testing And Mobile Test Automation
STARWest: Use Jenkins For Continuous 
Load Testing And Mobile Test Automation
 
Use Jenkins For Continuous Load Testing And Mobile Test Automation
Use Jenkins For Continuous Load Testing And Mobile Test AutomationUse Jenkins For Continuous Load Testing And Mobile Test Automation
Use Jenkins For Continuous Load Testing And Mobile Test Automation
 
DevOps - Agile on Steroids by Tom Clement Oketch and Augustine Kisitu
DevOps - Agile on Steroids by Tom Clement Oketch and Augustine KisituDevOps - Agile on Steroids by Tom Clement Oketch and Augustine Kisitu
DevOps - Agile on Steroids by Tom Clement Oketch and Augustine Kisitu
 
Shipping to Learn and Accelerate Growth with GitHub
Shipping to Learn and Accelerate Growth with GitHubShipping to Learn and Accelerate Growth with GitHub
Shipping to Learn and Accelerate Growth with GitHub
 
Test Automation With Cucumber JVM, Selenium, and Mocha
Test Automation With Cucumber JVM, Selenium, and MochaTest Automation With Cucumber JVM, Selenium, and Mocha
Test Automation With Cucumber JVM, Selenium, and Mocha
 
Delivery With Chef - ChefConf 2015
Delivery With Chef - ChefConf 2015 Delivery With Chef - ChefConf 2015
Delivery With Chef - ChefConf 2015
 
Automated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and JenkinsAutomated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and Jenkins
 
Running JMeter Tests In Appvance PerformanceCloud
Running JMeter Tests In Appvance PerformanceCloudRunning JMeter Tests In Appvance PerformanceCloud
Running JMeter Tests In Appvance PerformanceCloud
 
Use Automation to Assist -Not Replace- Manual Testing
Use Automation to Assist -Not Replace- Manual TestingUse Automation to Assist -Not Replace- Manual Testing
Use Automation to Assist -Not Replace- Manual Testing
 
Continuous Integration, Deploy, Test From Beginning To End 2014
Continuous Integration, Deploy, Test From Beginning To End 2014Continuous Integration, Deploy, Test From Beginning To End 2014
Continuous Integration, Deploy, Test From Beginning To End 2014
 
CloudBees Continuous Integration and Test with Appvance PerformanceCloud
CloudBees Continuous Integration and Test with Appvance PerformanceCloudCloudBees Continuous Integration and Test with Appvance PerformanceCloud
CloudBees Continuous Integration and Test with Appvance PerformanceCloud
 
Testing Ajax, Mobile Apps the Agile Way
Testing Ajax, Mobile Apps the Agile WayTesting Ajax, Mobile Apps the Agile Way
Testing Ajax, Mobile Apps the Agile Way
 

Similar to How Optimizely Scaled its REST API with asyncio

Gentle App Engine Intro
Gentle App Engine IntroGentle App Engine Intro
Gentle App Engine Intro
robinb123
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
gturnquist
 
Building A Great API - Evan Cooke, Cloudstock, December 2010
Building A Great API - Evan Cooke, Cloudstock, December 2010Building A Great API - Evan Cooke, Cloudstock, December 2010
Building A Great API - Evan Cooke, Cloudstock, December 2010
Twilio Inc
 
I Love APIs - Oct 2015
I Love APIs - Oct 2015I Love APIs - Oct 2015
I Love APIs - Oct 2015
Mike McNeil
 
How to Design and Build a Great Web API
How to Design and Build a Great Web APIHow to Design and Build a Great Web API
How to Design and Build a Great Web API
LaunchAny
 
Swift meetup22june2015
Swift meetup22june2015Swift meetup22june2015
Swift meetup22june2015
Claire Townend Gee
 
APIdays Paris 2019 Backend is the new frontend by Antoine Cheron
APIdays Paris 2019 Backend is the new frontend by Antoine CheronAPIdays Paris 2019 Backend is the new frontend by Antoine Cheron
APIdays Paris 2019 Backend is the new frontend by Antoine Cheron
apidays
 
What’s behind a high quality web API? Ensure your APIs are more than just a ...
What’s behind a high quality web API? Ensure your APIs are more than just a ...What’s behind a high quality web API? Ensure your APIs are more than just a ...
What’s behind a high quality web API? Ensure your APIs are more than just a ...
Kim Clark
 
API Product Opportunity Responsibility Nicolas Sierro 2015.pptx
API Product Opportunity Responsibility Nicolas Sierro 2015.pptxAPI Product Opportunity Responsibility Nicolas Sierro 2015.pptx
API Product Opportunity Responsibility Nicolas Sierro 2015.pptx
Blockchainizator
 
Your API is not a Website!
Your API is not a Website!Your API is not a Website!
Your API is not a Website!
Apigee | Google Cloud
 
Creating a World-Class RESTful Web Services API
Creating a World-Class RESTful Web Services APICreating a World-Class RESTful Web Services API
Creating a World-Class RESTful Web Services API
David Keener
 
NPR API: Create Once Publish Everywhere
NPR API: Create Once Publish EverywhereNPR API: Create Once Publish Everywhere
NPR API: Create Once Publish Everywhere
zachbrand
 
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIsThe liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
Jorge Ferrer
 
Clickslide Datadipity Beta V1
Clickslide Datadipity Beta V1Clickslide Datadipity Beta V1
Clickslide Datadipity Beta V1
Gabriel Ortiz
 
The Present and Future of Mobile Test Automation with Appium
The Present and Future of Mobile Test Automation with AppiumThe Present and Future of Mobile Test Automation with Appium
The Present and Future of Mobile Test Automation with Appium
TechWell
 
The Next Step to Build Better APIs — Consistent Data Structure
The Next Step to Build Better APIs — Consistent Data StructureThe Next Step to Build Better APIs — Consistent Data Structure
The Next Step to Build Better APIs — Consistent Data Structure
Dialexa
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Bram Adams
 
Progressive EPiServer Development
Progressive EPiServer DevelopmentProgressive EPiServer Development
Progressive EPiServer Development
joelabrahamsson
 
Practices and tools for building better APIs
Practices and tools for building better APIsPractices and tools for building better APIs
Practices and tools for building better APIs
NLJUG
 
Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)
Peter Hendriks
 

Similar to How Optimizely Scaled its REST API with asyncio (20)

Gentle App Engine Intro
Gentle App Engine IntroGentle App Engine Intro
Gentle App Engine Intro
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
 
Building A Great API - Evan Cooke, Cloudstock, December 2010
Building A Great API - Evan Cooke, Cloudstock, December 2010Building A Great API - Evan Cooke, Cloudstock, December 2010
Building A Great API - Evan Cooke, Cloudstock, December 2010
 
I Love APIs - Oct 2015
I Love APIs - Oct 2015I Love APIs - Oct 2015
I Love APIs - Oct 2015
 
How to Design and Build a Great Web API
How to Design and Build a Great Web APIHow to Design and Build a Great Web API
How to Design and Build a Great Web API
 
Swift meetup22june2015
Swift meetup22june2015Swift meetup22june2015
Swift meetup22june2015
 
APIdays Paris 2019 Backend is the new frontend by Antoine Cheron
APIdays Paris 2019 Backend is the new frontend by Antoine CheronAPIdays Paris 2019 Backend is the new frontend by Antoine Cheron
APIdays Paris 2019 Backend is the new frontend by Antoine Cheron
 
What’s behind a high quality web API? Ensure your APIs are more than just a ...
What’s behind a high quality web API? Ensure your APIs are more than just a ...What’s behind a high quality web API? Ensure your APIs are more than just a ...
What’s behind a high quality web API? Ensure your APIs are more than just a ...
 
API Product Opportunity Responsibility Nicolas Sierro 2015.pptx
API Product Opportunity Responsibility Nicolas Sierro 2015.pptxAPI Product Opportunity Responsibility Nicolas Sierro 2015.pptx
API Product Opportunity Responsibility Nicolas Sierro 2015.pptx
 
Your API is not a Website!
Your API is not a Website!Your API is not a Website!
Your API is not a Website!
 
Creating a World-Class RESTful Web Services API
Creating a World-Class RESTful Web Services APICreating a World-Class RESTful Web Services API
Creating a World-Class RESTful Web Services API
 
NPR API: Create Once Publish Everywhere
NPR API: Create Once Publish EverywhereNPR API: Create Once Publish Everywhere
NPR API: Create Once Publish Everywhere
 
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIsThe liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
The liferay case: lessons learned evolving from RPC to Hypermedia REST APIs
 
Clickslide Datadipity Beta V1
Clickslide Datadipity Beta V1Clickslide Datadipity Beta V1
Clickslide Datadipity Beta V1
 
The Present and Future of Mobile Test Automation with Appium
The Present and Future of Mobile Test Automation with AppiumThe Present and Future of Mobile Test Automation with Appium
The Present and Future of Mobile Test Automation with Appium
 
The Next Step to Build Better APIs — Consistent Data Structure
The Next Step to Build Better APIs — Consistent Data StructureThe Next Step to Build Better APIs — Consistent Data Structure
The Next Step to Build Better APIs — Consistent Data Structure
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!
 
Progressive EPiServer Development
Progressive EPiServer DevelopmentProgressive EPiServer Development
Progressive EPiServer Development
 
Practices and tools for building better APIs
Practices and tools for building better APIsPractices and tools for building better APIs
Practices and tools for building better APIs
 
Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)
 

More from Optimizely

Clover Rings Up Digital Growth to Drive Experimentation
Clover Rings Up Digital Growth to Drive ExperimentationClover Rings Up Digital Growth to Drive Experimentation
Clover Rings Up Digital Growth to Drive Experimentation
Optimizely
 
Make Every Touchpoint Count: How to Drive Revenue in an Increasingly Online W...
Make Every Touchpoint Count: How to Drive Revenue in an Increasingly Online W...Make Every Touchpoint Count: How to Drive Revenue in an Increasingly Online W...
Make Every Touchpoint Count: How to Drive Revenue in an Increasingly Online W...
Optimizely
 
The Science of Getting Testing Right
The Science of Getting Testing RightThe Science of Getting Testing Right
The Science of Getting Testing Right
Optimizely
 
Atlassian's Mystique CLI, Minimizing the Experiment Development Cycle
Atlassian's Mystique CLI, Minimizing the Experiment Development CycleAtlassian's Mystique CLI, Minimizing the Experiment Development Cycle
Atlassian's Mystique CLI, Minimizing the Experiment Development Cycle
Optimizely
 
Autotrader Case Study: Migrating from Home-Grown Testing to Best-in-Class Too...
Autotrader Case Study: Migrating from Home-Grown Testing to Best-in-Class Too...Autotrader Case Study: Migrating from Home-Grown Testing to Best-in-Class Too...
Autotrader Case Study: Migrating from Home-Grown Testing to Best-in-Class Too...
Optimizely
 
Zillow + Optimizely: Building the Bridge to $20 Billion Revenue
Zillow + Optimizely: Building the Bridge to $20 Billion RevenueZillow + Optimizely: Building the Bridge to $20 Billion Revenue
Zillow + Optimizely: Building the Bridge to $20 Billion Revenue
Optimizely
 
The Future of Optimizely for Technical Teams
The Future of Optimizely for Technical TeamsThe Future of Optimizely for Technical Teams
The Future of Optimizely for Technical Teams
Optimizely
 
Empowering Agents to Provide Service from Anywhere: Contact Centers in the Ti...
Empowering Agents to Provide Service from Anywhere: Contact Centers in the Ti...Empowering Agents to Provide Service from Anywhere: Contact Centers in the Ti...
Empowering Agents to Provide Service from Anywhere: Contact Centers in the Ti...
Optimizely
 
Experimentation Everywhere: Create Exceptional Online Shopping Experiences an...
Experimentation Everywhere: Create Exceptional Online Shopping Experiences an...Experimentation Everywhere: Create Exceptional Online Shopping Experiences an...
Experimentation Everywhere: Create Exceptional Online Shopping Experiences an...
Optimizely
 
Building an Experiment Pipeline for GitHub’s New Free Team Offering
Building an Experiment Pipeline for GitHub’s New Free Team OfferingBuilding an Experiment Pipeline for GitHub’s New Free Team Offering
Building an Experiment Pipeline for GitHub’s New Free Team Offering
Optimizely
 
AMC Networks Experiments Faster on the Server Side
AMC Networks Experiments Faster on the Server SideAMC Networks Experiments Faster on the Server Side
AMC Networks Experiments Faster on the Server Side
Optimizely
 
Evolving Experimentation from CRO to Product Development
Evolving Experimentation from CRO to Product DevelopmentEvolving Experimentation from CRO to Product Development
Evolving Experimentation from CRO to Product Development
Optimizely
 
Overcoming the Challenges of Experimentation on a Service Oriented Architecture
Overcoming the Challenges of Experimentation on a Service Oriented ArchitectureOvercoming the Challenges of Experimentation on a Service Oriented Architecture
Overcoming the Challenges of Experimentation on a Service Oriented Architecture
Optimizely
 
How The Zebra Utilized Feature Experiments To Increase Carrier Card Engagemen...
How The Zebra Utilized Feature Experiments To Increase Carrier Card Engagemen...How The Zebra Utilized Feature Experiments To Increase Carrier Card Engagemen...
How The Zebra Utilized Feature Experiments To Increase Carrier Card Engagemen...
Optimizely
 
Making Your Hypothesis Work Harder to Inform Future Product Strategy
Making Your Hypothesis Work Harder to Inform Future Product StrategyMaking Your Hypothesis Work Harder to Inform Future Product Strategy
Making Your Hypothesis Work Harder to Inform Future Product Strategy
Optimizely
 
Kick Your Assumptions: How Scholl's Test-Everything Culture Drives Revenue
Kick Your Assumptions: How Scholl's Test-Everything Culture Drives RevenueKick Your Assumptions: How Scholl's Test-Everything Culture Drives Revenue
Kick Your Assumptions: How Scholl's Test-Everything Culture Drives Revenue
Optimizely
 
Experimentation through Clients' Eyes
Experimentation through Clients' EyesExperimentation through Clients' Eyes
Experimentation through Clients' Eyes
Optimizely
 
Test Everything: TrustRadius Delivers Customer Value with Experimentation
Test Everything: TrustRadius Delivers Customer Value with ExperimentationTest Everything: TrustRadius Delivers Customer Value with Experimentation
Test Everything: TrustRadius Delivers Customer Value with Experimentation
Optimizely
 
Optimizely Agent: Scaling Resilient Feature Delivery
Optimizely Agent: Scaling Resilient Feature DeliveryOptimizely Agent: Scaling Resilient Feature Delivery
Optimizely Agent: Scaling Resilient Feature Delivery
Optimizely
 
The Future of Software Development
The Future of Software DevelopmentThe Future of Software Development
The Future of Software Development
Optimizely
 

More from Optimizely (20)

Clover Rings Up Digital Growth to Drive Experimentation
Clover Rings Up Digital Growth to Drive ExperimentationClover Rings Up Digital Growth to Drive Experimentation
Clover Rings Up Digital Growth to Drive Experimentation
 
Make Every Touchpoint Count: How to Drive Revenue in an Increasingly Online W...
Make Every Touchpoint Count: How to Drive Revenue in an Increasingly Online W...Make Every Touchpoint Count: How to Drive Revenue in an Increasingly Online W...
Make Every Touchpoint Count: How to Drive Revenue in an Increasingly Online W...
 
The Science of Getting Testing Right
The Science of Getting Testing RightThe Science of Getting Testing Right
The Science of Getting Testing Right
 
Atlassian's Mystique CLI, Minimizing the Experiment Development Cycle
Atlassian's Mystique CLI, Minimizing the Experiment Development CycleAtlassian's Mystique CLI, Minimizing the Experiment Development Cycle
Atlassian's Mystique CLI, Minimizing the Experiment Development Cycle
 
Autotrader Case Study: Migrating from Home-Grown Testing to Best-in-Class Too...
Autotrader Case Study: Migrating from Home-Grown Testing to Best-in-Class Too...Autotrader Case Study: Migrating from Home-Grown Testing to Best-in-Class Too...
Autotrader Case Study: Migrating from Home-Grown Testing to Best-in-Class Too...
 
Zillow + Optimizely: Building the Bridge to $20 Billion Revenue
Zillow + Optimizely: Building the Bridge to $20 Billion RevenueZillow + Optimizely: Building the Bridge to $20 Billion Revenue
Zillow + Optimizely: Building the Bridge to $20 Billion Revenue
 
The Future of Optimizely for Technical Teams
The Future of Optimizely for Technical TeamsThe Future of Optimizely for Technical Teams
The Future of Optimizely for Technical Teams
 
Empowering Agents to Provide Service from Anywhere: Contact Centers in the Ti...
Empowering Agents to Provide Service from Anywhere: Contact Centers in the Ti...Empowering Agents to Provide Service from Anywhere: Contact Centers in the Ti...
Empowering Agents to Provide Service from Anywhere: Contact Centers in the Ti...
 
Experimentation Everywhere: Create Exceptional Online Shopping Experiences an...
Experimentation Everywhere: Create Exceptional Online Shopping Experiences an...Experimentation Everywhere: Create Exceptional Online Shopping Experiences an...
Experimentation Everywhere: Create Exceptional Online Shopping Experiences an...
 
Building an Experiment Pipeline for GitHub’s New Free Team Offering
Building an Experiment Pipeline for GitHub’s New Free Team OfferingBuilding an Experiment Pipeline for GitHub’s New Free Team Offering
Building an Experiment Pipeline for GitHub’s New Free Team Offering
 
AMC Networks Experiments Faster on the Server Side
AMC Networks Experiments Faster on the Server SideAMC Networks Experiments Faster on the Server Side
AMC Networks Experiments Faster on the Server Side
 
Evolving Experimentation from CRO to Product Development
Evolving Experimentation from CRO to Product DevelopmentEvolving Experimentation from CRO to Product Development
Evolving Experimentation from CRO to Product Development
 
Overcoming the Challenges of Experimentation on a Service Oriented Architecture
Overcoming the Challenges of Experimentation on a Service Oriented ArchitectureOvercoming the Challenges of Experimentation on a Service Oriented Architecture
Overcoming the Challenges of Experimentation on a Service Oriented Architecture
 
How The Zebra Utilized Feature Experiments To Increase Carrier Card Engagemen...
How The Zebra Utilized Feature Experiments To Increase Carrier Card Engagemen...How The Zebra Utilized Feature Experiments To Increase Carrier Card Engagemen...
How The Zebra Utilized Feature Experiments To Increase Carrier Card Engagemen...
 
Making Your Hypothesis Work Harder to Inform Future Product Strategy
Making Your Hypothesis Work Harder to Inform Future Product StrategyMaking Your Hypothesis Work Harder to Inform Future Product Strategy
Making Your Hypothesis Work Harder to Inform Future Product Strategy
 
Kick Your Assumptions: How Scholl's Test-Everything Culture Drives Revenue
Kick Your Assumptions: How Scholl's Test-Everything Culture Drives RevenueKick Your Assumptions: How Scholl's Test-Everything Culture Drives Revenue
Kick Your Assumptions: How Scholl's Test-Everything Culture Drives Revenue
 
Experimentation through Clients' Eyes
Experimentation through Clients' EyesExperimentation through Clients' Eyes
Experimentation through Clients' Eyes
 
Test Everything: TrustRadius Delivers Customer Value with Experimentation
Test Everything: TrustRadius Delivers Customer Value with ExperimentationTest Everything: TrustRadius Delivers Customer Value with Experimentation
Test Everything: TrustRadius Delivers Customer Value with Experimentation
 
Optimizely Agent: Scaling Resilient Feature Delivery
Optimizely Agent: Scaling Resilient Feature DeliveryOptimizely Agent: Scaling Resilient Feature Delivery
Optimizely Agent: Scaling Resilient Feature Delivery
 
The Future of Software Development
The Future of Software DevelopmentThe Future of Software Development
The Future of Software Development
 

Recently uploaded

Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 

Recently uploaded (20)

Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 

How Optimizely Scaled its REST API with asyncio