SlideShare ist ein Scribd-Unternehmen logo
1 von 176
AGILITY
requires
SAFETY
Every startup has the
same story:
“We don’t have time for
best practices.”
You can’t go faster by being
reckless
Think of cars on a highway
What happens if everyone jams
down on the gas?
To go fast, a car needs not only a
powerful engine…
But also powerful brakes.
As well as seat belts, airbags,
bumpers, and auto-pilot
For cars and for software, speed
is limited by safety
What are the seat belts, brakes, &
self-driving cars of software?
This talk is about
safety mechanisms
That make it possible to
build software quickly
I’m
Yevgeniy
Brikman
ybrikman.com
Founder
of
Atomic
Squirrel
atomic-squirrel.net
PAST LIVES
Author of
Hello,
Startup
hello-startup.net
1. Brakes
2. Bulkheads
3. Autopilot
4. Safety catch
5. Speedometer
6. Warning lights
7. Seat belt
Outline
1. Brakes
2. Bulkheads
3. Autopilot
4. Safety catch
5. Speedometer
6. Warning lights
7. Seat belt
Outline
Good brakes stop your car before
you run into something
Continuous integration stops buggy
code before it goes into production
Imagine your goal is to build the
International Space Station
Each team designs and builds
their component in isolation
You launch everything into space
and hope it all comes together
I thought the Russians were going
to build the bathrooms?
Weren’t the French supposed to
do the wiring?
Everyone is using the metric
system, right?
Teams working for a long time
with incorrect assumptions
Finding this out when you’re in
outer space is too late
This is the result of
“late integration”
Lots of teams working in isolation
on separate branches
Before attempting a massive
merge at the very end
MERGE
CONFLICT
The alternative is
“continuous integration”
Where everyone regularly merges
their work
The most common approach is
trunk-based development
Everyone works on a
single branch (trunk)
That can’t possibly scale to a lot
of developers, can it?
Uses trunk-based development for
1,000+ developers
Uses trunk-based development for
4,000+ developers
Uses trunk-based development for
20,000+ developers
Wouldn’t you have merge conflicts
all the time?
If you merge (commit) regularly,
conflicts are rare.
And those that happen are from a
day of work—not months.
Commit early and often.
Small commits are easier to
merge, test, revert, review
Wouldn’t there constantly be
broken code in trunk?
Build Build Build Build
Not if you run a self-testing build
after every commit
Build Build Build Build Build Build Build
Build Build Build Build
It should compile your code and
run your automated tests
Build Build Build Build Build Build Build
Build Build Build Build
If a build fails, a developer must
fix it ASAP or revert the commit
Build Build Build Build Build Build Build
Of course, this depends on
having good automated tests
Tests give you the confidence to
make changes quickly
JUnit version 4.11
...
Time: 6.063
OK (259 tests)
How long would it take you to do
259 tests manually?
What should you test?
Everything!
Everything!
It’s a trade-off between:
1. Likelihood of bugs
2. Cost of bugs
3. Cost of testing
Likelihood of bugs is higher for
complex code and large teams
Cost of bugs is higher for some
systems (payments, security)
Cost of tests is higher for
integration and UI tests
“Without continuous
integration, your software is
broken until somebody
proves it works, usually
during a testing or
integration stage.
With continuous integration,
your software is proven to
work (assuming a sufficiently
comprehensive set of
automated tests) with every
new change—and you know
the moment it breaks and can
fix it immediately.”
1. Brakes
2. Bulkheads
3. Autopilot
4. Safety catch
5. Speedometer
6. Warning lights
7. Seat belt
Outline
Ships have bulkheads to try to
contain flooding to one area.
You can split up a codebase to
contain problems to one area.
Code is the enemy: the more you
have, the slower you go
Project Size
Lines of code
Bug Density
Bugs per thousand lines
of code
< 2K 0 – 25
2K – 6K 0 – 40
16K – 64K 0.5 – 50
64K – 512K 2 – 70
> 512K 4 – 100
As the code grows, the number of
bugs grows even faster
“Software
development doesn't
happen in a chart, an
IDE, or a design tool;
it happens in your
head.”
The mind can only handle so
much complexity at once
One solution is to break the code
into multiple codebases
Instead of depending on the
source of another module
/moduleA
/moduleB /moduleC /moduleD
/moduleE
You depend on a versioned
artifact from that module
moduleA-0.3.1.jar
moduleB-3.1.0.jar moduleC-9.8.0.jar moduleD-1.4.3.jar
moduleE-0.5.6.jar
This provides isolation from
changes in other modules
moduleA-0.3.1.jar
moduleB-3.1.0.jar moduleC-9.8.0.jar moduleD-1.4.3.jar
moduleE-0.5.6.jar
You already do this: guava-
18.0.jar
jquery-2.2.0.js
Advantages of artifacts:
1. Isolation
2. Decoupling
3. Faster builds
Disadvantages of artifacts:
1. Dependency hell
2. No continuous integration
3. Hard to make global changes
Another option is to break the
codebase into services
In a monolith, you use function
calls within one process
A.a()
B.b() C.c() D.d()
E.e()
With services, you pass messages
between processes
http://A/a
http://B/b
http://C/c
http://D/d
http://E/e
Advantages of services:
1. Technology agnostic
2. Scalability
3. Isolation
Disadvantages of services:
1. Operational overhead
2. Performance overhead
3. I/O, error handling
4. Backwards compatibility
5. Hard to make global changes
1. Brakes
2. Bulkheads
3. Autopilot
4. Safety catch
5. Speedometer
6. Warning lights
7. Seat belt
Outline
Autopilot prevents accidents
caused by human error
Automated deployments prevent
accidents caused by human error
Deploying code can be painful
“If it hurts, do it
more often.”
– Martin Fowler
The deployment process should
be:
That means you should never
deploy or configure manually
> ssh ec2-user@12.34.56.78
__| __| __|
_| ( __  Amazon ECS-Optimized Amazon Linux AMI 2015.09.d
____|___|____/
[ec2-user ~]$ sudo apt-get install ruby
Don’t do this
Or this
Instead, automate everything
The gold standard is the
blue-green deployment
Let’s say you have version 0.0.1 of
your app deployed
First, deploy version 0.0.2 on a
duplicate set of servers
If everything looks good, switch
the load balancer over to 0.0.2
Four main categories of
deployment automation tools:
1. Configuration management:
Chef, Puppet, Ansible, Salt
- name: Install httpd and php
yum: name={{ item }} state=present
with_items:
- httpd
- php
- name: start httpd
service: name=httpd state=started enabled=yes
- name: Copy the code from repository
git: repo={{ repository }} dest=/var/www/html/
Imperative scripts to configure
servers and deploy code
2. Provisioning tools: Terraform,
CloudFormation, Heat
resource "aws_instance" "example" {
ami = "ami-b960b1d"
instance_type = ["t2.micro"]
}
resource "aws_eip" "ip“ {
instance = "${aws_instance.example.id}"
depends_on = ["aws_instance.example"]
}
Declarative templates that define
your infrastructure
3. Virtual machines: VMWare,
VirtualBox, Packer, Vagrant
{
"builders": [{
"type": "amazon-ebs",
"source_ami": "ami-de0d9eb7",
"instance_type": "m1.medium",
"ami_name": "example-packer-ami-{{timestamp}}"
}],
"provisioners": [{
"type": "shell",
"inline": [
"sudo apt-get -y update",
"sudo apt-get -y install httpd php”
]
}]
}
Images of configured servers
4. Containers: Docker, rkt, LXD
FROM ubuntu:12.04
RUN apt-get update && apt-get install -y apache2 php
ENV APACHE_RUN_USER www-data
ENV APACHE_LOG_DIR /var/log/apache2
EXPOSE 80
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
Lightweight images of configured
servers
These tools allow you to define
your infrastructure as code
That way, you can version it,
review it, test it, and reuse it.
1. Brakes
2. Bulkheads
3. Autopilot
4. Safety catch
5. Speedometer
6. Warning lights
7. Seat belt
Outline
Elisha Otis
demoing
elevator
free-fall
safety in 1854
The safety
elevator
patent
The safety
catches are
locked by
default
Only an
intact cable
can unlock
the
latches
This
elevator
provides
safety by
default
Feature
toggles
provide
safety by
default
New
feature,
part 1
New
feature,
part 2
New
feature,
part 3
If a large new feature takes many
commits, wouldn’t a user see it in
an unfinished state?
<section id="new-section">
<!-- Code for new section-->
</div>
<section id="original-section">
<!-- Code for original section-->
</section>
Let’s say you were adding a new
section to your website.
<% if toggles.enabled("new-section") %>
<section id="new-section">
<!-- Code for new section-->
</div>
<% end %>
<section id="original-section">
<!-- Code for original section-->
</section>
Wrap new code in a conditional
that looks up a feature toggle
<% if toggles.enabled("new-section") %>
<section id="new-section">
<!-- Code for new section-->
</div>
<% end %>
<section id="original-section">
<!-- Code for original section-->
</section>
Toggles are off by default, so
users won’t see unfinished work
development:
feature_toggles:
new-section: true
production:
feature_toggles:
new-section: false
You can enable feature toggles in
a config file.
> curl http://feature.toggles/
{
"development": { "new-section": true },
"production": { "new-section": false }
}
Or you could create a web service
for feature toggles.
> curl http://feature.toggles/?user=123
{
"development": { "new-section": "A" },
"production": { "new-section": "B" }
}
It could return different, complex
values for each user.
And provide a web UI for
configuring toggles.
This allows you to quickly turn
features on or off.
<% if toggles.get("new-section") == "A" %>
<section id="new-section-bucket-a">
<!-- Code for new section, version A -->
</div>
<% elsif toggles.get("new-section") == "B" %>
<section id="new-section-bucket-b">
<!-- Code for new section, version B -->
</div>
<% end %>
This allows A/B testing
1. Brakes
2. Bulkheads
3. Autopilot
4. Safety catch
5. Speedometer
6. Warning lights
7. Seat belt
Outline
A speedometer tells you how fast
you’re driving
Monitoring tells you how your
product is performing
“If you can’t
measure it, you
can’t fix it.”
– David Henke
There are many types of
monitoring
Availability metrics: is my product
up or down?
Useful tools: Keynote, Pingdom,
Uptime Robot, Route53
Business metrics: what are my
users doing in the product?
Useful tools: Google Analytics,
KISSMetrics, Mixpanel
Application metrics: how is my
application performing?
Useful tools: New Relic,
CloudWatch, Datadog
127.0.0.1 - - [10/Oct/2000:13:55:36] "GET /apache_pb.gif HTTP/1.0" 200 2326
64.242.88.10 - - [07/Mar/2004:16:05:49] "GET /twiki/bin/ HTTP/1.1" 401 12846
127.0.0.1 - - [28/Jul/2006:10:22:04] "GET / HTTP/1.0" 200 2216
64.242.88.10 - - [07/Mar/2004:16:06:51] "GET /twiki/bin/Twiki/" 200 4523
64.242.88.10 - - [07/Mar/2004:16:10:02] "GET /mailman HTTP/1.1" 200 6291
127.0.0.1 - - [28/Jul/2006:10:27:32] "GET /hidden/ HTTP/1.0" 404 7218
192.168.2.20 - - [28/Jul/2006:10:27:10] "GET /cgi-bin/try HTTP/1.0" 200 3395
64.242.88.10 - - [07/Mar/2004:16:11:58] "GET /twiki/bin/view/" 200 7352
64.242.88.10 - - [07/Mar/2004:16:20:55] "GET /twiki HTTP/1.1" 200 5253
Log files are also a form of
application-level monitoring
127.0.0.1 - - [10/Oct/2000:13:55:36] "GET /apache_pb.gif HTTP/1.0" 200 2326
64.242.88.10 - - [07/Mar/2004:16:05:49] "GET /twiki/bin/ HTTP/1.1" 401 12846
127.0.0.1 - - [28/Jul/2006:10:22:04] "GET / HTTP/1.0" 200 2216
64.242.88.10 - - [07/Mar/2004:16:06:51] "GET /twiki/bin/Twiki/" 200 4523
64.242.88.10 - - [07/Mar/2004:16:10:02] "GET /mailman HTTP/1.1" 200 6291
127.0.0.1 - - [28/Jul/2006:10:27:32] "GET /hidden/ HTTP/1.0" 404 7218
192.168.2.20 - - [28/Jul/2006:10:27:10] "GET /cgi-bin/try HTTP/1.0" 200 3395
64.242.88.10 - - [07/Mar/2004:16:11:58] "GET /twiki/bin/view/" 200 7352
64.242.88.10 - - [07/Mar/2004:16:20:55] "GET /twiki HTTP/1.1" 200 5253
Useful tools: loggly, logstash,
Papertrail, Sumo Logic
Server metrics: how is my server
performing?
Useful tools: Nagios, Icinga,
Munin, collectd, CloudWatch
1. Brakes
2. Bulkheads
3. Autopilot
4. Safety catch
5. Speedometer
6. Warning lights
7. Seat belt
Outline
Warning lights notify you if
something is wrong
Alerting systems notify you if
something is wrong
You can’t look at metrics 24/7.
Alerting systems can.
Useful tools: PagerDuty,
VictorOps
For a full list of monitoring and
alerting tools, see:
hello-startup.net/resources
1. Brakes
2. Bulkheads
3. Autopilot
4. Safety catch
5. Speedometer
6. Warning lights
7. Seat belt
Outline
Seat belts help you survive
crashes
High availability helps you survive
crashes
Stateless servers: multiple
instances, multiple zones
Load balancer routes around
server or zone outages
Auto-recovery mechanism brings
server back after outage
Stateful servers: multiple
instances, multiple zones
Replication to one or more
standby servers
Load balancer switches to
standby server in case of outage
Auto-recovery mechanism brings
server back after outage
Test your recovery process
regularly.
1. Brakes
2. Bulkheads
3. Autopilot
4. Safety catch
5. Speedometer
6. Warning lights
7. Seat belt
Outline
Speed is limited by safety
Two cars can drive at 80mph in
opposite directions safely…
Because of two yellow lines
It’s worth the time to put these
safety mechanisms in place
For more
info, see
Hello,
Startup
hello-startup.net
Questions?
F1 racecar: Takayuki Suzuki
Highway traffic: Oran Viriyincy
Car accident: ER24 EMS (Pty) Ltd.
Road: Nicolas Raymond
BWM: Andy Durst
Self-driving car: Steve Jurvetson
Bus: Roland Tanglao
Tail lights: Tony Webster
USS South Dakota: Wikimedia
Crash test dummy: Wikimedia
Elisha Otis: Wikimedia
Otis Elevator: Wikimedia
Speedometer: Dawn Hopkins
Dashboard lights: Jim Larrison
Seat belt: Wikimedia
Google repo stats: Rachel Potvin
ISS: Wikimedia
Fire: Pete
Martin Fowler: Wikimedia
Image credits

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
 
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
 
