Software Development
(WiP)

Web

Backend

Programming Languages

Scripting languages

JavaScript

Node.js
Asynchronous event-driven JavaScript runtime

Express / Koa / Hapi (Server Framework)

npm
Node Package Manager

Tools

Prettier (Formatter)

ESLint (Linter)

Python

Libraries

High Performance Languagues

Go

Rust

Functional Languagues

OCaml

Elixir / Haskell / Scala / Clojure

Java / Kotlin / PHP / C# (.NET) / Ruby / F# / R

Frontend

DevOps

Tools

Source Control

Desktop

Terminal

Scripting

Mobile

iOS

Android

Cross-Platform

Flutter / Xamarin / Ionic / Appcelerator

Libraries

Jest / Mocha - Chai / Lab - Code / Sinon / Cucumber (Testing)

Knex / Objection / Sequelize (Database)

Data

Message Brokers

Caching

Analytics / Search

Relational DB

PostgreSQL

Microsoft SQL Server

Redis

Cassandra

NoSQL

MongoDB

Couchbase / RethinkDB

ZeroMQ

Kafka

RabbitMQ

Concepts

Security
OWASP Top Ten (2021)

API Design

Legend:

  • 📘: Proficient Knowledge
  • 🐙: Usable Knowledge
  • 📗: Learning In Progress
  • 📙: Would like to learn
  • 🔴: Not working on
  • ❔: Mind map in Progress

Environment

SQLAlchemy (Database)

Tools

flake8 (Linter)

Marshmallow (Data formatting)

Alembic (Database migration)

Architecture

API Patterns

Error Handling
Handling a failing request by sending the appropriate status code and error message.
E.g: HTTP 400 { "error": "B01", "message": "The request parameters are invalid" }

Deployment & Services

Container

Concepts

Delivery

CI/CD Pipelines

(self-hosted) Jenkis

TeamCity / GitLab CI / Codeship / DroneCI / Bamboo / Buddy / GoCD / ...

Dockerfile
Configuration file to build a new image

Basics

WORK IN PROGRESS

Document - <!DOCTYPE html>, <html>, <head>, <body>

Basic Elements - <div>, <a>, <p>, <img>, <h1>, <h2>, <table>, etc.

Element Attributes - id, class, style, etc.

Head

  • Meta - <title>, <base>, <meta>
  • CSS - <style>, <link rel="stylesheet">
  • JavaScript - <script>

Basic Syntax - selector { property: value; }

Forms - <form>, <input>, <select>, <textarea>, etc.

Layout - Position, Table, Float, Flexbox, Grid, Bootstrap/Foundation framework

Selectors

  • Basic - element, .class, #id
  • Nested - .class .other-class, .class > .child

Properties

  • Box - display, margin, padding, height/width, border
  • Text - color, font-family, font-size, font-weight, text-align, text-decoration, text-transform
  • Layout - float, position, flex, grid

Programming Languages

JavaScript

Frameworks

Angular

Tools

create-react-app (app bootstrap)

Apollo (GraphQL)

React Router (Navigation)

Concepts

Next.js (Server-Side Rendered Apps) / Gatsby (static content website)

Tools

Jest / Mocha - Chai / Testing Library (Testing)

Prettier (Formatter)

ESLint (Linter)

TypeScript (Type enabled JS superset)

Storybook (Documentation, Playground)

Puppeteer / Playwright / Cypress / Selenium (E2E Testing, comparison)

Redux / MobX (State management)

TypeScript (Type enabled JS superset)

Stateless Components

JSX

Props Flow

Virtual DOM (applying changes to DOM only when needed)

Rx.js, Immutable.js, Ramda (Functional Programming)

CSS

Frameworks

Native - Using flexbox or grid

Bulma / Tailwind / Skeleton

BEM

SMACSS

Atomic

Precompilers

Dart / PureScript / ClojureScript / Haxe / Nim

DOM (Document Object Model)

  • Query Elements - document - getElementById, querySelector
  • Modify Elements - element - innerHTML, innerText, attribute, style
  • Update Elements - document - createElement, remove/append/replaceChild
  • Element Events - element - onclick, onfocus, onload, etc.

