Product! - The road to production deployment

Filippo Zanella
Filippo ZanellaFounder at Sellf
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!
1 of 50

Recommended

Behavior driven development - cucumber, Junit and java by
Behavior driven development - cucumber, Junit and javaBehavior driven development - cucumber, Junit and java
Behavior driven development - cucumber, Junit and javaNaveen Kumar Singh
3.6K views49 slides
Continuous integration in large programs by
Continuous integration in large programsContinuous integration in large programs
Continuous integration in large programsNaveen Kumar Singh
267 views19 slides
Practicing Agile through Scrum by
Practicing Agile through ScrumPracticing Agile through Scrum
Practicing Agile through ScrumNaveen Kumar Singh
1.7K views61 slides
Beyond TDD: Enabling Your Team to Continuously Deliver Software by
Beyond TDD: Enabling Your Team to Continuously Deliver SoftwareBeyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver SoftwareChris Weldon
1.5K views127 slides
iOS Scroll Performance by
iOS Scroll PerformanceiOS Scroll Performance
iOS Scroll PerformanceKyle Sherman
26.7K views40 slides
Scrum And Tfs by
Scrum And TfsScrum And Tfs
Scrum And TfsJames Phillips
5.1K views36 slides

More Related Content

What's hot

Agile Engineering Practices by
Agile Engineering PracticesAgile Engineering Practices
Agile Engineering PracticesKane Mar
1.5K views79 slides
Understanding Scrum by
Understanding ScrumUnderstanding Scrum
Understanding Scrumnikos batsios
1.8K views58 slides
Understanding Kanban by
Understanding KanbanUnderstanding Kanban
Understanding Kanbannikos batsios
693 views51 slides
Continuous Delivery by
Continuous DeliveryContinuous Delivery
Continuous DeliveryMike McGarr
15.1K views63 slides
Working Agile with Scrum and TFS 2013 by
Working Agile with Scrum and TFS 2013Working Agile with Scrum and TFS 2013
Working Agile with Scrum and TFS 2013Moataz Nabil
8.1K views55 slides
MeetingPoint 2015 - Swimming upstream in the container revolution by
MeetingPoint 2015 - Swimming upstream in the container revolutionMeetingPoint 2015 - Swimming upstream in the container revolution
MeetingPoint 2015 - Swimming upstream in the container revolutionBert Jan Schrijver
698 views25 slides

What's hot(18)

Agile Engineering Practices by Kane Mar
Agile Engineering PracticesAgile Engineering Practices
Agile Engineering Practices
Kane Mar1.5K views
Continuous Delivery by Mike McGarr
Continuous DeliveryContinuous Delivery
Continuous Delivery
Mike McGarr15.1K views
Working Agile with Scrum and TFS 2013 by Moataz Nabil
Working Agile with Scrum and TFS 2013Working Agile with Scrum and TFS 2013
Working Agile with Scrum and TFS 2013
Moataz Nabil8.1K views
MeetingPoint 2015 - Swimming upstream in the container revolution by Bert Jan Schrijver
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 Schrijver698 views
QCon Beijing - April 2010 by Kane Mar
QCon Beijing - April 2010QCon Beijing - April 2010
QCon Beijing - April 2010
Kane Mar1.3K views
Team Foundation Server 2012 Reporting by Steve Lange
Team Foundation Server 2012 ReportingTeam Foundation Server 2012 Reporting
Team Foundation Server 2012 Reporting
Steve Lange22.8K views
Behavior Driven Development with Cucumber by Asheesh Mehdiratta
Behavior Driven Development with CucumberBehavior Driven Development with Cucumber
Behavior Driven Development with Cucumber
Asheesh Mehdiratta2.5K views
Software Development 2020 - Swimming upstream in the container revolution by Bert Jan Schrijver
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 Schrijver381 views
NextBuild 2015 - Swimming upstream in the container revolution by Bert Jan Schrijver
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 Schrijver507 views
Introduction to Project Management with Scrum by Pierre E. NEIS
Introduction to Project Management with ScrumIntroduction to Project Management with Scrum
Introduction to Project Management with Scrum
Pierre E. NEIS5.5K views
EuregJUG 2016-01-07 - Swimming upstream in the container revolution by Bert Jan Schrijver
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 Schrijver464 views
Devoxx BE 2015 - Swimming upstream in the container revolution by Bert Jan Schrijver
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 Schrijver710 views
Scrum + Behavior Driven Development (BDD) - Colombo by Naveen Kumar Singh
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 by SpringPeople
Mastering Test Automation: How To Use Selenium SuccessfullyMastering Test Automation: How To Use Selenium Successfully
Mastering Test Automation: How To Use Selenium Successfully
SpringPeople1.5K views
Black Marble Introduction To Scrum by BusinessQuests
Black Marble Introduction To ScrumBlack Marble Introduction To Scrum
Black Marble Introduction To Scrum
BusinessQuests2.3K views

