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!


Use dark launches, feature flags, canary deployments

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


Joel Spolsky:

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