Advanced concepts

PWA (Progressive Web App)

  • Providing enhanced capabilities for website to act more like native apps (geolocation, notification, device info, etc.)
  • What can PWA do today?

Storage - Persisting data across navigation and page reload (session, local, cookies, indexDB)

Concepts

User Experience

Accessibility
Designing for a diverse set of users (font size, contrast, dictation software, etc.)

Responsive Design
Designing for a diverse set of devices (laptop, phone, tablet, etc.)

Performance
Offering a smooth user experience within the app (navigation, sync/async interactions, caching, etc.)

Consistency
Maintaining a consistent style guide for the whole app/platform

Internationalization
Allowing an user to navigate the app/platform in the language they feel the most comfortable with

Security

Input validation
Making sure the data sent to the backend has been pre-screened for errors and security concerns

Preventing Cross-Site Scripting
Through unsanitized input, an user can potentially run code on another user's machine

Error handling
Providing meaningful messages to the user and clear recovery steps when something goes wrong on the app or on the Backend

SEO (Search Engine Optimization)

  • A process of improving positions in organic (non-paid) search results in search engines
  • Learn SEO

Service Workers - Running JS in the background without affecting the page's performance

Language Basics

  • Syntax - Conditions, Comparisons, Variables, Operators, Functions
  • Data types - Number, Object, String, Array, Boolean, Date
  • Advanced - JSON, Math, RegExp, Class, Promise/Async-Await

BOM (Browser Object Model)

  • window - screen, location, history, navigator, alert, setTimeout, setInterval etc.

AJAX - Async request to a server (XMLHttpRequest, fetch)

CSS-in-JS

Performance Optimization

  • JS/CSS minifying, image optimization, cashing, request and file compression, http2
  • FEO Guidelines

Testing / Debugging

yapf (Formatter)

Gunicorn (Server runner)

Pipenv (package/env manager, alternative to pip/venv combo)

Makefile (Building automation tool)

pip (Package Installer) / venv (Virtual Environment)

Pino / Winston / Bunyan (Logging)

Flask / Django (Web Framework)

Frontend can be defined as content and interactions rendered on an Internet Browser based environment.
It ranges from a static web page containing the basics HTML, CSS, JavaScript (early websites), to a server generated content website (blog, news), to a fully featured application containing complex logic and interactions (Netflix, Youtube).

Authentication
Allowing access to resources via valid API keys, OAuth, or JWT (JSON Web Tokens)

SQLite

Backend can be viewed as software running on a server.
It is often associated with the term API, which provide various clients (websites, native apps, automation tools) with a way to interact with assets (data, files) in a secure and logical way.

Developer Tools

IDE

Git

Scalability / Performance

Multi-Threading / Clustering
Optimizing the use of cpus through native multi-threading (C++) or a clustering tool (Node cluster, Python Gunicorn) [Vertical Scaling]

Load Balancing
Using a dedicated tool (Nginx, Kubernetes) to distribute network requests to a series of identical nodes based on the current load capacity of those nodes [Horizontal Scaling]

Database Query Optimization
Identifying long processing or frequently used database queries and implementing solutions such as using database views, read-only clones, improving the query or the database schema

Caching
Saving frequently used assets (data, images) into a fast-access dataset (Redis) to avoid unnecessary calls to Database

Asynchronous processing
Identifying long processing code flow and separating it into another process (worker) that communicates with the main process using message broker (RabbitMQ, Python Celery)

Swift

Uniform interface
Uniquely identify each resource involved in the interaction between the client and the server.
E.g HTTP-method + route: POST /my/route

Layered System
Layers of an API can point to different resources in the system while presenting a unique interface
E.g: /api/topic1 -> server 1; /api/topic2 -> server 2

SOAP

Cron
Having dedicated server(s) running periodic jobs with the goal of maintaining/cleaning/helping a part of the system

Platforms

GitLab / Bitbucket
Offer similar features as GitHub