[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
 
Cryptography for Java Developers: Nakov jProfessionals (Jan 2019)
Cryptography for Java Developers: Nakov jProfessionals (Jan 2019)Cryptography for Java Developers: Nakov jProfessionals (Jan 2019)
Cryptography for Java Developers: Nakov jProfessionals (Jan 2019)
 
Integration testing with spring @snow one
Integration testing with spring @snow oneIntegration testing with spring @snow one
Integration testing with spring @snow one
 
決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話
 
JSR 352 “Batch Applications for the Java Platform”
JSR 352 “Batch Applications for the Java Platform”JSR 352 “Batch Applications for the Java Platform”
JSR 352 “Batch Applications for the Java Platform”
 
JavaScript Basics and Best Practices - CC FE & UX
JavaScript Basics and Best Practices - CC FE & UXJavaScript Basics and Best Practices - CC FE & UX
JavaScript Basics and Best Practices - CC FE & UX
 
ECMA Script
ECMA ScriptECMA Script
ECMA Script
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loader
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScript
 
[BurpSuiteJapan]Burp Suite回答編
[BurpSuiteJapan]Burp Suite回答編[BurpSuiteJapan]Burp Suite回答編
[BurpSuiteJapan]Burp Suite回答編
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
Luigi PyData presentation
Luigi PyData presentationLuigi PyData presentation
Luigi PyData presentation
 
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)
NGSIv1 を知っている開発者向けの NGSIv2 の概要 (Orion 3.1.0対応)
 

