How to Survive the Zombie Apocalypse: Software Engineering for Web Startups

Lecture (slides). WIP…

What the WWW is all about, SE principles specific to web apps development, recent failures and implications for startups, and maybe some forecasts?



  1. WWW
    1. What?
    2. Evolution
    3. Strengths
    4. Weaknesses
    5. Bleeding edge
  2. SE
  3. Zombies
  4. Fail fast
  5. Prophecies

Rodent-oriented: 80s precursors

70s: Internet growth explosive, network effect. 80s: too much information, “lost in hyperspace”, new tools needed.

  1. BBS, CompuServe: network effect
  2. Usenet (NNTP), Gopher (WAIS, VERONICA), IRC…
  3. Many protocols before, and many since


  1. Memex?… NoteCards
  2. [Halasz]

Rabbit holes:

  1. Tools for Thought / Howard Rheingold: “an exercise in retrospective futurism”

Transport protocol…

90s: birth of WWW.

  2. URI/L

… “misused as application container”

  1. Hypermedia future
  4. Semantic Web, Linked Data

… DOM API standards, (DHTML), SEO, UGC, mashups, bookmarklet, intranet, canvas, MathML (etc), selectors, WebRTC, MVC fiasco, REST, WebGL, iPhone(?), mobile, long tail, What the Stack?! (draft), continuous(?), deferred script loading, HTTP/2, Weinre…

Zen gardendowebsitesneedto


  1. “Web isn’t a poster”: table-based layouts… raster→vector, 960 pixels, RWD, Flexbox, Grid
  2. Content/styling/behavior
  3. Hacks, polyfills, jQuery, Houdini
  4. Unhosted, serverless, Bespin, Electron

Rounded corners…

  1. Styleguide, material design, design system

Web 2.0

Web 2.0

User generated content (UGC)

  1. Karma, folksonomies, mashups, syndication, hackability, changed business models, YouTubers…

Rails… Meteor

  1. Preprocessors, asset pipelining
  2. DSLs
  3. Middleware, micro-frameworks
  4. Platform?
    1. No HTTP (→WebSockets), no HTML (on wire; →JSON), no CSS (→Stylus)
    2. Scaffolding
    3. Ecosystem (ie package/dependencies management)

Web scale

  1. CDN


To summarize evolution: Web (tech stack) > GUI (desktop, “native”…).

  1. Inherently, or historically, positioned to handle better
    1. i18n/L10n
    2. Devices, form factor
      1. RWD (eg smartwatch, Google Glass)
      2. A11y (eg touch)
  2. Web 2.0, , UGC, karma, SEO (see semantic), hypermedia (see),
    1. Social: FOAF, long tail…
  3. “Native” proprietary stacks suck!
    1. CDN > Rollout
    2. Already penetrated/won market: hybrid (WebView)
  4. RWD, Mobile Web
  5. (Incommensurable?)


But, weaknesses…

  1. Dear Developer, The Web Isn’t About You
  2. Bloatware: average site worse than Doom

“Is it web scale?”

  1. Long tail
  2. Cal Henderson, Dunning-Kruger

Front-end… backstab

  1. Django (et al) is broken
  2. Conway’s Law


  1. iPhone
  2. Marketing
    1. Look & feel
    2. App Store
  3. Rollout
  4. Evil Corp vetting
  5. Branding and modern UI

GUI stacks

  1. WIMP to CUA, Alto to WorkplaceOS
  2. MVC (Smalltalk), CDE, Taligent, DCOM/CORBA

Whatever happened to?

  1. Web components
  2. Google Wave
  3. Dart (Swing…?)
  4. Crockford’s Seif

ad absurdum

  1. $#@! website and sequels
  2. Make Frontend Shit Again

Bleeding edge: state of the art

Where are we today? Best practices?

  1. PWA
  2. 12 Factor App Manifesto
  3. Continuous
  4. Progressive enhancement: graceful degradation, in HTML, CSS, JS, feature detection, micro-experiences instead of “apps”, inclusiveness/empathy…


  1. Designing Progressive Web Apps by Jason Grigsby

12 Factor App Manifesto

  1. Codebase: One codebase tracked in revision control, many deploys
  2. Dependencies: Explicitly declare and isolate dependencies
  3. Config: Store config in the environment
  4. Backing services: Treat backing services as attached resources
  5. Build, release, run: Strictly separate build and run stages
  6. Processes: Execute the app as one or more stateless processes
  7. Port binding: Export services via port binding
  8. Concurrency: Scale out via the process model
  9. Disposability: Maximize robustness with fast startup and graceful shutdown
  10. Dev/prod parity: Keep development, staging, and production as similar as possible
  11. Logs: Treat logs as event streams
  12. Admin processes: Run admin/management tasks as one-off processes

Software engineering

No silver bullet

  1. Software Crisis, 1968
  2. Criteria [for modularization], 1974
    1. OOA/D vs OOP
    2. Liskov substitution principle
    3. Type theory
  3. Process, Principles, and Goals, 1975

Life cycle methodologies

  1. Waterfall
  2. Extreme Programmers (XP)
  3. Agile Manifesto

Zombies: where do they come from?

History of

  1. Social phenomenon
    1. Women invent programming…
    2. … then displaced when commercialized during 70s
    3. In recent apocalypse: feminization of workforce/poverty
  2. Seniority distribution; Uncle Bob?

Underlying causes

  1. Python paradox [Paul Graham]
  2. Law of the hammer
  3. Relativism and idiocracy: post-truth, fake democracy
  4. (Maybe not dyslexia, attention deficit, smartphones)

You’ve ruined JS

  1. “… not knowing how miserable they are” [Crockford]
  2. Programmer (language) evolution
  3. Crockford’s Seif?
  4. Desert generation

EvilMVC: hype driven

  1. JS fatigue
  2. It’s the future!

EvilMVC: post-truth

  1. “The DOM isn’t slow, you are.”
  2. Problems you never had

Conway’s Law

Your language sucks

  1. Design patterns vs language features

Critical theory is hard

  1. “Ontology engineer” (problem/solution space), epistemology, anti-positivism, poetic, deconstruction, indistinguishable magic, “not evenly distributed”, adoption curve/hype cycle, spiral dynamics
  2. (Stages of simulacrum? Worse is better? Dunning-Kruger? Thermodynamics?)

Fail fast

Evidence proves: you will (>99%) fail! So, embrace failure, fail better, fail faster.

  1. “הון סיכון”, Gaussian distribution, herd mentality, bubbles
  2. Adoption curve/hype cycle


  1. Time to market, over-budget, quality of service

SE for startups

  1. YAGNI
  2. Plan to throw one away

  1. Due diligence
  2. Unicorns



  1. Luke’s notes from JK’s lecture The Way of the Web

Comments are closed.