Should I Build
Or Should I Not
Your Host Tonight
@pinchito
Alex Fernández
Senior Developer at MediaSmart Mobile
What We Will See
A Story for Builders
Some Case Studies
Rational? Arguments
Emotional? Arguments
A Third Way
Conclusions
A Story for Builders
Decision Method for Managers
Run a detailed Total Cost of Ownership (TCO) study
...
And then promptly throw it away
You may be missing
crucial factors!
Some Case Studies
Continuous Deployment
Probably the most important practice in DevOps
Continuous Integration: tested on integration env
Continuous Delivery: tested on several envs
Continuous Deployment: go all the way and deploy!
Deployment Infrastructure
A simple bash script to start
Built for (and with) Node.js packages
Held together with some custom Node.js scripts
Recently migrated to StriderCD
Now with a Graphical Interface!
Nginx Balancer
Previously using Amazon's Elastic Load Balancer
Eating up to 20% of our monthly bill
Replaced by an Nginx balancer
DNS balancer in Node.js
Custom Lua logging
Some Numbers
Peaks of 325 krps
Average of 200 krps
16 billion requests per day
30 million daily impressions
Traffic Dashboard
Monitoring
Amazon CloudWatch: CPU usage
Custom systems monitoring:
memory, disk usage, database
Custom online monitoring:
servers up, site up
Custom business alerts:
ad exchanges, CTR, revenue
Business Partners
Not always appreciate our custom infrastructure
Would rather prefer standard packages
Household brands:
Jenkins, Icinga, Puppet, Chef
(We have evaluated those, didn't like)
Rational?
Arguments
Rational Arguments
Rational thought is not "natural":
It needs to be learned and cultivated
"Rational" arguments are often emotional in disguise
Humans tend to act and then rationalize
Some deconstruction may be required
Robustness
Commercial solutions are robust
Managers will probably nod wisely
Software developers will look at this with suspicion
Most commercial software is held together
with bailing wire and duct tape
Maintainability
Maintaining a bunch of custom code
hacked together by your predecessor is hard
Ugly code is everywhere
Companies go out of business all the time
Products are orphaned every day
Technical Debt
Once you start a software project,
you start accruing technical debt
Good teams have less technical debt
Do you have a good team?
Better than your vendor?
Otherwise, go out and get a good team!
Emotional?
Arguments
Emotional Arguments
Even more contentious than those before
Do not expect answers! Not from me
At most, some uncomfortable questions
The Joy of Building Things
People build things because they love to
Starting a green field project can be exhilarating
Helps attract and keep elusive talent
Someone had to build first!
Why let them have all the fun?
Primitive Technology
NIH Syndrome
"Not Invented Here":
Distrust products offered by third parties
If it is a core business function
do it yourself, no matter what.
As easy as identifying core business functions
Right?
Core Business Functions
Banks: outsourcing IT
Google: self-driving cars
Facebook: providing Internet access
Apple: music distribution, watches
Reinventing the Wheel
Does the world really need a new testing library?
I don't know or care
If I need it, I will surely build it
$7600 Tesla Wheels
Learning, the Easy Way
The best way to learn is by building
DevOps is not just installing a package
Make infrastructure a first-class citizen
Installing a package can be simple if you know how
The best way to learn infrastructure is by building it
Against Craftmanship
Software devs are artisans practicing their craft
Artisans may get carried away
and build too much
Use modules as standard parts
Maintaining software can be hard
and expensive
A Third Way
Customizable Solutions
Middle ground between building and installing
Install product, then customize
Plugins, extensions, APIs, hooks
SAP, Siebel, Fidelity Profile
Open Source Software
The logical continuation
Software as a community
Build custom extensions
and share them!
E.g.: send diffs by email
using StriderCD
Joining the Pieces
Combine several packages into a larger entity
Continuous deployment requires:
- code repos
- test library
- notification tools
- distributed deployment
May require glue code
Conclusions
Choose Your Path
There is not a universal path for all destinations
Consider:
- Are you building a state-of-the-art project?
- Which options is more cost-effective?
- Which option is more likely to succeed?
- What is the cost of switching?
- Which option is more fun?
So, Should I Build or Should I Not
The answer to every interesting yes/no question is: "it depends".
Adapted from @msanjuan
Strike a Balance
Must have fun
Must have profits
Try to have both!
Thanks!
Companion: https://alexfernandez.github.io/2016/build-or-not.html
Should I Build or Should I Not
By Alex Fernández
Should I Build or Should I Not
DevOps Pro 2016 Presentation, 2016-05-26
- 4,177