Coder Social home page Coder Social logo

devabubakar / system-design-react-code-examples Goto Github PK

View Code? Open in Web Editor NEW

This project forked from madhu-sagar/system-design-react-code-examples

3.0 0.0 0.0 428 KB

A curation of code examples and in depth technical implementation approaches to solve the common frontend system design issues in React.

License: MIT License

system-design-react-code-examples's Introduction

system-design-react-code-examples

A curation of code examples and in depth technical implementation approaches to solve the common frontend system design issues in React.


Target Audience

  1. advanced beginner/intermediate developers wishing to get better technical understanding
  2. developers exploring how to do handle technical things in their own projects.
  3. for my own reference as I need something like this for my own learning.

Philosophy

The philosophy behind this endeavour is to document as much as possible a practical guide as possible someone looking to level-up fast/ implement things.

“Talk is cheap. Show me the code.” — Linus Torvalds



Architecture Deep dive


Engineering Design

  • Team size
  • User base
  • Knowledge base
  • Compliance/Governance
  • User/Client expectations
  • Open source vs proprietary
  • Documentation / PRD
  • Future Roadmaps

High Level Design

  • Platform identification
  • SPA vs MPA
  • SSR, SSG, CSR
  • Tech stack
  • Search Engine Optimization
  • CI/CD
  • User Experience
  • A/B testing
  • MVP planning
  • Server Side Architecture
  • Security
  • State Management
  • Internationalization - example
  • E2E testing
  • Tools Integration
  • Authentication & Authorization
  • Quality Assurance & Control
  • User role management - example

Low Level Design


High Level Design details


Product Requirement Document (PRD) / Design Document

  • Identify Scope/Requirement
  • Review your understanding with stakeholders

Discuss about Design/Wireframe

  • Think like an architect.
  • We should not consider team bandwidth, capacity and time.
  • Discuss about Edge cases.
  • Robustness: Handle SPOF (Single Point of Failure) ex: Monitoring, Logging

Identify Business

  • Is it B2B (business-to-business)?
  • Is it B2C (business-to-consumer)?
  • Is it Internal Product?
  • Is it Customer facing product?

Identify Platform

  • Desktop
  • Mobile
  • Tablet

Identify Users (Know your audience)

  • Conduct surveys
  • Discuss about Location and Devices
  • Internet speed
  • End Users knowledge base (ex: Technical user)
  • Pilot Product (sometimes to understand audience)

Identify Design Approach

  • Responsive vs Adaptive design
  • Desktop first vs Mobile first

Identify APIs

  • Rest APIs / Graph APIs / RPC
  • JSON / Protocol buffers

Role based management

  • Large system needs roles based access and permissions
  • Authentication and Authorization
  • Read/Write/View Permissions
  • Discuss about Routes/Component access

Identify Right Platform (compare frameworks based on the use case)

  • Single Page Applications (Unsuitable for Blogs/News based products)
    • No reloading of a page at navigation
    • No SEO
  • Multi Page Applications
    • Reloading of a page at every page navigation.
  • Progressive Web Applications
  • Server Side Rendering
    • Better SEO
  • Important points to discuss:
    • Are users on mobile?
    • Is SEO needed?
    • Is SPA enough?
    • Is PWA enough? (Service worker, Web Worker)
    • Compare SSR / SSG / CSR
    • Any Pricing model? (optional) - Subscriptions based, Paid APIs
    • Will my app be Frontend heavy? (or backend heavy)
    • Do I have resources for this skill?
    • Is your application Canvas (or SVG) heavy? (Figma, Draw.io) - example
    • Is your application webRTC heavy? (Video streaming) -example

Identify User Flow

  • Discuss vision of a product.
  • Do we need to build from scratch or we can leverage some existing functionalities
  • Discuss about authentication and authorization (Google auth / OAuth)
  • Interact with the Product manager to understand the scope before designing the application.
  • Discuss happy scenarios.
  • Discuss edge cases.
  • Discuss failing scenarios

Identify MVP (Minimum Viable Product)

  • Problem -> Solution -> Build MVP -> MVP to Customers
  • Discuss MVP phase with product manager
  • Discuss roadmaps and divide product in milestones
  • After MVP release there can be a slight change in design/approach to make the product better