Mercucial / SVN

GitHub

Teams
Organize individual contributors for different access level (e.g admins, developers, testers, etc.)

Repositories

Issues
Notes for improvement suggestion, feature request or general support & discussion

Pull-Requests (PR)
Review code changes before merging them to a another branch

Access-Management
Control Read/Write/Admin access for teams and individual collaborators

Event Hooks
Send notification to a third party systems to monitor or assist GitHub processes (PRs, issues, deployments, etc.)

Branch Protection
Define a set of rules to protect the branches from unwanted or potential hazardous actions (force push, delete, direct push, etc.)

Organizations

Projects
Organize and track issues and PRs in a Kanban/Scrum board

Concepts

Branching
Organize code by features or environments (e.g master, dev, feature/xyz, hotfix/xyz, release/123)

Audit trail
Track what was changed and who made the change at any point in the history of the repository

Team collaboration
Allow for multiple individuals to work on the same project at the same time and allowing for 'easy' merging of various contributions

Branches, Commits, Tags

Merging
Allow for contributions (made in a branch) to be merged into the main system (via a main branch eg. master). Usually requires code conflicts resolution.

Repository
A container for a codebase and its history, branches, commits, etc.

Fork
Duplicating a repo in order to make a contribution back to the main repo or to create a new system based on that initial repo

Concepts

Clone
Pull an entire repo from a remote origin into a local folder

Tagging
Marking a specific commit as a significant point of the history of a repo (e.g versioning: v1.0, v.2.3.4, etc.)

Commits
A single contribution made to a branch that can contain any number of code changes. A series of commits makes up the history of a repo

Push & Pull
Push/apply changes to a remote origin (may require to pull latest changes beforehand)
Pull latest changes from a remote origin (may require conflict resolution)

Hooks
Allow for a process to run upon a git lifecycle event (e.g running a linter before committing a code change)

Repo, Branch, Commit, Tag, Merge

Releases
Using a git tag to describe a release. Usually includes changes description and release notes

SourceControl GUI

(Native Platform) XCode / Android Studio

Internet Browsers

Chrome / Firefox / Safari

Edge / Opera / Internet Explorer / etc.

Debug / Test

Postman

Chrome DevTools

CLI

Package Manager

Terminal

Language Manager

Container

(Mac) Homebrew

iTerm + zsh

pyenv / nodenv

(Docker) docker / docker-compose

(Linux) apt-get / apk / yum

(Windows) winget

Mac Terminal / Terminator + Sh / Bash / Fish

swift / openjdk / go / opam

(Kubernetes) k3d + k9s + kubectl + helm

Automation

(Request) curl

(Parser) jq / yq

Data

psql

vault

ElasticSearch

Responsibilities

Programming Languages

Swift

Objective-C

Tools

Frameworks

Views / Controls

Concepts

Auto-Layout

CoreData

Architecture

Flow Controllers

3rd Party

Storyboards

