* Currently VP Engineering at Keen IO * 4+ years of startups * 5+ years of enterprise consulting * Lead Engineer / Founding team Togetherville, 2009 (Disney) A Pivotal Client!! * Interested in distributed systems, high- performance, and linear scalability
most distributed systems are complex, fault tolerant, and scale linearly * henceforth I’ll use “distributed system” to mean a “complex-linear distributed system” --- why is this important to me, a full stack developer?
my experience, each lap of the block takes 2,000 to 3,000 hours. Developers who stick it out for 10-20k hours often reach the coveted ‘full-stack bad ass’ status. Full stack devs don’t always do *all* the work - they just could if they had to.
business value business value business value user interface user interface user interface (some) design (some) design (some) design MVC Request Request Action Action API’s data access data access business logic business logic services services data modeling data modeling data modeling data formats data formats data formats kernel network network I/O I/O shell
user interface A/B testing user interface A/B testing test-driven API development test-driven API development database performance tuning database performance tuning linux kernel debugging linux kernel debugging
design heuristics for distributed systems: partitioning, serialization, fault tolerance, tradeoﬀs (like CAP), performance, capacity... path-oriented design: model the system as interdependent paths (e.g. read path / write path) and distribute complexity via priority
thus, it becomes the key driver of the design. This is very diﬀerent than traditional web/ app work where performance optimization can come later. Insuﬃcient performance can undermine everything in the 11th hour #realtalk
CPU instruction 1 ns fetch from memory 100 ns send 2k over a 1Gbps network 20,000 ns read 1MB from memory 250,000 ns spinning disk seek 8,000,000 ns read 1MB from disk seq. 20,000,000 ns send packet US->UK & back 150,000,000 ns SSD disk seek 150,000 ns read 1MB seq. from SSD 1,000,000 ns round trip in same DC 500,000 ns run unit tests 60,000,000,000 ns github page load 161,000,000 ns hire a full stack engineer 2E+15 ns raise a round of funding 7.7E+15 ns From Norvig, others These numbers are guidelines and YMMV. You’ve been warned!
lot of “devops” provisioning; be it chef, puppet, or salt. oh, and vagrant (with vmware) monitoring; new relic is great, but it won’t be enough. embrace it. make friends with devops and ops folks. you will need their tools to have any idea of how your complex system is behaving.
a distributed database. 2) Do a project with Storm or a similarly well-abstracted distributed system. 3) Integrate automated provisioning into your development workﬂow. 4) Chaos monkey ideally fault-tolerant parts of your existing system.
10 years http://norvig.com/21-days.html What is a full stack developer? http://www.laurencegellert.com/2012/08/what-is-a-full- stack-developer/ The Full Stack, Part 1 https://www.facebook.com/note.php? note_id=461505383919