Volume of Operations

  • Discuss about the end users of the product
    • Observe the data in something like Google Analytics for split by device/location/OS etc in production later.
  • Identify QPS (Queries per second)
  • Discuss about Load testing/Stress testing
  • Inject analytics in application (ex: Google analytics, Sentry, NewRelic)
    • For cost-effectiveness instead of using ready-made solution, can define our events, using Kafka to stream the events to a backend server and use a Grafana dashboard if required.
  • Analytics data helps us to scale the system

SEO (Search Engine Optimization)

  • Crawling
  • Use of Heading tags
  • Semantic tags - HTML Reference - Example
  • Site Ranking
  • Sitemap
  • Meta Keywords - Example
  • Organic approach vs Inorganic approach
  • Use of alt tags
  • 301 Redirects (bad for SEO)
  • Robots.txt - Example
  • Open graph protocol (https://ogp.me/) for social graph - Example

Component Based Design


State Management


Handling APIs


Optimizing Images

  • Add alt attributes (Images should be descriptive for SEO)
  • Load images based on screen size (img srcset)
  • Image compression (ex: JPEG 2000)
  • Image sitemaps
  • Use SVGs for generic dimensions (in case of stretching of images)
  • Discuss about image Sprites for icons
  • Discuss about progressive images (ex: Medium.com)

Instrumentation

  • Measurement and tracking are key for a stable system
  • Monitoring - code
  • Error logging (for tracing)] - Using Google Analytics
  • Debugging - Custom Tracking
  • Logs/Track all events happened in the application - code
  • Implement Analytics (GA) - this
  • Sentry (to capture errors) - example - code
  • Newrelic (to detect failures) - doc

Versioning of artifacts

  • Artifacts tracking (ex: Confluence)
  • Rollback & backup mechanisms

Performance Optimization Techniques


Internationalization (i18n) / Localization (i10n)

  • Localization
  • Numeric, date and time formats
  • Singular & Plurals
  • Use of currency
  • Keyboard usage - example
  • Symbols, icons and colors
  • Text and graphics vary with different languages and religions, may be subject to misinterpretation or viewed as insensitive
  • Varying legal requirements

Accessibility


Security


Quality assurance and control

  • Stable products are successful

  • Specify standards - Code level / Artifacts level / Asset level

    • Code level - Git
    • Artifacts level - Artifactory
    • Asset level - Git/ Blob storage(S3 etc)/CDN
  • Git Hooks (pre commit hooks, husky)

  • Linters / Static Analyzers

  • Unit testing

  • Workflow testing (User level flows) (Tools - Cypress)

    • Cypress has a demo real world app that uses best practices - code
    • Artsy.net - code
  • Integration testing

    • e2e integration test using Mocha and Pupppeteer - code
  • Automation Suite

    • Using webdriver IO that allows using sauce,browserstack etc - code
  • Cross browsers testing

  • Cross platform testing

    • Cypress demo app - code

Governance

  • Controlling the workflows and protecting the assets
  • UX Design -> Developers -> Product Managers -> UX Designing -> QA
  • Code level governance - like PRs approval (sets standard in your team)
  • Artifacts/Assets level governance (before go live)
  • like Product Manager approval, Stakeholders approvals

Experiment based release cycle

  • Experiment flag, which can help in the release cycle

    Example : In a recent codebase I worked, we had a flag in the frontend codebase that was enabled/disabled based on the response received from API(in turn , API routes in node.js server were handled in 2 ways : 1) the server code read the values based on the server configuration(ENV values) for that particular deployment 2)actual backend that had its configuration as well) affecting the user experience and user journey.


NFR (Non Functional Requirement)

  • Discuss about CI/CD (Docker, Pipeline)
    • Alexander Kachkaev's personal website has a good pipeline setup - see code


Codebases + Guides Worth Mentioning Here

Boilerplate Code

License

This repository is MIT licensed. Read more

system-design-react-code-examples's People

Contributors

madhu-sagar avatar

Stargazers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.