---
# System prepended metadata

title: Code Modularity and Scalability

---

# Code Modularity and Scalability

- Do not mutate an object or state. Use immutability-helper instead.
- When using any exported SVG (from Figma) inside codebase. Follow the given steps:
    - Convert the SVG into a React component
    - Make the cosmetics (fill, stroke, etc) and dimensional (width and height) attributes configurable. You should use them via props
    - Move those static attribute values to the default props of the SVG component
- Segregate a component's logic, queries, mutations and utils/helpers into separate files
- Create separate functions for any new mutations/queries and define them inside that component's module files
- Always try to provide function parameters as an object. Helps to scale function inputs in future also allows naming the individual elements and specifying a different type for each.
- Destructuring: Destructured function parameters should be kept as simple as possible: a single level of unquoted shorthand properties. Deeper levels of nesting and computed properties may not be used in parameter destructuring. 
    - Example
    ```JSX 
    function optionalDestructuring([a = 4, b = 2] = []) { … };
    
    /**
     * @param {string} ordinary
     * @param {{num: (number|undefined), str: (string|undefined)}=} param1
     *     num: The number of times to do something.
     *     str: A string to do stuff to.
     */
    function destructured(ordinary, {num, str = 'some default'} = {})
    ```
    - Disallowed
    ```JSX
    function badDestructuring([a, b] = [4, 2]) { … };
    
    /** @param {{x: {num: (number|undefined), str: (string|undefined)}}} param1 */
    function nestedTooDeeply({x: {num, str}}) {};
    /** @param {{num: (number|undefined), str: (string|undefined)}=} param1 */
    function nonShorthandProperty({num: a, str: b} = {}) {};
    /** @param {{a: number, b: number}} param1 */
    function computedKey({a, b, [a + b]: c}) {};
    /** @param {{a: number, b: string}=} param1 */
    function nontrivialDefault({a, b} = {a: 2, b: 4}) {};
    ```