SlideShare a Scribd company logo
PRODUCT!
THE ROAD TO PRODUCTION DEPLOYMENT
presented by /Filippo Zanella @r4m
WHO I AM
Ph.D. in Information Engineering at the
, Visiting Researcher
at UC Berkeley and UC Santa Barbara.
University of Padua
Founder of , full-stack engineer
(RubyOnRails & Ember.js).
Sellf srl
President of the and Member
of the .
Fencing Club of Montebelluna
Rotary Club of Montebelluna
SELLF
Sellf helps people in sales monitor
their deals and manage their
activities to grow and close them.
Small business owners,
professionals
and sales agents
usually struggle to keep their
business life organized,
overwhelmed by spreadsheets, todo
lists, calendars and notes.
PROTOTYPING
BE STUBBORN ON VISION BUT FLEXIBLE ON DETAILS.
(JEFF BEZOS, AMAZON)
THE ARDUINO WAY
A prototype is meant to be a test. Built using the most
"hacky" approach with the least amount of time to get initial
feedback on whether a concept is viable.
Copyright © 2006-2011 by John Szakmeister
CONCEPT
Handmade sketch of the data visualization of the app.
BACKBONE
Try to de ne as much as you can:
Infrastructure
Communication protocol
Database schema
UX ow
WIREFRAMES
Detailed descriptions of the different views of the app.
(BALSAMIQ) MOCKUPS
MINIMUM VIABLE PRODUCT
IF YOU AREN'T EMBARRASSED BY THE FIRST VERSION OF THE PRODUCT YOU'VE LAUNCHED TOO LATE.
(REID HOFFMAN, LINKEDIN)
MVP
It is built from the smallest set of features that delivers
customer early adopters value.
More than 60% of features in software products are rarely or never used.
Prioritize each feature according to a few factors:
1. How important is this feature for nishing the process?
2. How often will the feature be used?
3. How many users will use this feature?
4. How much value will the feature bring to the customer?
5. How risky is this feature?
6. How much time does it take to be implemented?
SAAS, BAAS, PAAS, IAAS
Software as a Service (Sellf, Google Apps, GoToMeeting)
Backend as a Service (Parse, Apprenda)
Platform as a Service (AWS Beanstalk, Heroku)
Infrastructure as a Service (AWS EC2, Microsoft Azure)
PRODUCT
IT IS NOT ABOUT BITS, BYTES AND PROTOCOLS, BUT PROFITS, LOSSES AND MARGINS.
(LOU GERSTNER, IBM)
WHEN THE HEAT GETS HOT
You cannot survive with (too) buggy and clumsy code.
You slightly move from MVP and beta releases to a working
app that your customer expect to be:
fast
secure
stable
While you see your user base increasing, you see their
expectations growing too.
SELLF 3.0
LOGGING & ALERTING
Log activities of your app to nd:
failures
bugs
heavy algorithms
expensive queries
unwanted/unexpected behaviors
Set alerts to be noti ed when speci c events occur.
Building an ef cient logging and alerting system allows your
team to nd and x problems quickly.
USER BEHAVIOR MONITORING
What people really do with your application.
PERFORMANCE MONITORING
Nobody writes slow code on purpose.
AVAILABILITY MONITORING
How do you know when your app has an outage?
ERRORS HANDLING
Anticipate, detect, resolve BUGS.
NETWORK ERRORS
$.ajax({
type: 'POST',
url: '/some/resource',
success: function(data, textStatus) {
// Handle success
},
error: function(xhr, textStatus, errorThrown) {
if (xhr.status) {
if (xhr.status === 403) {
// Handle forbidden access error
} else {
// Handle generic error
}
}
}
});
PLATFORM ERRORS
FRAMEWORK ERRORS
LIBRARY ERRORS...
...LIBRARY REPLACEMENT
In the long run, libraries are like a stick in the mud:
not longer maintained
degrade performance
missing custom needs
not easy to debug
YOUR ERRORS
The bloody asynchrony
callAction: function() {
var _this, defer;
_this = this;
defer = Ember.RSVP.defer();
defer.promise.then(function() {
if (_this && !_this.isDestroyed) {
return _this.set('isLoaded', true);
}
}, function() {
if (_this && !_this.isDestroyed) {
return _this.set('isLoaded', false);
}
});
}
MAINTAIN 3RD-PARTY SOFTWARE UPDATED
When the project relies on external software, it's useful to
leverage the updates, for:
Fix bugs (not caused by our app)
Improve overall performances
Adding new features
Deprecate old conventions
CHANGELOG
Record of all the changes made to a project.
Now the inline form can be use in addiction:
EXAMPLE OF BUMPING
Prior v1.11 in Ember's an ifcondition in a template was
limited to the following syntax:
{{#if isEnabled}}
<a class="active" href="http://www.facebook.com">Facebook</a>
{{else}}
<a class="disabled" href="http://www.facebook.com">Facebook</a>
{{/if}}
<a class="{{if isEnabled 'active' 'disabled'}}" href="http://www.facebook.com"
simpli ng the number of lines of code, enhancing readability
and allowing new behaviours.
SECURITY
The Gartner Group however estimates that 75% of attacks
are at the web application layer, and found out "that out of
300 audited sites, 97% are vulnerable to attack".
The threats against web applications include:
user account hijacking
bypass of access control
reading or modifying sensitive data
presenting fraudulent content
SQL INJECTION
A technique where malicious users can inject SQL commands
into an SQL statement, via web page input.
Client
<p>UserId: <br>
<input type="text" name="UserId" value="105 or 1=1"></p>
Server
SELECT * FROM Users WHERE UserId = 105 or 1=1
The SQL above is valid. It will return all rows from the table
Users, since WHERE 1=1 is always true!
SSL
The Secure Socket Layer is a cryptographic protocol designed
to provide secure communications over a computer network.
Serve everything over SSL.
PS: don't let your certi cates expire.
SCALING
It means rapid adaptation to a growing user activity.
You need to push your system to a higher level, getting the best from your infrastructure.
APOCALYPSE NOW
You'll never be ready till the day you have to.
HARD STUFFS
Load balancing, caching, CDN, background jobs, ...
... sharding, master/slaves, ETAGs, etc.
TEAM GROWTH
Being agile is mandatory when your team growths to stay
focused in delivering real value to the company
No wasting time on unneeded planning docs.
No delivering features that do not t customers needs.
THE PROJECT TRIANGLE
OPTIMIZATION
IMPROVING PERFORMANCES
An optimization analysis should include:
network utilisation
CPU
memory usage
database query
Optimizing is critical because it has an impact on the scaling
factor of the system!
CODING TRICKS
Parallel versus sequential assignment
var a, b = 1, 2 a= 1, b = 2
5821.3 (±6.0%) i/s 8010.3 (±5.5%) i/s
slow fast
40% faster!
LOADING TIMES
Google Developer Tools (via Chrome)
UI DRAINING RESOURCE
In a single-page framework, template rendering choices can
make the difference in terms of RAM usage.
<ul>
{{#each alumni as |alumnus|}}
<li>
<p>Hello, {{alumnus.name}}!</p>
<!-- This is RAM consuming... -->
<div>{{detailed-profile content=alumnus}}</div>
</li>
{{/each}}
</ul>
UI DRAINING RESOURCE
Destroy not visibile child views to free up their memory.
<ul>
{{#each alumni as |alumnus|}}
<li>
<p>Hello, {{alumnus.name}}!</p>
<!-- Show the details only when the alumnus is selected -->
{{#if view.isSelected}}
<div>{{detailed-profile content=alumnus}}</div>
{{/if}}
</li>
{{/each}}
</ul>
CROSS COMPATIBILITY
The (W3C), founded in 1994 to
promote open standards for the , pulled ,
together with others to develop a standard for
browser scripting languages called " ".
World Wide Web Consortium
WWW Netscape
Microsoft
ECMAScript
TEST DRIVEN DEVELOPMENT
If you avoid at the beginning TDD practices, you'll discover
that they are as much important as the app code itself.
Continuous integration and testing is a must sooner or later.
Tests can be applied to:
backend - just do it.
frontend - think about it.
mobile - forget it.
UNIT TESTS
They are generally used to test a small piece of code and
ensure that it is doing what was intended.
App.SomeThing = Ember.Object.extend({
foo: 'bar',
testMethod: function() {
this.set('foo', 'baz');
}
});
module('Unit: SomeThing');
test('calling testMethod updates foo', function() {
var someThing = App.SomeThing.create();
someThing.testMethod();
equal(someThing.get('foo'), 'baz');
});
REFACTORING
Improving the design of code without changing its behavior.
Clarity enables performance:
long methods
speculative code
comments
When you look back to your one-year old code you look at it with the same compassion with whom you look at
a photo of you a few years before: you wonder how the hell you could get those clothes and that hairstyle.
REMOVE DUPLICATION
if (this.target.entity.is("decoration")) {
this.target.entity.game.publish("decoration/showBoost", {
entityView: this.target,
x: this.target.entity.x,
y: this.target.entity.y
});
}
var entity = this.target.entity;
if (entity.is("decoration")) {
entity.game.publish("decoration/showBoost", {
entityView: this.target,
x: entity.x,
y: entity.y
});
}
USE MEANINGFUL NAMES
var p = this.current.params;
var r = this.current.results;
if (r.restProduct) {
p.query = r.prestProduct;
}
var params = this.current.params;
var results = this.current.results;
if (results.restProduct) {
params.query = results.prestProduct;
}
THANK YOU!

More Related Content

What's hot

Agile Engineering Practices
Agile Engineering PracticesAgile Engineering Practices
Agile Engineering Practices
Kane Mar
 
Understanding Scrum
Understanding ScrumUnderstanding Scrum
Understanding Scrum
nikos batsios
 
Understanding Kanban
Understanding KanbanUnderstanding Kanban
Understanding Kanban
nikos batsios
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
Mike McGarr
 
Working Agile with Scrum and TFS 2013
Working Agile with Scrum and TFS 2013Working Agile with Scrum and TFS 2013
Working Agile with Scrum and TFS 2013Moataz Nabil
 
MeetingPoint 2015 - Swimming upstream in the container revolution
MeetingPoint 2015 - Swimming upstream in the container revolutionMeetingPoint 2015 - Swimming upstream in the container revolution
MeetingPoint 2015 - Swimming upstream in the container revolution
Bert Jan Schrijver
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
PRATYUSH SINHA
 
QCon Beijing - April 2010
QCon Beijing - April 2010QCon Beijing - April 2010
QCon Beijing - April 2010Kane Mar
 
Team Foundation Server 2012 Reporting
Team Foundation Server 2012 ReportingTeam Foundation Server 2012 Reporting
Team Foundation Server 2012 Reporting
Steve Lange
 
Behavior Driven Development with Cucumber
Behavior Driven Development with CucumberBehavior Driven Development with Cucumber
Behavior Driven Development with Cucumber
Asheesh Mehdiratta
 
Software Development 2020 - Swimming upstream in the container revolution
Software Development 2020 - Swimming upstream in the container revolutionSoftware Development 2020 - Swimming upstream in the container revolution
Software Development 2020 - Swimming upstream in the container revolution
Bert Jan Schrijver
 
NextBuild 2015 - Swimming upstream in the container revolution
NextBuild 2015 - Swimming upstream in the container revolutionNextBuild 2015 - Swimming upstream in the container revolution
NextBuild 2015 - Swimming upstream in the container revolution
Bert Jan Schrijver
 
Introduction to Project Management with Scrum
Introduction to Project Management with ScrumIntroduction to Project Management with Scrum
Introduction to Project Management with Scrum
Pierre E. NEIS
 
EuregJUG 2016-01-07 - Swimming upstream in the container revolution
EuregJUG 2016-01-07 - Swimming upstream in the container revolutionEuregJUG 2016-01-07 - Swimming upstream in the container revolution
EuregJUG 2016-01-07 - Swimming upstream in the container revolution
Bert Jan Schrijver
 
Devoxx BE 2015 - Swimming upstream in the container revolution
Devoxx BE 2015 - Swimming upstream in the container revolutionDevoxx BE 2015 - Swimming upstream in the container revolution
Devoxx BE 2015 - Swimming upstream in the container revolution
Bert Jan Schrijver
 
Scrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - ColomboScrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - Colombo
Naveen Kumar Singh
 
Mastering Test Automation: How To Use Selenium Successfully
Mastering Test Automation: How To Use Selenium SuccessfullyMastering Test Automation: How To Use Selenium Successfully
Mastering Test Automation: How To Use Selenium Successfully
SpringPeople
 
Black Marble Introduction To Scrum
Black Marble Introduction To ScrumBlack Marble Introduction To Scrum
Black Marble Introduction To Scrum
BusinessQuests
 

What's hot (18)

Agile Engineering Practices
Agile Engineering PracticesAgile Engineering Practices
Agile Engineering Practices
 
Understanding Scrum
Understanding ScrumUnderstanding Scrum
Understanding Scrum
 
Understanding Kanban
Understanding KanbanUnderstanding Kanban
Understanding Kanban
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
Working Agile with Scrum and TFS 2013
Working Agile with Scrum and TFS 2013Working Agile with Scrum and TFS 2013
Working Agile with Scrum and TFS 2013
 
MeetingPoint 2015 - Swimming upstream in the container revolution
MeetingPoint 2015 - Swimming upstream in the container revolutionMeetingPoint 2015 - Swimming upstream in the container revolution
MeetingPoint 2015 - Swimming upstream in the container revolution
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
QCon Beijing - April 2010
QCon Beijing - April 2010QCon Beijing - April 2010
QCon Beijing - April 2010
 
Team Foundation Server 2012 Reporting
Team Foundation Server 2012 ReportingTeam Foundation Server 2012 Reporting
Team Foundation Server 2012 Reporting
 
Behavior Driven Development with Cucumber
Behavior Driven Development with CucumberBehavior Driven Development with Cucumber
Behavior Driven Development with Cucumber
 
Software Development 2020 - Swimming upstream in the container revolution
Software Development 2020 - Swimming upstream in the container revolutionSoftware Development 2020 - Swimming upstream in the container revolution
Software Development 2020 - Swimming upstream in the container revolution
 
NextBuild 2015 - Swimming upstream in the container revolution
NextBuild 2015 - Swimming upstream in the container revolutionNextBuild 2015 - Swimming upstream in the container revolution
NextBuild 2015 - Swimming upstream in the container revolution
 
Introduction to Project Management with Scrum
Introduction to Project Management with ScrumIntroduction to Project Management with Scrum
Introduction to Project Management with Scrum
 
EuregJUG 2016-01-07 - Swimming upstream in the container revolution
EuregJUG 2016-01-07 - Swimming upstream in the container revolutionEuregJUG 2016-01-07 - Swimming upstream in the container revolution
EuregJUG 2016-01-07 - Swimming upstream in the container revolution
 
Devoxx BE 2015 - Swimming upstream in the container revolution
Devoxx BE 2015 - Swimming upstream in the container revolutionDevoxx BE 2015 - Swimming upstream in the container revolution
Devoxx BE 2015 - Swimming upstream in the container revolution
 
Scrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - ColomboScrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - Colombo
 
Mastering Test Automation: How To Use Selenium Successfully
Mastering Test Automation: How To Use Selenium SuccessfullyMastering Test Automation: How To Use Selenium Successfully
Mastering Test Automation: How To Use Selenium Successfully
 
Black Marble Introduction To Scrum
Black Marble Introduction To ScrumBlack Marble Introduction To Scrum
Black Marble Introduction To Scrum
 

Similar to Product! - The road to production deployment

DevOps in Practice: When does "Practice" Become "Doing"?
DevOps in Practice: When does "Practice" Become "Doing"?DevOps in Practice: When does "Practice" Become "Doing"?
DevOps in Practice: When does "Practice" Become "Doing"?
Michael Elder
 
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy EnvironmentsPete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Peter Marshall
 
Best practice adoption (and lack there of)
Best practice adoption (and lack there of)Best practice adoption (and lack there of)
Best practice adoption (and lack there of)
John Pape
 
Development and QA dilemmas in DevOps
Development and QA dilemmas in DevOpsDevelopment and QA dilemmas in DevOps
Development and QA dilemmas in DevOps
Matteo Emili
 
30 days or less: New Features to Production
30 days or less: New Features to Production30 days or less: New Features to Production
30 days or less: New Features to Production
Karthik Gaekwad
 
DevOps Fest 2020. immutable infrastructure as code. True story.
DevOps Fest 2020. immutable infrastructure as code. True story.DevOps Fest 2020. immutable infrastructure as code. True story.
DevOps Fest 2020. immutable infrastructure as code. True story.
Vlad Fedosov
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure
rupeshchanchal
 
Availability in a cloud native world v1.6 (Feb 2019)
Availability in a cloud native world v1.6 (Feb 2019)Availability in a cloud native world v1.6 (Feb 2019)
Availability in a cloud native world v1.6 (Feb 2019)
Haytham Elkhoja
 
Stream SQL eventflow visual programming for real programmers presentation
Stream SQL eventflow visual programming for real programmers presentationStream SQL eventflow visual programming for real programmers presentation
Stream SQL eventflow visual programming for real programmers presentation
streambase
 
CucumberSeleniumWD
CucumberSeleniumWDCucumberSeleniumWD
CucumberSeleniumWDVikas Sarin
 
DevSecOps | DevOps Sec
DevSecOps | DevOps SecDevSecOps | DevOps Sec
DevSecOps | DevOps Sec
Rubal Jain
 
Andrea Baldon, Emanuele Di Saverio - GraphQL for Native Apps: the MyAXA case ...
Andrea Baldon, Emanuele Di Saverio - GraphQL for Native Apps: the MyAXA case ...Andrea Baldon, Emanuele Di Saverio - GraphQL for Native Apps: the MyAXA case ...
Andrea Baldon, Emanuele Di Saverio - GraphQL for Native Apps: the MyAXA case ...
Codemotion
 
Angular js mobile jsday 2014 - Verona 14 may
Angular js mobile   jsday 2014 - Verona 14 mayAngular js mobile   jsday 2014 - Verona 14 may
Angular js mobile jsday 2014 - Verona 14 may
Luciano Amodio
 
DevOps explained
DevOps explainedDevOps explained
DevOps explained
Jérôme Kehrli
 
ITARC15 Workshop - Architecting a Large Software Project - Lessons Learned
ITARC15 Workshop - Architecting a Large Software Project - Lessons LearnedITARC15 Workshop - Architecting a Large Software Project - Lessons Learned
ITARC15 Workshop - Architecting a Large Software Project - Lessons Learned
João Pedro Martins
 
Ci tips and_tricks_linards_liepins
Ci tips and_tricks_linards_liepinsCi tips and_tricks_linards_liepins
Ci tips and_tricks_linards_liepins
Linards Liep
 
Mage Titans USA 2016 - Jonathan Bownds - Magento CI and Testing
Mage Titans USA 2016 - Jonathan Bownds - Magento CI and Testing Mage Titans USA 2016 - Jonathan Bownds - Magento CI and Testing
Mage Titans USA 2016 - Jonathan Bownds - Magento CI and Testing
Stacey Whitney
 
WinOps Conf 2016 - Matteo Emili - Development and QA Dilemmas in DevOps
WinOps Conf 2016 - Matteo Emili - Development and QA Dilemmas in DevOpsWinOps Conf 2016 - Matteo Emili - Development and QA Dilemmas in DevOps
WinOps Conf 2016 - Matteo Emili - Development and QA Dilemmas in DevOps
WinOps Conf
 
The Future of Cloud Innovation, featuring Adrian Cockcroft
The Future of Cloud Innovation, featuring Adrian CockcroftThe Future of Cloud Innovation, featuring Adrian Cockcroft
The Future of Cloud Innovation, featuring Adrian Cockcroft
Dun & Bradstreet Cloud Innovation Center
 
WoMakersCode 2016 - Shit Happens
WoMakersCode 2016 -  Shit HappensWoMakersCode 2016 -  Shit Happens
WoMakersCode 2016 - Shit Happens
Jackson F. de A. Mafra
 

Similar to Product! - The road to production deployment (20)

DevOps in Practice: When does "Practice" Become "Doing"?
DevOps in Practice: When does "Practice" Become "Doing"?DevOps in Practice: When does "Practice" Become "Doing"?
DevOps in Practice: When does "Practice" Become "Doing"?
 
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy EnvironmentsPete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
 
Best practice adoption (and lack there of)
Best practice adoption (and lack there of)Best practice adoption (and lack there of)
Best practice adoption (and lack there of)
 
Development and QA dilemmas in DevOps
Development and QA dilemmas in DevOpsDevelopment and QA dilemmas in DevOps
Development and QA dilemmas in DevOps
 
30 days or less: New Features to Production
30 days or less: New Features to Production30 days or less: New Features to Production
30 days or less: New Features to Production
 
DevOps Fest 2020. immutable infrastructure as code. True story.
DevOps Fest 2020. immutable infrastructure as code. True story.DevOps Fest 2020. immutable infrastructure as code. True story.
DevOps Fest 2020. immutable infrastructure as code. True story.
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure
 
Availability in a cloud native world v1.6 (Feb 2019)
Availability in a cloud native world v1.6 (Feb 2019)Availability in a cloud native world v1.6 (Feb 2019)
Availability in a cloud native world v1.6 (Feb 2019)
 
Stream SQL eventflow visual programming for real programmers presentation
Stream SQL eventflow visual programming for real programmers presentationStream SQL eventflow visual programming for real programmers presentation
Stream SQL eventflow visual programming for real programmers presentation
 
CucumberSeleniumWD
CucumberSeleniumWDCucumberSeleniumWD
CucumberSeleniumWD
 
DevSecOps | DevOps Sec
DevSecOps | DevOps SecDevSecOps | DevOps Sec
DevSecOps | DevOps Sec
 
Andrea Baldon, Emanuele Di Saverio - GraphQL for Native Apps: the MyAXA case ...
Andrea Baldon, Emanuele Di Saverio - GraphQL for Native Apps: the MyAXA case ...Andrea Baldon, Emanuele Di Saverio - GraphQL for Native Apps: the MyAXA case ...
Andrea Baldon, Emanuele Di Saverio - GraphQL for Native Apps: the MyAXA case ...
 
Angular js mobile jsday 2014 - Verona 14 may
Angular js mobile   jsday 2014 - Verona 14 mayAngular js mobile   jsday 2014 - Verona 14 may
Angular js mobile jsday 2014 - Verona 14 may
 
DevOps explained
DevOps explainedDevOps explained
DevOps explained
 
ITARC15 Workshop - Architecting a Large Software Project - Lessons Learned
ITARC15 Workshop - Architecting a Large Software Project - Lessons LearnedITARC15 Workshop - Architecting a Large Software Project - Lessons Learned
ITARC15 Workshop - Architecting a Large Software Project - Lessons Learned
 
Ci tips and_tricks_linards_liepins
Ci tips and_tricks_linards_liepinsCi tips and_tricks_linards_liepins
Ci tips and_tricks_linards_liepins
 
Mage Titans USA 2016 - Jonathan Bownds - Magento CI and Testing
Mage Titans USA 2016 - Jonathan Bownds - Magento CI and Testing Mage Titans USA 2016 - Jonathan Bownds - Magento CI and Testing
Mage Titans USA 2016 - Jonathan Bownds - Magento CI and Testing
 
WinOps Conf 2016 - Matteo Emili - Development and QA Dilemmas in DevOps
WinOps Conf 2016 - Matteo Emili - Development and QA Dilemmas in DevOpsWinOps Conf 2016 - Matteo Emili - Development and QA Dilemmas in DevOps
WinOps Conf 2016 - Matteo Emili - Development and QA Dilemmas in DevOps
 
The Future of Cloud Innovation, featuring Adrian Cockcroft
The Future of Cloud Innovation, featuring Adrian CockcroftThe Future of Cloud Innovation, featuring Adrian Cockcroft
The Future of Cloud Innovation, featuring Adrian Cockcroft
 
WoMakersCode 2016 - Shit Happens
WoMakersCode 2016 -  Shit HappensWoMakersCode 2016 -  Shit Happens
WoMakersCode 2016 - Shit Happens
 

Recently uploaded

2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
ayushiqss
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
NaapbooksPrivateLimi
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
KrzysztofKkol1
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
varshanayak241
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
XfilesPro
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
MayankTawar1
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
Peter Caitens
 

Recently uploaded (20)

2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
 

Product! - The road to production deployment

  • 1. PRODUCT! THE ROAD TO PRODUCTION DEPLOYMENT presented by /Filippo Zanella @r4m
  • 2. WHO I AM Ph.D. in Information Engineering at the , Visiting Researcher at UC Berkeley and UC Santa Barbara. University of Padua Founder of , full-stack engineer (RubyOnRails & Ember.js). Sellf srl President of the and Member of the . Fencing Club of Montebelluna Rotary Club of Montebelluna
  • 3. SELLF Sellf helps people in sales monitor their deals and manage their activities to grow and close them. Small business owners, professionals and sales agents usually struggle to keep their business life organized, overwhelmed by spreadsheets, todo lists, calendars and notes.
  • 4. PROTOTYPING BE STUBBORN ON VISION BUT FLEXIBLE ON DETAILS. (JEFF BEZOS, AMAZON)
  • 5. THE ARDUINO WAY A prototype is meant to be a test. Built using the most "hacky" approach with the least amount of time to get initial feedback on whether a concept is viable. Copyright © 2006-2011 by John Szakmeister
  • 6. CONCEPT Handmade sketch of the data visualization of the app.
  • 7. BACKBONE Try to de ne as much as you can: Infrastructure Communication protocol Database schema UX ow
  • 8. WIREFRAMES Detailed descriptions of the different views of the app.
  • 10. MINIMUM VIABLE PRODUCT IF YOU AREN'T EMBARRASSED BY THE FIRST VERSION OF THE PRODUCT YOU'VE LAUNCHED TOO LATE. (REID HOFFMAN, LINKEDIN)
  • 11. MVP It is built from the smallest set of features that delivers customer early adopters value. More than 60% of features in software products are rarely or never used. Prioritize each feature according to a few factors: 1. How important is this feature for nishing the process? 2. How often will the feature be used? 3. How many users will use this feature? 4. How much value will the feature bring to the customer? 5. How risky is this feature? 6. How much time does it take to be implemented?
  • 12. SAAS, BAAS, PAAS, IAAS Software as a Service (Sellf, Google Apps, GoToMeeting) Backend as a Service (Parse, Apprenda) Platform as a Service (AWS Beanstalk, Heroku) Infrastructure as a Service (AWS EC2, Microsoft Azure)
  • 13. PRODUCT IT IS NOT ABOUT BITS, BYTES AND PROTOCOLS, BUT PROFITS, LOSSES AND MARGINS. (LOU GERSTNER, IBM)
  • 14. WHEN THE HEAT GETS HOT You cannot survive with (too) buggy and clumsy code. You slightly move from MVP and beta releases to a working app that your customer expect to be: fast secure stable While you see your user base increasing, you see their expectations growing too.
  • 16. LOGGING & ALERTING Log activities of your app to nd: failures bugs heavy algorithms expensive queries unwanted/unexpected behaviors Set alerts to be noti ed when speci c events occur. Building an ef cient logging and alerting system allows your team to nd and x problems quickly.
  • 17. USER BEHAVIOR MONITORING What people really do with your application.
  • 18. PERFORMANCE MONITORING Nobody writes slow code on purpose.
  • 19. AVAILABILITY MONITORING How do you know when your app has an outage?
  • 21. NETWORK ERRORS $.ajax({ type: 'POST', url: '/some/resource', success: function(data, textStatus) { // Handle success }, error: function(xhr, textStatus, errorThrown) { if (xhr.status) { if (xhr.status === 403) { // Handle forbidden access error } else { // Handle generic error } } } });
  • 25. ...LIBRARY REPLACEMENT In the long run, libraries are like a stick in the mud: not longer maintained degrade performance missing custom needs not easy to debug
  • 26. YOUR ERRORS The bloody asynchrony callAction: function() { var _this, defer; _this = this; defer = Ember.RSVP.defer(); defer.promise.then(function() { if (_this && !_this.isDestroyed) { return _this.set('isLoaded', true); } }, function() { if (_this && !_this.isDestroyed) { return _this.set('isLoaded', false); } }); }
  • 27. MAINTAIN 3RD-PARTY SOFTWARE UPDATED When the project relies on external software, it's useful to leverage the updates, for: Fix bugs (not caused by our app) Improve overall performances Adding new features Deprecate old conventions
  • 28. CHANGELOG Record of all the changes made to a project.
  • 29. Now the inline form can be use in addiction: EXAMPLE OF BUMPING Prior v1.11 in Ember's an ifcondition in a template was limited to the following syntax: {{#if isEnabled}} <a class="active" href="http://www.facebook.com">Facebook</a> {{else}} <a class="disabled" href="http://www.facebook.com">Facebook</a> {{/if}} <a class="{{if isEnabled 'active' 'disabled'}}" href="http://www.facebook.com" simpli ng the number of lines of code, enhancing readability and allowing new behaviours.
  • 30. SECURITY The Gartner Group however estimates that 75% of attacks are at the web application layer, and found out "that out of 300 audited sites, 97% are vulnerable to attack". The threats against web applications include: user account hijacking bypass of access control reading or modifying sensitive data presenting fraudulent content
  • 31. SQL INJECTION A technique where malicious users can inject SQL commands into an SQL statement, via web page input. Client <p>UserId: <br> <input type="text" name="UserId" value="105 or 1=1"></p> Server SELECT * FROM Users WHERE UserId = 105 or 1=1 The SQL above is valid. It will return all rows from the table Users, since WHERE 1=1 is always true!
  • 32. SSL The Secure Socket Layer is a cryptographic protocol designed to provide secure communications over a computer network. Serve everything over SSL. PS: don't let your certi cates expire.
  • 33. SCALING It means rapid adaptation to a growing user activity. You need to push your system to a higher level, getting the best from your infrastructure.
  • 34. APOCALYPSE NOW You'll never be ready till the day you have to.
  • 35. HARD STUFFS Load balancing, caching, CDN, background jobs, ... ... sharding, master/slaves, ETAGs, etc.
  • 36. TEAM GROWTH Being agile is mandatory when your team growths to stay focused in delivering real value to the company No wasting time on unneeded planning docs. No delivering features that do not t customers needs.
  • 39. IMPROVING PERFORMANCES An optimization analysis should include: network utilisation CPU memory usage database query Optimizing is critical because it has an impact on the scaling factor of the system!
  • 40. CODING TRICKS Parallel versus sequential assignment var a, b = 1, 2 a= 1, b = 2 5821.3 (±6.0%) i/s 8010.3 (±5.5%) i/s slow fast 40% faster!
  • 41. LOADING TIMES Google Developer Tools (via Chrome)
  • 42. UI DRAINING RESOURCE In a single-page framework, template rendering choices can make the difference in terms of RAM usage. <ul> {{#each alumni as |alumnus|}} <li> <p>Hello, {{alumnus.name}}!</p> <!-- This is RAM consuming... --> <div>{{detailed-profile content=alumnus}}</div> </li> {{/each}} </ul>
  • 43. UI DRAINING RESOURCE Destroy not visibile child views to free up their memory. <ul> {{#each alumni as |alumnus|}} <li> <p>Hello, {{alumnus.name}}!</p> <!-- Show the details only when the alumnus is selected --> {{#if view.isSelected}} <div>{{detailed-profile content=alumnus}}</div> {{/if}} </li> {{/each}} </ul>
  • 44. CROSS COMPATIBILITY The (W3C), founded in 1994 to promote open standards for the , pulled , together with others to develop a standard for browser scripting languages called " ". World Wide Web Consortium WWW Netscape Microsoft ECMAScript
  • 45. TEST DRIVEN DEVELOPMENT If you avoid at the beginning TDD practices, you'll discover that they are as much important as the app code itself. Continuous integration and testing is a must sooner or later. Tests can be applied to: backend - just do it. frontend - think about it. mobile - forget it.
  • 46. UNIT TESTS They are generally used to test a small piece of code and ensure that it is doing what was intended. App.SomeThing = Ember.Object.extend({ foo: 'bar', testMethod: function() { this.set('foo', 'baz'); } }); module('Unit: SomeThing'); test('calling testMethod updates foo', function() { var someThing = App.SomeThing.create(); someThing.testMethod(); equal(someThing.get('foo'), 'baz'); });
  • 47. REFACTORING Improving the design of code without changing its behavior. Clarity enables performance: long methods speculative code comments When you look back to your one-year old code you look at it with the same compassion with whom you look at a photo of you a few years before: you wonder how the hell you could get those clothes and that hairstyle.
  • 48. REMOVE DUPLICATION if (this.target.entity.is("decoration")) { this.target.entity.game.publish("decoration/showBoost", { entityView: this.target, x: this.target.entity.x, y: this.target.entity.y }); } var entity = this.target.entity; if (entity.is("decoration")) { entity.game.publish("decoration/showBoost", { entityView: this.target, x: entity.x, y: entity.y }); }
  • 49. USE MEANINGFUL NAMES var p = this.current.params; var r = this.current.results; if (r.restProduct) { p.query = r.prestProduct; } var params = this.current.params; var results = this.current.results; if (results.restProduct) { params.query = results.prestProduct; }