Andere mochten auch

Small Business Start Up Success Kit Preview
Small Business Start Up Success Kit PreviewSmall Business Start Up Success Kit Preview
Small Business Start Up Success Kit Preview
Don Osborne
 
Blueprint for Startup Success
Blueprint for Startup SuccessBlueprint for Startup Success
Blueprint for Startup Success
Marc Nathan
 

Andere mochten auch (20)

How effective is social media marketing for small business
How effective is social media marketing for small businessHow effective is social media marketing for small business
How effective is social media marketing for small business
 
Marketing Masterclass for Accountants - Event Launch
Marketing Masterclass for Accountants - Event LaunchMarketing Masterclass for Accountants - Event Launch
Marketing Masterclass for Accountants - Event Launch
 
Virtual Business Incubator Framework for Enriching Innovation Ecosystem 2013
Virtual Business Incubator Framework for Enriching Innovation Ecosystem 2013Virtual Business Incubator Framework for Enriching Innovation Ecosystem 2013
Virtual Business Incubator Framework for Enriching Innovation Ecosystem 2013
 
Softlanding for global startups nsob taiwan 19 juni 2014
Softlanding for global startups   nsob taiwan 19 juni 2014Softlanding for global startups   nsob taiwan 19 juni 2014
Softlanding for global startups nsob taiwan 19 juni 2014
 
