Video summary
288. The Best Approach for Building a Large Web Application
Main summary
Key takeaways
Main ideas, concepts, and lessons
-
Start with clear, written scope and planning
- Define what “Version 1” includes and what future enhancements might include.
- Avoid relying on verbal agreement or assumptions (misremembering what was agreed can become costly).
- Ensure everything is documented whether you’re a consultant or an internal team.
-
Build only the “minimum viable” Version 1, then expand
- Version 1 should be no more than the MVP (or essentially the MVP).
- Avoid trying to deliver all desired features in the first release—this can delay deployment for many months/years and make the product outdated before users see it.
- Maintain a future enhancement list so you can say “not for V1” but still track it for later.
-
Use rough sketches to align expectations early
- Create an extremely rough UI/flow sketch (physically or sketch-style digital) and walk stakeholders through it.
- The goal is to get sign-off on workflows and structure while everyone understands it’s not a finished product.
- Avoid “too-real” drag-and-drop or polished mockups, because they create false expectations about readiness/timeline (stakeholders may think it’s almost done).
-
Build a “vertical slice” (a thin but complete end-to-end prototype)
- Treat it like a game-dev vertical slice: include a little of everything, not a full system.
- For a web app, a vertical slice should cover core workflows such as:
- Authentication
- Small-scale data access
- Some UI/display
- Basic styling/structure
- Example: one login page plus one sample authenticated page
- Purpose:
- Test key engineering decisions early (data access approach, CSS/layout patterns, page structure).
- Establish patterns to replicate across the rest of the app.
- Keep changes cheaper by validating foundations early.
- Gather feedback immediately (internal team + external users/stakeholders).
-
Scale from the vertical slice by parallelizing work
- Once the slice works, assign team members to build additional pages/features using the slice as the north star/pattern reference.
- This enables parallel development while maintaining consistent architecture and approach.
- Process framework choice (Scrum vs waterfall) is secondary; the key is delivering small working parts and iterating.
Best practices
-
Write clear plans for V1 and future enhancements
- Put decisions in writing.
- Specify what the first release is and what is explicitly deferred.
- Use documentation as a checklist and expectation anchor.
-
Keep Version 1 near MVP
- Release a working product early.
- Add enhancements only after learning from real feedback and needs.
- Maintain a future enhancement list.
-
Sketch/roughly draw the product before building
- Use very rough visuals to align stakeholders.
- Prefer tools/mediums that look clearly unfinished (e.g., pencil/legal pad or sketch tools like Excalidraw).
- Walk stakeholders through interactions and flows.
- Avoid high-fidelity mockups that mislead about progress.
-
Build a vertical slice
- Include end-to-end fundamentals (auth + data access + UI).
- Use it to:
- Validate foundational choices (architecture, CSS, data patterns).
- Provide a concrete target for feedback.
- Reduce later rework.
- Get feedback early while changes are cheap.
-
Keep improving from there (parallelize using the slice)
- Divide work once patterns exist.
- Ensure everyone builds consistently from the slice.
-
Put as little as possible on a page
- Avoid dumping large datasets into UI components (e.g., grids containing huge numbers of records).
- Show only what users need to do their next action.
- Load more detail only when the user performs the next step (e.g., when viewing/working the selected item).
-
Keep things simple
- Default to simpler architectures and avoid “complex because we might need it later.”
- Don’t build for “Google scale” prematurely.
- Complexity can slow down delivery and harm the customer experience.
-
Keep dependencies light
- Every dependency increases risk.
- Example: left-pad removed from npm → many apps broke due to unnecessary reliance.
- Use dependencies only where truly necessary.
- Prefer consolidating around fewer vendors/maintainers instead of many different ones.
-
Get feedback as early as possible
- Validate UI/design preferences (colors, fonts).
- Validate functional choices early (auth method, login approach).
- Make changes before too much is implemented.
-
Use documented plans as guidelines and protection
- Use written scope to:
- Determine what “done” means.
- Push back when new demands appear.
- Negotiate timeline and scope adjustments if something new is requested.
- Use written scope to:
Pitfalls to avoid
-
Scope creep
- Adding features “because it’s faster” is still scope creep.
- Treat new requests as new work; discuss tradeoffs and timeline.
- Put deferred items into the “next list” (future enhancements), not into the current build.
-
Changing technology midstream
- Avoid switching frameworks/libraries during development unless required.
- Upgrading late can cause rework and delay the release.
- Exception case described: major breaking change scenario (example: AngularJS → Angular 2 transition) where the speaker chose to finish rather than rewrite.
-
Doing too much in the first version
- Don’t try to include everything “essential.”
- Trying to pre-bake everything can lead to a never-released product (“the never version”).
- Add features incrementally after something working is deployed.
-
Complexity without enough added value
- Avoid overengineering approaches like unnecessary microservices.
- Microservices can add:
- Complexity and operational overhead
- Performance overhead (network calls within distributed systems)
- Harder debugging (more systems to trace)
- Only adopt added complexity if it provides clear extra value.
Speaker / sources featured
- Tim Corey (host/speaker; closes with “Thanks for listening… I am Tim Corey.”)
- No other named individuals were featured.
- Reference example mentioned (as a real-world case):
- left-pad (npm package) and its maintainer dispute (not a named person in the subtitles beyond “the author”).
- Tool mentioned:
- Excalidraw (specifically recommended for sketch-style diagrams).