Similar to Product! - The road to production deployment

DevOps in Practice: When does "Practice" Become "Doing"? by
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
4K views45 slides
The Analysis And Fault Tolerence Of Software Environment by
The Analysis And Fault Tolerence Of Software EnvironmentThe Analysis And Fault Tolerence Of Software Environment
The Analysis And Fault Tolerence Of Software EnvironmentVictoria Dillard
2 views43 slides
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments by
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy EnvironmentsPete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy EnvironmentsPeter Marshall
809 views53 slides
Best practice adoption (and lack there of) by
Best practice adoption (and lack there of)Best practice adoption (and lack there of)
Best practice adoption (and lack there of)John Pape
490 views23 slides
Advantages And Disadvantages Of Camelcase And Underscoc by
Advantages And Disadvantages Of Camelcase And UnderscocAdvantages And Disadvantages Of Camelcase And Underscoc
Advantages And Disadvantages Of Camelcase And UnderscocNicole Hodges
5 views45 slides
Development and QA dilemmas in DevOps by
Development and QA dilemmas in DevOpsDevelopment and QA dilemmas in DevOps
Development and QA dilemmas in DevOpsMatteo Emili
152 views35 slides

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

DevOps in Practice: When does "Practice" Become "Doing"? by Michael Elder
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 Elder4K views
The Analysis And Fault Tolerence Of Software Environment by Victoria Dillard
The Analysis And Fault Tolerence Of Software EnvironmentThe Analysis And Fault Tolerence Of Software Environment
The Analysis And Fault Tolerence Of Software Environment
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments by Peter Marshall
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy EnvironmentsPete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Peter Marshall809 views
Best practice adoption (and lack there of) by John Pape
Best practice adoption (and lack there of)Best practice adoption (and lack there of)
Best practice adoption (and lack there of)
John Pape490 views
Advantages And Disadvantages Of Camelcase And Underscoc by Nicole Hodges
Advantages And Disadvantages Of Camelcase And UnderscocAdvantages And Disadvantages Of Camelcase And Underscoc
Advantages And Disadvantages Of Camelcase And Underscoc
Nicole Hodges5 views
Development and QA dilemmas in DevOps by Matteo Emili
Development and QA dilemmas in DevOpsDevelopment and QA dilemmas in DevOps
Development and QA dilemmas in DevOps
Matteo Emili152 views
30 days or less: New Features to Production by Karthik Gaekwad
30 days or less: New Features to Production30 days or less: New Features to Production
30 days or less: New Features to Production
Karthik Gaekwad703 views
DevOps Fest 2020. immutable infrastructure as code. True story. by Vlad Fedosov
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 Fedosov157 views
Software Development Standard Operating Procedure by rupeshchanchal
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure
rupeshchanchal2.5K views
Availability in a cloud native world v1.6 (Feb 2019) by Haytham Elkhoja
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 Elkhoja342 views
Stream SQL eventflow visual programming for real programmers presentation by streambase
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
streambase1.5K views
CucumberSeleniumWD by Vikas Sarin
CucumberSeleniumWDCucumberSeleniumWD
CucumberSeleniumWD
Vikas Sarin277 views
DevSecOps | DevOps Sec by Rubal Jain
DevSecOps | DevOps SecDevSecOps | DevOps Sec
DevSecOps | DevOps Sec
Rubal Jain1.2K views
Andrea Baldon, Emanuele Di Saverio - GraphQL for Native Apps: the MyAXA case ... by Codemotion
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 ...
Codemotion121 views
Angular js mobile jsday 2014 - Verona 14 may by Luciano Amodio
Angular js mobile   jsday 2014 - Verona 14 mayAngular js mobile   jsday 2014 - Verona 14 may
Angular js mobile jsday 2014 - Verona 14 may
Luciano Amodio3.3K views
ITARC15 Workshop - Architecting a Large Software Project - Lessons Learned by João Pedro Martins
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 Martins1.7K views
Ci tips and_tricks_linards_liepins by Linards Liep
Ci tips and_tricks_linards_liepinsCi tips and_tricks_linards_liepins
Ci tips and_tricks_linards_liepins
Linards Liep513 views
Mage Titans USA 2016 - Jonathan Bownds - Magento CI and Testing by Stacey Whitney
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 Whitney126 views