Gruntwork Executive Summary
Gruntwork Executive SummaryGruntwork Executive Summary
Gruntwork Executive Summary
 
Practice Paradox Clientshare Academy Launch - Including Foundation Member O...
Practice Paradox   Clientshare Academy Launch - Including Foundation Member O...Practice Paradox   Clientshare Academy Launch - Including Foundation Member O...
Practice Paradox Clientshare Academy Launch - Including Foundation Member O...
 
Lean101
Lean101Lean101
Lean101
 
The Truth About Startups: What I wish someone had told me about entrepreneurs...
The Truth About Startups: What I wish someone had told me about entrepreneurs...The Truth About Startups: What I wish someone had told me about entrepreneurs...
The Truth About Startups: What I wish someone had told me about entrepreneurs...
 
Software Development: Session 1
Software Development: Session 1Software Development: Session 1
Software Development: Session 1
 
Development of business incubation in The Netherlands Pim de Bokx - Tunis 1...
Development of business incubation in The Netherlands   Pim de Bokx - Tunis 1...Development of business incubation in The Netherlands   Pim de Bokx - Tunis 1...
Development of business incubation in The Netherlands Pim de Bokx - Tunis 1...
 
Innovative Talks: Life Connected
Innovative Talks: Life ConnectedInnovative Talks: Life Connected
Innovative Talks: Life Connected
 
