-
-
Save ZapDos7/9bb45b1ac293844f87aba5ba4707228a to your computer and use it in GitHub Desktop.
1. Codebase
One codebase tracked in revision control, many deploys
If there are multiple codebases, it’s not an app – it’s a distributed system. Each component in a distributed system is an app, and each can individually comply with twelve-factor.
There is only one codebase per app, but there will be many deploys of the app. A deploy is a running instance of the app.
2. Dependencies
Explicitly declare and isolate dependencies
A twelve-factor app never relies on implicit existence of system-wide packages. It declares all dependencies, completely and exactly, via a dependency declaration manifest. Furthermore, it uses a dependency isolation tool during execution to ensure that no implicit dependencies “leak in” from the surrounding system. The full and explicit dependency specification is applied uniformly to both production and development.
3. Config
Store config in the environment
Apps sometimes store config as constants in the code. This is a violation of twelve-factor, which requires strict separation of config from code. Config varies substantially across deploys, code does not.
Treat backing services as attached resources
A backing service is any service the app consumes over the network as part of its normal operation. Examples include datastores, messaging/queueing systems, SMTP services for outbound email, and caching systems.
The code for a twelve-factor app makes no distinction between local and third party services.
Strictly separate build and run stages
The twelve-factor app uses strict separation between the build (converts a code repo into an executable bundle), release (takes the build produced by the build stage and combines it with the deploy’s current config), and run (The run stage (also known as “runtime”) runs the app in the execution environment, by launching some set of the app’s processes against a selected release) stages.
6. Processes
Execute the app as one or more stateless processes
The app is executed in the execution environment as one or more processes.
7. Port binding
Export services via port binding
The twelve-factor app is completely self-contained and does not rely on runtime injection of a webserver into the execution environment to create a web-facing service. The web app exports HTTP as a service by binding to a port, and listening to requests coming in on that port.
8. Concurrency
Scale out via the process model
In the twelve-factor app, processes are a first class citizen. Processes in the twelve-factor app take strong cues from the unix process model for running service daemons. Using this model, the developer can architect their app to handle diverse workloads by assigning each type of work to a process type. For example, HTTP requests may be handled by a web process, and long-running background tasks handled by a worker process.
Maximize robustness with fast startup and graceful shutdown
The twelve-factor app’s processes are disposable, meaning they can be started or stopped at a moment’s notice. This facilitates fast elastic scaling, rapid deployment of code or config changes, and robustness of production deploys.
10. Dev/prod parity
Keep development, staging, and production as similar as possible
The twelve-factor app is designed for continuous deployment by keeping the gap between development and production small.
11. Logs
Treat logs as event streams
A twelve-factor app never concerns itself with routing or storage of its output stream. It should not attempt to write to or manage logfiles. Instead, each running process writes its event stream, unbuffered, to stdout. During local development, the developer will view this stream in the foreground of their terminal to observe the app’s behavior.
12. Admin processes
Run admin/management tasks as one-off processes
The process formation is the array of processes that are used to do the app’s regular business (such as handling web requests) as it runs. Separately, developers will often wish to do one-off administrative or maintenance tasks for the app. One-off admin processes should be run in an identical environment as the regular long-running processes of the app. They run against a release, using the same codebase and config as any process run against that release. Admin code must ship with application code to avoid synchronization issues.
Clean code is a term used to describe computer code that is easy to read, understand, and maintain. Clean code is free from complexity, redundancy, and other code smells and anti-patterns that can make it difficult to maintain, debug, and modify. Good documentation, consistent formatting, and a well-organized codebase are all indicators of clean code.
- When adding new features, prioritise: Effectiveness, Efficiency and Simplicity
- Using consistent formatting and syntax throughout a codebase is an important aspect of writing clean code.
- Clearly and descriptively name variables and functions.
- Strike a balance between conciseness and clarity; while it's important to keep code concise to improve its readability and maintainability, it's equally important to ensure that the code is clear and easy to understand
- Code reusability
- Have a clear flow of execution
- Single Responsibility Principle (SRP): each class or module should have only one reason to change, or in other words, each entity in our codebase should have a single responsibility.
- Having a "single source of truth": there is only one place where a particular piece of data or configuration is stored in the codebase, and any other references to it in the code refer back to that one source.
- Only Expose and Consume Data You Need
- Modularization: breaking down large, complex code into smaller, more manageable modules or functions, which makes the code easier to understand, test, and maintain.
- Choosing a good folder structure
- Write proper documentation
It's a good practice to create a test case that replicates the issue and then fix it: that way, it is proven the fix is working & the code is protected from future mishaps.
- ScanLibs
- Another Repo 🇬🇷
- ACM Library
- HEAL Link 🇬🇷
- Awesome Exploit Dev
- Goal Kicker
- Online Math Books
- Get Free e-books
- e-boooks for Greeks 🇬🇷
- Free e-books 🇬🇷
- Gutenberg 🇬🇷
- Archigramma Publ. 🇬🇷
- Voreiodytikes Publ. 🇬🇷
- Library of Livadia 🇬🇷
- 24 Grammata 🇬🇷
- Openbook 🇬🇷
- Stanford's AI notes
- Microsoft Learn
- Google's "Cloud Skill Boost"
- Google's "Grow" Courses and Tools
- Google's Skillshop by ExceedLMS
- Coursera
- Codeacademy
- Wes Bos' Courses - for FE technologies like CSS FlexBox, CSS Grid etc
- Harvard Business School
- Harvard X
- Sumo Logic
- The Linux Foundation
- API Academy
- IBM
- MongoDB Learning Catalog
- CodinGame
- Spoj
- CodeChef
- CodeWars
- CoderByte
- Break The Code
- Project Euler
- Usaco Training
- LeetCode
- HackerRank
- Top Coder
- Exercism
- Edabit
- Hacker Earth
- ThoughtCo
- Pluralsight - in collab with Stack Overflow
- Command not found - online
man
equivalent for commands - SDKMan - manage multiple Java installations easily
- Older JDKs
- Epoch converter
- JSON Formatter
- JWT Token Validator
- Cron expression assistant
- Coffee Calculator
- Ventoy - open source tool to create bootable USB drive for ISO/WIM/IMG/VHD(x)/EFI files
- WPS - Open Office Suite
- GitBook - plan, centralize and share knowledge within a dev team
- CodyHouse - FE Components
- Gemini
- ChatGPT
- "Conversation" Tool with Figures of the Past
- Image Generation from text
- Image Generation
- Avatar Generation
- Logo Generation
- AI Text to Tattoo Tool
- Image Enhancing
- Text to Voice
- AI Music Generation
- AI Video Generation - Sora
- AI Video Generation - Runway
- AI Animation
- AI Presentation Generation
- AI Search
- AI Translation
- AI Summarization Tool
- AI Website Making Tool
- Tool directories
- International Software Testing Qualifications Board
- Java Guide
- Capybara
- Sample Test Cases
- Greek Software Testing Board
- Ministry of Testing - Athens
- Test Automation University
- Have I been pwned? - recommend to subscribe to pawn lists with your emails to be notified of future breaches
- Password Strength Test
- 1Password - Password Manager
- BitWarden - Open Source Password Manager
- ProtonVPN - Secure & Free VPN
- Screen to Gif
- Sejda - PDF manipulation
- Lunapic - photo editor
- Remove a picture's background
- Remove video background
- Remove an object from a photo
- Add colour to old photos
- Noun Project - free icons & stock photos