Recently uploaded

Top-5-production-devconMunich-2023-v2.pptx by
Top-5-production-devconMunich-2023-v2.pptxTop-5-production-devconMunich-2023-v2.pptx
Top-5-production-devconMunich-2023-v2.pptxTier1 app
9 views42 slides
Understanding HTML terminology by
Understanding HTML terminologyUnderstanding HTML terminology
Understanding HTML terminologyartembondar5
8 views8 slides
Agile 101 by
Agile 101Agile 101
Agile 101John Valentino
13 views20 slides
Techstack Ltd at Slush 2023, Ukrainian delegation by
Techstack Ltd at Slush 2023, Ukrainian delegationTechstack Ltd at Slush 2023, Ukrainian delegation
Techstack Ltd at Slush 2023, Ukrainian delegationViktoriiaOpanasenko
7 views4 slides
Chat GPTs by
Chat GPTsChat GPTs
Chat GPTsGene Leybzon
13 views36 slides
Playwright Retries by
Playwright RetriesPlaywright Retries
Playwright Retriesartembondar5
7 views1 slide

Recently uploaded(20)

Top-5-production-devconMunich-2023-v2.pptx by Tier1 app
Top-5-production-devconMunich-2023-v2.pptxTop-5-production-devconMunich-2023-v2.pptx
Top-5-production-devconMunich-2023-v2.pptx
Tier1 app9 views
Understanding HTML terminology by artembondar5
Understanding HTML terminologyUnderstanding HTML terminology
Understanding HTML terminology
artembondar58 views
ADDO_2022_CICID_Tom_Halpin.pdf by TomHalpin9
ADDO_2022_CICID_Tom_Halpin.pdfADDO_2022_CICID_Tom_Halpin.pdf
ADDO_2022_CICID_Tom_Halpin.pdf
TomHalpin96 views
predicting-m3-devopsconMunich-2023.pptx by Tier1 app
predicting-m3-devopsconMunich-2023.pptxpredicting-m3-devopsconMunich-2023.pptx
predicting-m3-devopsconMunich-2023.pptx
Tier1 app10 views
Dapr Unleashed: Accelerating Microservice Development by Miroslav Janeski
Dapr Unleashed: Accelerating Microservice DevelopmentDapr Unleashed: Accelerating Microservice Development
Dapr Unleashed: Accelerating Microservice Development
Miroslav Janeski16 views
aATP - New Correlation Confirmation Feature.pptx by EsatEsenek1
aATP - New Correlation Confirmation Feature.pptxaATP - New Correlation Confirmation Feature.pptx
aATP - New Correlation Confirmation Feature.pptx
EsatEsenek1222 views
Top-5-production-devconMunich-2023.pptx by Tier1 app
Top-5-production-devconMunich-2023.pptxTop-5-production-devconMunich-2023.pptx
Top-5-production-devconMunich-2023.pptx
Tier1 app10 views
tecnologia18.docx by nosi6702
tecnologia18.docxtecnologia18.docx
tecnologia18.docx
nosi67026 views
How To Make Your Plans Suck Less — Maarten Dalmijn at the 57th Hands-on Agile... by Stefan Wolpers
How To Make Your Plans Suck Less — Maarten Dalmijn at the 57th Hands-on Agile...How To Make Your Plans Suck Less — Maarten Dalmijn at the 57th Hands-on Agile...
How To Make Your Plans Suck Less — Maarten Dalmijn at the 57th Hands-on Agile...
Stefan Wolpers44 views
Quality Engineer: A Day in the Life by John Valentino
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the Life
John Valentino10 views
How Workforce Management Software Empowers SMEs | TraQSuite by TraQSuite
How Workforce Management Software Empowers SMEs | TraQSuiteHow Workforce Management Software Empowers SMEs | TraQSuite
How Workforce Management Software Empowers SMEs | TraQSuite
TraQSuite7 views
predicting-m3-devopsconMunich-2023-v2.pptx by Tier1 app
predicting-m3-devopsconMunich-2023-v2.pptxpredicting-m3-devopsconMunich-2023-v2.pptx
predicting-m3-devopsconMunich-2023-v2.pptx
Tier1 app14 views

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; }