How to Survive the Zombie Apocalypse: Software Engineering for Web Startups
[Lecture slides. Work in progress…]
What the WWW was/is/will be all about, software engineering principles pertinent to web development (web=app=mobile), current failures and implications for startups, and maybe attempted forecasts?
A serial CTO's perspective on what makes the world (of PWA startups particularly) tick.
Narrative
Much of my startups experience involved web app development to some extent, so I'm sensitive to this specific industry's slide along some curve, or pendulum swing, or however you might explain this "zombie apocalypse" phenomenon that elders have been moaning about recently.
WWW is the best thing that happened in this (last) generation — and it is worth protecting.
- WWW: the web of everything
- Software engineering: goals and principles relevant to startups, web
- Zombies: recent trends
- Fail fast
- Prophecies
Word-Wide Web
There's a URI scheme for everything…
Evolution
דע מאין באת
- "Rodent oriented": long and messy re/evolution
- Transport protocol…
- … "misused as application container"
- Zen garden
- Rounded corners…
- Web 2.0
- User generated content (UGC)
- Rails… Meteor, Hoodie
- Web scale
"Rodent oriented"
(Credit to Sir TBL, and so many/few giants' shoulders, aside) the Web/Internet are a long sequence of many small technological revolutions.
- 70s: explosive growth
- BBS, CompuServe: network effect, social
- 80s: too much information, new tools needed
- "Lost in hyperspace"
- Precursors: Usenet (NNTP), Gopher, WAIS, VERONICA, IRC…
- Protocols (app layer): many before, and many since
Transport protocol…
90s: birth of WWW.
- HTML, HTTP
- URI/L, method, variants, content negotiation…
… "misused as application container"
Y2K: unresolved/able tension.
- Hypermedia future [Halasz]: didn't happen
- SSI, CGI, RIA, LAMP
- DHTML, AJAX, SPA
- Semantic Web, Linked Data [TBL]: also didn't happen? Yet?
… DOM API standard, SEO, bookmarklet, intranet, canvas, MathML (etc), WebRTC, REST, WebGL, iPhone(?), mobile, long tail, What the Stack?! (draft), Continuous(?), deferred script loading, HTTP/2, Devtools (Firebug, Weinre)…
Zen garden… dowebsitesneedto
Evolution (code).
- "Web isn't a poster": table-based layouts… raster→vector, 960 pixels, RWD, Flexbox, Grid
- Content/styling/behavior: separation of concerns (informal).
- (Inwards) Hacks, polyfills, jQuery, Houdini
- (Outwards) Unhosted, serverless, Bespin, Electron
Rounded corners…
Evolution (design).
- (Upwards) Dao of Web Design [LMGTFY?]
- Styleguide, Material Design, design system…
Web 2.0
… Web 2.0
User generated content (UGC)
(NB: how radically different the WWW is — from non-networked, GUI, media…)
- Karma… WikiWikiWeb: crowdsourcing, Cunningham's Law
- Folksonomies… Wisdom of the crowd
- Mashups, syndication, hackability
- Changed business models, YouTubers…
Rails… Meteor, Hoodie
How that evolution manifested in implementations. "The nice thing about standards is that you have so many to choose from."*
- Preprocessing (SSI), asset pipelining… DSLs (HAML, Sass, CoffeeScript)
- Middleware, micro-libraries, micro-frameworks
- "Explicit is better" — or is it?
- Scaffolding: convention
- No HTTP (→WebSockets), no HTML (on wire) (→JSON), no CSS (→Stylus)
- Ecosystem: package/dependencies management
Web scale
- CDN
Superpowers
To summarize: WWW (tech stack, aka platform) > GUI (desktop, native).
- Inherently, or historically positioned to, better handle diversity
- i18n/L10n
- Devices, form factor
- RWD (eg smartwatch, Google Glass)
- A11y (eg touch)
- Personalization, branding, etc (contrast with GUI rooted in uniformity)
- Native proprietary stacks suck!
- CDN > Rollout
- Already penetrated/won market: hybrid (WebView)
- Web 2.0, UGC, karma, SEO (see semantic), hypermedia (see),
- Social: FOAF, long tail, Webmentions…
- RWD, Mobile Web, PWA
… Incommensurable??
Hyper{text/media/space}
- Memex??… NoteCards
- [Halasz]
- Rabbit holes: Tools for Thought / Howard Rheingold: "an exercise in retrospective futurism"
Weaknesses
…?
Zombies
Weaknesses??
- Dear Developer, The Web Isn't About You
- Bloatware: average site heavier than Doom
"Is it web scale?"
- Long tail
- Cal Henderson, Dunning-Kruger
Front-end… backstab
- Django (et al) is broken
- Conway's Law
"Native"
- iPhone
- Marketing
- Look & feel
- App Store
- Rollout
- Evil Corp vetting
- Branding and modern UI
GUI stacks
- WIMP to CUA, Alto to WorkplaceOS
- MVC (Smalltalk), CDE, Taligent, DCOM/CORBA
Whatever happened to?
- Web components
- Google Wave
- Dart (Swing…?)
- Crockford's Seif
ad absurdum
- $#@! website and sequels
- Make Frontend Shit Again
Bleeding edge: state of the art
Where are we today? Best practices?
- PWA
- 12 Factor App Manifesto, Dao of Web Design
- Continuous
- Progressive enhancement: vs graceful degradation, in HTML, CSS, JS, feature detection, micro-experiences instead of "apps", inclusiveness/empathy…
PWA
12 Factor App Manifesto
- Codebase: One codebase tracked in revision control, many deploys
- Dependencies: Explicitly declare and isolate dependencies
- Config: Store config in the environment
- Backing services: Treat backing services as attached resources
- Build, release, run: Strictly separate build and run stages
- Processes: Execute the app as one or more stateless processes
- Port binding: Export services via port binding
- Concurrency: Scale out via the process model
- Disposability: Maximize robustness with fast startup and graceful shutdown
- Dev/prod parity: Keep development, staging, and production as similar as possible
- Logs: Treat logs as event streams
- Admin processes: Run admin/management tasks as one-off processes
…
Software engineering
Eclectic reminders of concepts relevant to startups, web.
Discipline
Neglected, rare. Daoism?
- People-centered (cf Agile Manifesto)
- Limitations-centered: cognitive complexity, adaptive complexity (vs time-space)
No silver bullet
Origins.
- Software Crisis, 1968
- Criteria [for modularization], 1974
- OOA/D vs OOP
- Liskov substitution principle, type theory, correctness
- Process, Principles, and Goals, 1975
Life cycle methodologies
Meta of programming.
- SDLC. ALU.
- Waterfall
- Extreme Programmers (XP), "release early and often", Continuous
- … Agile Manifesto
Chief cause of problems is solutions
- Solution space; Whorf-Sapir?
- Analysis
- Specifications (formal)
- DSLs
NoSQL, no types, no OOP, no patterns
- Schemaless, no migrations
- Type theory/systems: weak, strong, static→dynamic
- Sharding — naturally
Zombies: where do they come from?
Contagion
- Social phenomena
- Women invent programming, then displaced when commercialized during 70s; again, in recent apocalypse: feminization of workforce/poverty
- Seniority distribution [Uncle Bob]
Can't go into zeitgeist/Trump — post-truth, idiocracy, propaganda, fake…
Underlying causes
… except a few mentions?
- Python paradox [Paul Graham]
- Law of the hammer
- Stupid tech = stupid people
… Dunning-Kruger? (Maybe not dyslexia, attention deficit, smartphones)
You've ruined JS
We're doomed.
- "… not knowing how miserable they are" [Crockford]
- Programmer (language) evolution
- Crockford's Seif?
- Desert generation [Bible]
Hype driven
Etiology.
- JS fatigue
- It's the future!
EvilMVC: post-truth
Prognosis.
- "The DOM isn't slow, you are."
- Solutions to problems you don't have
Conway's Law
כל התורה על רגל אחת.
…
Your language sucks
Linguistic turn.
- Design patterns vs language features [eg, Java vs LISP]
- Whorf-Sapir
…
Critical theory: is hard
… "Ontology engineer" (problem/solution space), epistemology, anti-positivism, poetic, deconstruction, incommensurability, "indistinguishable from magic", "not evenly distributed", adoption curve/hype cycle, spiral dynamics (everybody's right), stages of simulacrum, worse is better, Dunning-Kruger, thermodynamics?
Fail fast
Evidence: you (>99%) will fail!
- "הון סיכון", Gaussian distribution, herd mentality, bubbles, adoption curve/hype cycle
- Embrace failure: learn, from experience, takes time
- Fail better: differentiation, competitive, innovate
- Fail faster: TTM, engineering
Technophobia
- Priority: time to market (because it must be a competition)
- You're doing it wrong: over-schedule/budget
- It's the tech (methodology), dummy!
SE for startups
Engineering: quality of service (ie orthogonal to features).
- YAGNI
- Plan to throw one away
…
- Due diligence
- Unicorns
Disclaimers
- "Everything takes longer and costs more."
- "There is always one more bug." [First law of cybernetic entomology]
Prophecies
(Given to fools?)
--
The real world is a special case