Alamofire (Network, alternative to Foundation's URLSession)

View / View Hierarchy

Collection / Table / Stack / Scroll / Image / Text / Label / Web

Button / TextField / Progress Indicator / Pickers / Switchers / Sliders / Page Control / Segmented Control

TestFlight

ViewControllers

Manage Product Page

Manage Releases & Updates

Manage In-App Purchases

Insights & Analytics

Role Access Management

Manage Internal Testers and test builds

Manage External Testers and beta builds

NavigationControllers

Code Editor

Interface Builder

Runner / Debugger

Managing Project Properties

Manage Project workspace & dependencies via cli & Podfile

Install packages from the community & link them to the project

Create packages and distribute them to the community

Realm (Database, alternative to CoreData)

Presenting an Interactive View (Presenter / View Controller)
The goal of a native app is to present an information to an user, via a dedicated container/view, and allow that user to interact with that view in order to perform a specific action.
A view can be anything as simple as a text-box or an input (Button, Text Input), a view containing other views or a complex interactive component such as a map.

Collecting User Inputs
The app should be able to present an interactive view and react to the user inputs on that view.
For example, when presenting a button, the app should known that the button was tapped and perform an action based on the purpose of that button.
On a more complex component like a map, the app should be able to react to all the different inputs from the user (zoom, move around, tap on a spot, recenter on current position, etc.)

Synchronising with the Backend (Network Controller)
On user input, an app can be asked to perform an action that impacts the remote data connected to that app (e.g get a list of article, create a new article).
On such action, the app should be able to make a request to a remote database (via a Backend) and collect the data from a successful call, or the error from a failed call.

Storing Data Locally (Model)
Upon a successful Backend request or during an user input, the app may need to store some information for a later use.
This is usually done via the use of a local database (e.g SQLIte) and used in code via a Model type object

Coordinating the Presented Data (Coordinator / Interactor)
When presenting information to the user via a view, the app may need to collect, curate and/or transform the data before it it presented.
This usually involves gathering data from the local storage, the Backend or a mix of both and curating/transforming that data based on the view's needs.

Coordinating the Flow of Views (Router / Flow Controller)
Defining the interactions between different views to create a user journey.
To achieve this in iOS for example, one could use a Storyboard or a custom NavigationController
E.g (Sign in flow): Welcome View > Sign Up View > Onboarding View > App Main View

Concepts

Fastlane (Deployment CLI)

Updating the View based on changes (State)
After presenting the view, the app should be able to update that view or parts of it based on external changes.
For example: User sees a list of articles > User taps Refresh button > Request to Backend > Request is successful

  • In this example, the initial state is a list of articles, as well as a 'none' loading status
  • When the request starts, the loading status changes to 'loading', so the view updates to display a loading indicator
  • When the request succeeds, the loading status would change to 'none', the loading indicator is hidden, and the list of articles is replaced by the list received by the Backend

Error Recovery

Push Notification

In iOS there exist many types Architecture, but they all try to do the same thing, to give you a way to organise the app Responsibilities (see Native > Responsibilities) in a way that makes sense for a given project.
They all have pros & cons, the most important thing is that once one of them is chosen, use the principles consistently throughout the project.

Analytics

Model
Data as an object. Contains the business logic related to that entity

View
Container for the information presented to the user (e.g UILabel, UIView)

Controller
Handles everything else listed in the Responsibilities (e.g UIViewController, UINavigationController)

Model
(same as for MVC)

View
Manages the views and the user inputs (e.g UIViewController)

View-Model
Object attached to a View, which has the responsibilities of coordinating the data to be presented to the view.
Optionally it can also coordinate requests to the Backend for that view

Flow Controllers
Dedicated object that coordinates interactions between Views that belong to the same flow
E.g, SignInFlow: Welcome View > Sign Up View > Onboading View

MVC / MVVM
Each View can choose to implement the MVC or MVVM patterns based on the complexity of that View

Network Requests

Appearances

JavaScriptCore

swift-format / SwiftFormat (Formatter)

Micro-Services
Identifying large and/or complex parts of the application that could be extracted into another server, a series of micro-servers, or individual lambda functions in order to scale and maintain independently

R.swift / SwiftGen (Code Generator)

KingFisher / Nuke (Image caching/processing)

ReactiveCocoa / RxSwift (Reactive Programming)

Queue / Operations

Primitive Types (String, Array, Dictionary, etc.)

File System

User Defaults

CryptoKit / ARKit / CloudKit / HealthKit / HomeKit

GCD (Concurrency Dispatch)

XCTest

Core ML / Core Audio / Core Graphics / Core Image / Core Location / Core Media / Core Motion / Core Video

File Structure

Micro-Services

SPA

Component-Based Architecture

State

Sync with Backend

Router

Reliability

Continuous Integration (CI)

Linking automated actions to a code repository's commits/merges

Performing tests and code quality (linter, static analyser) controls in a sandbox environment

Making sure the code passes a series of test before being merged to a repository's main branch

Continuous Delivery (CD)

Using CI jobs to make sure the code is deployment ready

Building/Packaging the code into a library (npm, pip) or image (docker)

Publishing the package/image into a remote repository (npm, pypi, docker hub)

Deploying the code/image into a dev/staging/production environment

Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications

Cloud Platforms

Small-Medium

Medium-Big

Specialised Services

Shopify (e-commerce)

Firebase (realtime db & analytics)

Tools

helm (cli & charts to package a kubernetes app)

Dokku (self-hosted mini-Heroku)

PubNub (realtime communication & notifications)

docker-compose
CLI & config file to run all the services for a given app (backend, worker, frontend) alongside all its dependencies (postgres, redis, etc.)

Docker CLI
Perform docker actions from the terminal
E.g: docker pull/ push / build / run

Containers offer a logical packaging mechanism in which applications can be abstracted from the environment in which they actually run

minikube / k3d + k9s (local setup)

kubectl (kubernetes cli)

Service discovery (ingress) and load balancing

Automated rollouts and rollbacks (update deployments, kubectl rollout)

Automatic bin packing (make the best use out of available resources)

Self-healing - restarts/replace/kill containers that fail (Deployment + ReplicaSet)

Secret and configuration management (Secrets, ConfigMaps)

Storage orchestration (Volumes, PV, PVC)

Desktop Apps

Testing

Pen-Tests
Running a series of specific tests designed to find security vulnerabilities in a deployed system. Ideally run before any release that adds a new public ressource (e.g API route)

End-2-End
Running a series of tests over the entire system to make sure that user flows are working properly.
Ideally those are run before a release, as well as periodically (CI job) on a deployed environment (dev, stg, qa)

Unit / Integration
Running a series of tests over the whole codebase, before code merge and releases, to control code quality and prevent bugs.
Usually ran as part of the CI flow

Testing Environments
Setting up environments where tests can be performed without affecting Production data & availability

  • Development: Dev team internal testing
  • Staging: Production clone with anonymized data
  • QA: Optional extra env for a dedicated QA team to perform tests

...

Command Line
E.g: $ rm -f foo.txt
Structure: [prompt] [command] [option] [argument]

File System

(file/folder listing) ls / tree / find

(file display) cat / head / tail / less / more

(physical location) pwd / cd

(folder manipulation) mkdir / rmdir / rm -R

(file manipulation) cp / mv / touch / rm

(result manipulation) grep / sort / uniq / sed

Profile (.bashrc, .zshrc)

(file editor) vi(m) / nano / emacs

alias

PATH

Custom Functions

(list env variables) env

(create new variable) export A_VAR=123

(use variable in command) echo $A_VAR

Important Variables

(create variable only for one command line) DEBUG=1 a_cmd

(env variable that defines where the commands are found) PATH

(where the home directory is located) HOME

(where the current terminal is located) PWD

(current user) USER

(running a command as the root/admin user) sudo

(process manipulation) ps / top / kill

(file permissions) ls -l / chmod / chown

  • Terminal > Other Concepts
  • Scripting
  • Desktop app

(manual/documentation of local commands) man

Laying out the main aspects of Software Development, their important concepts, tools and useful links.
It is meant as a list of organised indexes towards different parts of the Software Development knowledge.
It represents the things I know and where I would like to improve

(stdin) Collecting user input

(stdout) Commands log

(stderr) Commands error log

(Wildcards / Tilde / Dot / Redirection / Pipe)

Java Swing

Unit / UI Testing

Container orchestration (Pod, StatefulSet, Jobs, CronJobs)

Role Based Access Control (Role, RoleBinding)

Injection
Untrusted data is sent to an interpreter as part of a command or query, leading to the execution of unintended commands or unauthorized access
Remediation: Parameterized queries or prepared statements, input validation, and proper encoding

Identification and Authentication Failures
Unauthorized individuals are allowed to compromise user accounts, passwords, or session tokens

Cryptographic Failures

Broken Access Control

Security Misconfiguration

Vulnerable and Outdated Components

Stateless
Each request contains all the necessary information to process the request.
The data layer (db, cache) is separated from the logic layer.

Reliability

Monitoring

Error Logging
Using the Common Logging system to print out detailed messages about an error that occurred in the system to allow for debug or diagnostic of a potential issue.

Common Logging
Following an app lifecycle by printing messages that give out essential information on what happened, when, who was involved.
Preferably JSON based (e.g pino) & levelled (info warn, error)

Performance/Resource Tracking
Proving metrics to an external tool (e.g NewRelic) to learn about a system's capabilities & performance

Fault tolerance
Prevent interruption of service by implementing server restarting mechanisms (e.g load balancing, replica set, clustering)

Error Handling
Forwarding errors upward to the system level to ensure logging complete error data and preventing server from crashing

Database Design

Telemetry / Tracing
Following a request data (logs, metrics, traces) throughout multiple connected services (e.g api - third party - database)

Client-Server
Separation between the client (webpage, app) and the server. So they can be replaced and developed independently, as long as the interface between them is compatible

Cacheable
A client can reuse the data based on the request cache labels set by the server

Authorization
Allowing access to ressources via rules based on user roles, permissions, or scopes

Versioning & Documentation
Providing a thorough document describing the API versioning mechanism, resources (routes), expected input & output and potential errors codes & meaning

Rate Limiting & Throttling
Ensure fair usage and prevent abuse of API ressources by controlling the number of requests allowed within a specific timeframe

Data Modeling
Defining the structure, relationships, and constraints of the data entities within the system

Database Management System (DBMS)
Selecting the appropriate database technology for the system requirements
E.g: Relational (PostgreSQL, MySQL), NoSQL (MongoDB, Cassandra)

Optimizations

Normalization
Decomposing a table into multiple smaller tables and defining relationships between them, to minimize data duplication and improve data integrity
Happens in steps known ad Normal Forms: 1NF, 2NF, 3NF, BCNF, 4NF, 5NF

Indexing
Improve the performance of database queries by creating data structures (indexes) that allow for quick data retrieval.
It involves choosing the appropriate columns to index, adjust them over time and potentially reindexing periodically to continuously improve performances

Query Optimizations
Understanding query execution plans, analyzing query performance, and employing techniques such as indexing, query rewriting, caching, and denormalization to enhance query efficiency

Database Security
Implementing authentication/authorization mechanisms, encrypting data at rest/in-transit and following security best practices to prevent unauthorized data access

Migration & Versioning
Managing changes to the database structure over time, while data consistency and minimal downtime

Data Governance and Compliance
Adhering to data governance principles and complying with legal and regulatory requirements (e.g GDPR, HIPAA)

Data Backup and Recovery
Ensuring data durability and availability by implementing regular data backup and designing disaster recovery plans

Transactions and Concurrency Control
Ensuring integrity and consistency of data by grouping multiple database operations into a single logical unit, managing isolation levels and concurrency

MySQL

Serverless

Monolith

The entire system is built as a single, self-contained application

Pros: Simplicity, easy development and testing and direct access to all components

Cons: Lack of scalability, difficulty in maintaining and deploying updates, potential for a single point of failure

Recommendation: Ideal use for MVPs and small projects, as the system expends, other types of Architecture should be considered

Decomposes the system into smaller, loosely coupled services that communicate with each other via APIs calls

Pros: Scalability, independent development and deployment of services, fault isolation, and technology flexibility for each service

Cons: Increased complexity due to distributed nature, additional overhead in managing inter-service communication, potential performance issues with remote calls

Recommendation: Ideal use for medium to big systems. Drawbacks need to be addressed as the system scales. Using a combination of micro, serverless and event-driven architecture is a good way to address various scale issues

Focus on writing code without managing infrastructure. Backend logic is implemented as functions (e.g AWS Lambda) that are triggered by events

Pros: Scalability and elasticity, reduced operational overhead, pay-per-use pricing model, rapid development and deployment

Cons: Limited control over infrastructure, potential vendor lock-in, performance impacts due to cold starts (initial function invocation latency)

Recommendation: Ideal for a team with little DevOps experience or for running specific async jobs that don't need to live in the main Backend system

Event-Driven

Handles processes based on events and asynchronous messaging. Events trigger actions and allow communication between components

Pros: Loose coupling, scalability, responsiveness to real-time events, flexibility in adding or modifying components

Cons: Complexity in managing event flows, potential issues with event ordering and consistency, debugging and testing challenges

Recommendation: Can be used to aid micro-services to scale and handle async tasks. The complexity of the even flows need to often be monitored and reviewed

Event Sourcing and CQRS

File Structures

Monolithic
All the code and resources of the system reside within a single project or directory. Often used in simpler applications or early MVPs

Layered
Separates the code and ressources by layer following architecture pattern:
Presentation layer - Business logic layer - Data layer
Similar to, but not exactly same as, MVC (Model View Controller) structure

Component Based
Each component/module has its own directory, containing all the necessary code and resources related to that component

Feature Based
Each feature has its own directory, containing all the related code and resources

Modular (packages)
Packages represent logical divisions of code within the system, often aligned with features or functional grouping. They can be worked on and tested individually, as well as reused throughout the project (e.g CLI, API, tests)

These file structures can be used together and complement each other, as long as consistency and understandability is maintained throughout the project

Event sourcing captures and stores all changes to the application state as a sequence of events. CQRS separates the read and write models for improved scalability and flexibility

Pros: Auditability, traceability, scalability, real-time analytics, ability to rebuild state from events

Cons: Increased complexity, additional infrastructure requirements, potential challenges in maintaining consistency across read and write models

OAuth 2
A standard designed to allow an application to access resources hosted by other web apps on behalf of a user, so they don't need to share their credentials. OAuth 2 uses an Access Token to access resources on behalf of the end-user

OIDC
An identity protocol that utilizes the authorization and authentication mechanisms of OAuth 2.0. It is often used to identify users and provide SSO capabilities

SAML
An open standard created to provide cross-domain single sign-on (SSO). It allows a user to authenticate in a system and gain access to another system by providing proof of their authentication

gRPC

AI Assistant

Code Organization

Monolith

Multi-Repos

Monorepo

Managed Multi-Repos (gita, mani)

Insecure Design

Software and Data Integrity Failures

Security Logging and Monitoring Failures

Server-Side Request Forgery

Cross Browser/Platform Compatibility
Ensuring compatibility across different browsers (e.g. Chrome, Firefox, Safari) and platforms (e.g., Windows, macOS, mobile devices)

Automated Testing
Writing testable components. Performing unit, integration tests on the codebase. Performing end-2-end tests on the system

Styled Components

EC2 / ECS / EKS (Deployment)

S3 (Storage)

CloudFront (CDN)

SQS (Queue)

SNS (Notifications)

Lambda (Serverless functions)

RDS / Aurora / DynamoDB (Database)

IaC
Infrastructure as Code

Terraform

Ansible

Chef / Puppet / Cloud specific (e.g AWS CloudFormation)

Release/Rollback Strategies

onDelete / Recreate
Remove old version then deploy new one

rollingUpdate / Ramped
Gradually deploy new replicas while removing the old ones

Blue/green
Deploy new version together with old one, then switch when ready

Canary
New version for some users then full rollout when ready

Client Side Authentication
Taking the user through an authentication flow before showing the app's data. Interacting with APIs via authentication tokens (e.g JWT)

HTTPS
Serving the website over HTTPS to protect user's data and prove that the website is trustworthy

Efficient Rendering

Resource loading Optimization

VPC / KMS / Cognito

IAM (Identity fo AWS)

Security

HTTPS

Network Config

Configuration & Dependencies Management

DDOS Protection (CloudFlare)

Dependencies tracking & upgrade

Service configuration tracking and update

Dependency vulnerability tracking

SwiftUI

SLOs
(Service Level Objectives)

Monitoring

Chaos Engineer

(Flientd, Splunk, etc.) Logging

(NewRelic, Dynatrace) App Performance

System perfomance

Error Budgets

Incident Management & Postmortems

DevOps LifeCycle

Plan

Code

Build

Test

Release

Deploy

Operate

Monitor