Business Model Innovation Book (prototype book structure)
Business Model Innovation Book (prototype book structure)Business Model Innovation Book (prototype book structure)
Business Model Innovation Book (prototype book structure)
 
Business development for startups 2013
Business development for startups 2013Business development for startups 2013
Business development for startups 2013
 
Software Design: Intro Session
Software Design: Intro SessionSoftware Design: Intro Session
Software Design: Intro Session
 
Business Model Innovation by Business Models Inc. Training Summary
Business Model Innovation by Business Models Inc. Training SummaryBusiness Model Innovation by Business Models Inc. Training Summary
Business Model Innovation by Business Models Inc. Training Summary
 
Great Value Proposition Design
Great Value Proposition DesignGreat Value Proposition Design
Great Value Proposition Design
 
Small Business Start Up Success Kit Preview
Small Business Start Up Success Kit PreviewSmall Business Start Up Success Kit Preview
Small Business Start Up Success Kit Preview
 
Business Model Knowledge Fair, Amsterdam
Business Model Knowledge Fair, AmsterdamBusiness Model Knowledge Fair, Amsterdam
Business Model Knowledge Fair, Amsterdam
 
Blueprint for Startup Success
Blueprint for Startup SuccessBlueprint for Startup Success
Blueprint for Startup Success
 
Targast töövõtjast targaks tööandjaks - teadmispõhisest kapitalismist Eestis
Targast töövõtjast targaks tööandjaks - teadmispõhisest kapitalismist EestisTargast töövõtjast targaks tööandjaks - teadmispõhisest kapitalismist Eestis
Targast töövõtjast targaks tööandjaks - teadmispõhisest kapitalismist Eestis
 

Ähnlich wie Agility Requires Safety

Continuous Integration using Cruise Control
Continuous Integration using Cruise ControlContinuous Integration using Cruise Control
Continuous Integration using Cruise Control
elliando dias
 

Ähnlich wie Agility Requires Safety (20)

Cloud-powered Continuous Integration and Deployment architectures - Jinesh Varia
Cloud-powered Continuous Integration and Deployment architectures - Jinesh VariaCloud-powered Continuous Integration and Deployment architectures - Jinesh Varia
Cloud-powered Continuous Integration and Deployment architectures - Jinesh Varia
 
Cloud adoption fails - 5 ways deployments go wrong and 5 solutions
Cloud adoption fails - 5 ways deployments go wrong and 5 solutionsCloud adoption fails - 5 ways deployments go wrong and 5 solutions
Cloud adoption fails - 5 ways deployments go wrong and 5 solutions
 
Code Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application MigrationsCode Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application Migrations
 
