The development of a product from the point of view of a technician, starting from the concept, passing to the minimum viable till a management of a fully operational and deployed app.
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.
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.
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
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.
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!
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.
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;
}