Intro to CI/CD using Docker
Intro to CI/CD using DockerIntro to CI/CD using Docker
Intro to CI/CD using Docker
 
Continuous Delivery, Continuous Integration
Continuous Delivery, Continuous Integration Continuous Delivery, Continuous Integration
Continuous Delivery, Continuous Integration
 
Continuous Integration using Cruise Control
Continuous Integration using Cruise ControlContinuous Integration using Cruise Control
Continuous Integration using Cruise Control
 
Security Automation Simplified - BSides Austin 2019
Security Automation Simplified - BSides Austin 2019Security Automation Simplified - BSides Austin 2019
Security Automation Simplified - BSides Austin 2019
 
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
 
(Agile) engineering best practices - What every project manager should know
(Agile) engineering best practices - What every project manager should know(Agile) engineering best practices - What every project manager should know
(Agile) engineering best practices - What every project manager should know
 
Why test with flex unit
Why test with flex unitWhy test with flex unit
Why test with flex unit
 
100% Code Coverage in Symfony applications
100% Code Coverage in Symfony applications100% Code Coverage in Symfony applications
100% Code Coverage in Symfony applications
 
Azure from scratch part 4
Azure from scratch part 4Azure from scratch part 4
Azure from scratch part 4
 
Bug first Zero Defect
Bug first   Zero DefectBug first   Zero Defect
Bug first Zero Defect
 
Agile Engineering Sparker GLASScon 2015
Agile Engineering Sparker GLASScon 2015Agile Engineering Sparker GLASScon 2015
Agile Engineering Sparker GLASScon 2015
 
DevSec Delight with Compliance as Code - Matt Ray - AgileNZ 2017
DevSec Delight with Compliance as Code - Matt Ray - AgileNZ 2017DevSec Delight with Compliance as Code - Matt Ray - AgileNZ 2017
DevSec Delight with Compliance as Code - Matt Ray - AgileNZ 2017
 
Pragmatic Pipeline Security
Pragmatic Pipeline SecurityPragmatic Pipeline Security
Pragmatic Pipeline Security
 
DevOpsDays Singapore - Continuous Auditing with Compliance as Code
DevOpsDays Singapore - Continuous Auditing with Compliance as CodeDevOpsDays Singapore - Continuous Auditing with Compliance as Code
DevOpsDays Singapore - Continuous Auditing with Compliance as Code
 
Agile Engineering Best Practices by Richard Cheng
Agile Engineering Best Practices by Richard ChengAgile Engineering Best Practices by Richard Cheng
Agile Engineering Best Practices by Richard Cheng
 
Agile Bodensee - Testautomation & Continuous Delivery Workshop
Agile Bodensee - Testautomation & Continuous Delivery WorkshopAgile Bodensee - Testautomation & Continuous Delivery Workshop
Agile Bodensee - Testautomation & Continuous Delivery Workshop
 
Automated Scaling of Microservice Stacks for JavaEE Applications
Automated Scaling of Microservice Stacks for JavaEE ApplicationsAutomated Scaling of Microservice Stacks for JavaEE Applications
Automated Scaling of Microservice Stacks for JavaEE Applications
 

Mehr von Yevgeniy Brikman

Mehr von Yevgeniy Brikman (20)

How to test infrastructure code: automated testing for Terraform, Kubernetes,...
How to test infrastructure code: automated testing for Terraform, Kubernetes,...How to test infrastructure code: automated testing for Terraform, Kubernetes,...
How to test infrastructure code: automated testing for Terraform, Kubernetes,...
 
Lessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure codeLessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure code
 
Reusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesReusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modules
 
An intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECSAn intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECS
 
Comprehensive Terraform Training
Comprehensive Terraform TrainingComprehensive Terraform Training
Comprehensive Terraform Training
 
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
 
Startup Ideas and Validation
Startup Ideas and ValidationStartup Ideas and Validation
Startup Ideas and Validation
 
A Guide to Hiring for your Startup
A Guide to Hiring for your StartupA Guide to Hiring for your Startup
A Guide to Hiring for your Startup
 
Startup DNA: Speed Wins
Startup DNA: Speed WinsStartup DNA: Speed Wins
Startup DNA: Speed Wins
 
Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)
 
Node.js vs Play Framework
Node.js vs Play FrameworkNode.js vs Play Framework
Node.js vs Play Framework
 
Rapid prototyping
Rapid prototypingRapid prototyping
Rapid prototyping
 
Composable and streamable Play apps
Composable and streamable Play appsComposable and streamable Play apps
Composable and streamable Play apps
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
The Play Framework at LinkedIn
The Play Framework at LinkedInThe Play Framework at LinkedIn
The Play Framework at LinkedIn
 
Kings of Code Hack Battle
Kings of Code Hack BattleKings of Code Hack Battle
Kings of Code Hack Battle
 
Hackdays and [in]cubator
Hackdays and [in]cubatorHackdays and [in]cubator
Hackdays and [in]cubator
 
Startup DNA: the formula behind successful startups in Silicon Valley (update...
Startup DNA: the formula behind successful startups in Silicon Valley (update...Startup DNA: the formula behind successful startups in Silicon Valley (update...
Startup DNA: the formula behind successful startups in Silicon Valley (update...
 
Dust.js
Dust.jsDust.js
Dust.js
 
LinkedIn Overview
LinkedIn OverviewLinkedIn Overview
LinkedIn Overview
 

Kürzlich hochgeladen

Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Lisi Hocke
 

Kürzlich hochgeladen (20)

OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCAOpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
 
Abortion Pill Prices Mthatha (@](+27832195400*)[ 🏥 Women's Abortion Clinic In...
Abortion Pill Prices Mthatha (@](+27832195400*)[ 🏥 Women's Abortion Clinic In...Abortion Pill Prices Mthatha (@](+27832195400*)[ 🏥 Women's Abortion Clinic In...
Abortion Pill Prices Mthatha (@](+27832195400*)[ 🏥 Women's Abortion Clinic In...
 
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
 
Workshop: Enabling GenAI Breakthroughs with Knowledge Graphs - GraphSummit Milan
Workshop: Enabling GenAI Breakthroughs with Knowledge Graphs - GraphSummit MilanWorkshop: Enabling GenAI Breakthroughs with Knowledge Graphs - GraphSummit Milan
Workshop: Enabling GenAI Breakthroughs with Knowledge Graphs - GraphSummit Milan
 
Test Automation Design Patterns_ A Comprehensive Guide.pdf
Test Automation Design Patterns_ A Comprehensive Guide.pdfTest Automation Design Patterns_ A Comprehensive Guide.pdf
Test Automation Design Patterns_ A Comprehensive Guide.pdf
 
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
 
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
 
Weeding your micro service landscape.pdf
Weeding your micro service landscape.pdfWeeding your micro service landscape.pdf
Weeding your micro service landscape.pdf
 
Transformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with LinksTransformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with Links
 
Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024
 
Workshop - Architecting Innovative Graph Applications- GraphSummit Milan
Workshop -  Architecting Innovative Graph Applications- GraphSummit MilanWorkshop -  Architecting Innovative Graph Applications- GraphSummit Milan
Workshop - Architecting Innovative Graph Applications- GraphSummit Milan
 
Novo Nordisk: When Knowledge Graphs meet LLMs
Novo Nordisk: When Knowledge Graphs meet LLMsNovo Nordisk: When Knowledge Graphs meet LLMs
Novo Nordisk: When Knowledge Graphs meet LLMs
 
Abortion Clinic In Pongola ](+27832195400*)[ 🏥 Safe Abortion Pills In Pongola...
Abortion Clinic In Pongola ](+27832195400*)[ 🏥 Safe Abortion Pills In Pongola...Abortion Clinic In Pongola ](+27832195400*)[ 🏥 Safe Abortion Pills In Pongola...
Abortion Clinic In Pongola ](+27832195400*)[ 🏥 Safe Abortion Pills In Pongola...
 
Rapidoform for Modern Form Building and Insights
Rapidoform for Modern Form Building and InsightsRapidoform for Modern Form Building and Insights
Rapidoform for Modern Form Building and Insights
 
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
 
Navigation in flutter – how to add stack, tab, and drawer navigators to your ...
Navigation in flutter – how to add stack, tab, and drawer navigators to your ...Navigation in flutter – how to add stack, tab, and drawer navigators to your ...
Navigation in flutter – how to add stack, tab, and drawer navigators to your ...
 
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdfAzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
 
Evolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI EraEvolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI Era
 
[GRCPP] Introduction to concepts (C++20)
[GRCPP] Introduction to concepts (C++20)[GRCPP] Introduction to concepts (C++20)
[GRCPP] Introduction to concepts (C++20)
 
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
 

Agility Requires Safety