07 - Fundamental Developer Skills
Software Development Methods
Relevant DSS-P Skills
- 3. Technology > 3.1 Software Development > Software Development Process
- 5. Personal Skill > 5.2 Conceptual Skill > Adaptability
Agile Development
- Agile software development - An umbrella term for approaches to developing software that reflect the values and principles agreed upon by The Agile Alliance
- Agile Manifesto - A document that proclaims better ways of developing software by valuing individuals and interactions over processes and tools, working software over comprehensive documentation, customer collaboration over contract negotiation, and responding to change over following a plan
- Software prototyping - The activity of creating prototypes of software applications, i.e., incomplete versions of the software program being developed
- Minimum viable product - A version of a product with just enough features to be usable by early customers who can then provide feedback for future product development
- User story - An informal, natural language description of features of a software system
- Card, Conversation, Confirmation - A practice where the Card is a token representing the requirement, the Conversation is where details are teased out, and the Confirmation is the acceptance test for the story
- INVEST of PBI - A mnemonic created by Bill Wake as a reminder of the characteristics of a good quality Product Backlog Item (PBI)
- Independent: The PBI should be self-contained
- Negotiable: Draft PBIs are not explicit contracts and should leave space for discussion
- Valuable: A PBI must deliver value to the stakeholders
- Estimable: You must always be able to estimate the size of a PBI
- Small: PBIs should not be so big as to become impossible to plan/task/order within a level of accuracy
- Testable: The PBI or its related description must provide the necessary information to make test development possible
- Key Methodologies
- Extreme Programming - A software development methodology which is intended to improve software quality and responsiveness to changing customer requirements
- Scrum - A framework within which people can address complex adaptive problems, while productively and creatively delivering products of the highest possible value
- Acceptance test-driven development - A development methodology based on communication between the business customers, the developers, and the testers
- Three Amigos - A meeting where the product owner, developer, and quality tester come together to establish clarity on the scope of the project
- Behavior driven development - An agile software development process that encourages collaboration among developers, quality assurance testers, and customer representatives in a software project
- Specification by example - A collaborative approach to defining requirements and business-oriented functional tests for software products based on capturing and illustrating requirements using realistic examples instead of abstract statements
- Key Practices
- Refactoring - A disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior
- Software rot - The tendency for software to deteriorate in quality, performance, or usefulness over time
- Technical debt - A concept in software development that reflects the implied cost of additional rework caused by choosing an easy (limited) solution now instead of using a better approach that would take longer
- Technical Debt Ratio - A metric used to measure the cost of fixing the existing technical debt in a codebase compared to the cost of developing the entire codebase from scratch
- Test driven development - A software development process relying on software requirements being converted to test cases before software is fully developed, and tracking all software development by repeatedly testing the software against all test cases
- Refactoring - A disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior
- Tools for ATDD/BDD
- Gauge - A free and open source test automation framework that takes the pain out of writing and maintaining acceptance tests
- Cucumber - A tool that supports Behaviour-Driven Development (BDD) by reading executable specifications written in plain text and validating that the software does what those specifications say
- Gherkin Syntax - A set of grammar rules that makes plain text structured enough for Cucumber to understand
- cucumber-ruby - The Ruby implementation of Cucumber
- RSpec - A testing tool for the Ruby programming language, created for behavior-driven development (BDD)
- Behave - A tool for behavior-driven development (BDD) in Python, using tests written in a natural language style, backed up by Python code
Lean Development
- Lean software development - A translation of lean manufacturing principles and practices to the software development domain
- Continual improvement process - An ongoing effort to improve products, services, or processes
- OODA loop - A four-step approach to decision-making that focuses on filtering available information, putting it in context and quickly making the most appropriate decision while also understanding that changes can be made as more data becomes available
- Lean manufacturing - A production method aimed primarily at reducing times within the production system as well as response times from suppliers and to customers
- The 7 Wastes: The activities that add no value for the customer
- Value-stream mapping - A lean-management method for analyzing the current state and designing a future state for the series of events that take a product or service from the beginning of the specific process until it reaches the customer
- Toyota Production System - An integrated socio-technical system, developed by Toyota, that comprises its management philosophy and practices
- Kanban - A lean method to manage and improve work across human systems
- Kaizen - A philosophy that focuses on continuous, incremental improvement of all functions and involves all employees from the CEO to the assembly line workers
- Autonomation - The practice of designing equipment to partially automate a process and to automatically stop when a problem is detected, allowing operators to fix the issue immediately
- Heijunka - A method for smoothing out production by leveling both the volume and the product mix
- Genchi Genbutsu - A principle that suggests that to truly understand a situation, one needs to go to the "real place" where the work is done, observe the process, and verify the facts for themselves
- Andon (manufacturing) - A visual management system used to indicate the status of a production line
- Muda (Japanese term) - A key concept in lean process management as one of the three types of deviation from optimal allocation of resources, meaning futility, uselessness, or wastefulness
- Theory of Constraints - A management paradigm that views any manageable system as being limited in achieving more of its goals by a very small number of constraints
DevOps & Engineering Productivity
- Concepts
- CALMS framework - A conceptual model for approaching DevOps that stands for Culture, Automation, Lean, Measurement, and Sharing
- Cultural & Organizational Foundations
- Generative organizational culture - A type of culture characterized by a high degree of trust and cooperation, a shared sense of responsibility for the mission, and a focus on learning and continuous improvement
- Technical Practices
- Feature Toggles - A powerful technique, allowing teams to modify system behavior without changing code
- Blue-Green Deployment - A technique that reduces downtime and risk by running two identical production environments called Blue and Green
- Canary Release - A technique to reduce the risk of introducing a new software version in production by slowly rolling out the change to a small subset of users before rolling it out to the entire infrastructure
- Everything as code - A software development practice that seeks to apply the same principles of version control, testing, and deployment to enhance maintainability and scalability of all aspects of the development lifecycle, including networking infrastructure, documentation, and configuration
Release Automation
- semantic-release - A fully automated version management and package publishing tool that determines the next version number, generates release notes, and publishes the package based on formalized commit messages
- Release Please - A tool that automates changelog generation, the creation of GitHub releases, and version bumps for your projects based on Conventional Commits
- GoReleaser - A release automation tool for Go projects
- Changesets - A tool to manage versioning and changelogs with a focus on monorepos
Release Conventions & Standards
- keep a changelog - A file which contains a curated, chronologically ordered list of notable changes for each version of a project
- Conventional Commits - A lightweight convention on top of commit messages that provides an easy set of rules for creating an explicit commit history
- Semantic Versioning - A simple set of rules and requirements that dictate how version numbers are assigned and incremented
- CalVer - A versioning convention based on your project's release calendar, instead of arbitrary numbers
The Open Ecosystem
Relevant DSS-P Skills
- 3. Technology > 3.1 Software Development > Team Development
Open Source
- Open Source Initiative - A non-profit organization dedicated to promoting and protecting open source software and communities
- Major Public Licenses
- MIT - A permissive software license originating at the Massachusetts Institute of Technology (MIT) in the late 1980s
- BSD - A family of permissive free software licenses, imposing minimal restrictions on the use and distribution of covered software
- Apache - A permissive free software license written by the Apache Software Foundation (ASF), allowing users to use, distribute, and modify software without concern for royalties
- GPL - A series of widely used free software licenses, or copyleft licenses, that guarantee end users the freedom to run, study, share, and modify the software
- LGPL - A free-software license published by the Free Software Foundation (FSF) that allows developers and companies to use and integrate a software component released under it into their own (even proprietary) software without being required to release the source code of their own components
- AGPL - A free, copyleft license for software and other kinds of works, specifically designed to ensure that if you run a modified program on a server and let other users communicate with it there, your server must also allow them to download the source code corresponding to the modified version running there
- SSPL - A strong copyleft software license that mandates that any entity offering the licensed software as a service must release the complete source code of the entire service
- Principles & Adages
- Linus's law - The assertion that 'given enough eyeballs, all bugs are shallow', which is a key principle in open source development
- Source Repositories
- GitHub - The AI-powered developer platform to build, scale, and deliver secure software
- GitLab.com - The DevSecOps Platform that empowers organizations to maximize the overall return on software development
- Package Registries
- CTAN - The Comprehensive TEX Archive Network
- CPAN - The Comprehensive Perl Archive Network
- CRAN - The Comprehensive R Archive Network
- PyPI - A repository of software for the Python programming language
- RubyGems.org - The Ruby community's gem hosting service
- npm Registry - The world's largest software registry
- JSR - The open-source package registry for modern JavaScript and TypeScript
- pkg.go.dev - Your source for information about Go packages and modules
- crates.io - The Rust community's crate registry
- LuaRocks - The package manager for Lua modules
- Hackage - The Haskell community's central package archive of open source software
- Stackage - A curated set of packages from Hackage
- NuGet Gallery - The package manager for .NET
- Maven Central - The World's Largest and Oldest Component Repository
- ConanCenter - The central repository where you can find all the open source packages created by the community
- Anaconda Hub - The Hub for Data Science and AI Collaboration
Open Data
- Tools and Licenses
- Creative Commons - A nonprofit organization that helps overcome legal obstacles to the sharing of knowledge and creativity to address the world's pressing challenges
- Open Data Commons - The home of a set of legal tools and licenses to help you publish, provide and use open data
- Open Data Registries
- Hugging Face Hub - A platform with over 900k models, 200k datasets, and 300k demos in which people can easily collaborate in their ML workflows
- Data.gov - The home of the U.S. Government's open data
- Kaggle - The world's largest data science community with powerful tools and resources to help you achieve your data science goals
- Registry of Open Data on AWS - A service that makes it easy for people to find datasets that are publicly available through AWS services
- OpenML - An open, collaborative, frictionless, and automated machine learning environment
- OpenStreetMap - A map of the world, created by people like you and free to use under an open license
- Data Search Engines
- Google Dataset search - A search engine that enables users to find datasets stored across thousands of repositories on the Web
Community & Governance
- Umbrella Open Source Foundations
- Linux Foundation - A non-profit organization that supports, protects, and standardizes Linux by providing a neutral, trusted hub for developers to code, manage, and scale open technology projects
- Apache Software Foundation - A nonprofit corporation to support Apache software projects, including the Apache HTTP Server
- Eclipse Foundation - A provider of a business-friendly environment for open source software collaboration and innovation for a global community of individuals and organizations
- Technology-Specific Foundations
- OpenJS Foundation - The neutral home for more than 40 open source projects, including Appium, Dojo, jQuery, Node.js, and webpack
- Rust Foundation - An independent non-profit organization dedicated to stewarding and growing the Rust programming language and ecosystem
- Python Software Foundation - The charitable organization behind the Python programming language
- PyTorch Foundation - A community-driven hub for open-source AI
- Cloud & AI
- Cloud Native Computing Foundation - An open source software foundation dedicated to making cloud native computing universal and sustainable
- Agentic AI Foundation (AAIF) - A neutral, open foundation to ensure this critical capability evolves transparently, collaboratively, and in ways that advance the adoption of leading open source AI projects
- Web & Data Standards
- World Wide Web Consortium - An international community that develops open standards to ensure the long-term growth of the Web
- WHATWG - A community of people interested in evolving HTML and related technologies
- The Open Group - A global consortium that enables the achievement of business objectives through technology standards
- Ethical & Digital Rights
- Free Software Foundation - A nonprofit with a worldwide mission to promote computer user freedom
- Community Governance & Codes of Conduct
- Debian Constitution - A document that describes the structure of organisation for decision-making in the Debian Project
- Ubuntu Code of Conduct - A set of guidelines that covers behavior as a member of the Ubuntu Community
- Mozilla Community Participation Guidelines - A set of guidelines that outline expectations for participants within the Mozilla community
- Contributor Covenant - A code of conduct for contributors to free/open source software projects, created by Coraline Ada Ehmke
Shell & Terminal
Relevant DSS-P Skills
- 3. Technology > 3.1 Software Development > Computer Science
- 3. Technology > 3.1 Software Development > Team Development
Bash & Other Shells
- Bash - An sh-compatible shell that incorporates useful features from the Korn shell (ksh) and the C shell (csh)
- Line editing - The basic features of the GNU command line editing interface
- History - The history expansion features of Bash
- Shell expansions - The process performed on the command line after it has been split into words
- Pipelines - A sequence of one or more commands separated by one of the control operators ‘|’ or ‘|&’
- Built-in commands - The commands that are executed within the shell process itself, without forking a new process
- Special variables - A list of shell variables that are set or used by the shell
- Built-in job control - The ability to selectively stop (suspend) the execution of processes and continue (resume) their execution at a later time
- Zsh - A shell designed for interactive use, although it is also a powerful scripting language
- fish-shell - A smart and user-friendly command line shell for Linux, macOS, and the rest of the family
- PowerShell - A cross-platform task automation solution made up of a command-line shell, a scripting language, and a configuration management framework
- nushell - A new type of shell
Shell Utilities
- General Shell Utilities
- coreutils = A package of GNU software containing many of the basic tools, such as cat, ls, and rm, needed for Unix-like operating systems
- GNU parallel - A shell tool for executing jobs in parallel using one or more computers
- rlwrap - A readline wrapper
- bash-completion - A collection of programmable completion functions for bash
- direnv - An extension for your shell that can load and unload environment variables depending on the current directory
- zoxide - A smarter cd command
- Atuin - A tool that replaces your existing shell history with a SQLite database, records additional context for your commands, and optionally syncs your shell history between all of your machines
- wttr.in - A console-oriented weather forecast service that delivers weather information through command-line tools like curl, httpie, or wget
- Search Tools
- findutils - The basic directory searching utilities of the GNU operating system
- fzf - A general-purpose command-line fuzzy finder
- fd - A simple, fast and user-friendly alternative to find
- grep - A command-line utility for searching plain-text data sets for lines that match a regular expression
- ripgrep - A line-oriented search tool that recursively searches the current directory for a regex pattern
- silversearcher-ag - A code-searching tool similar to ack, but faster
- Shell Frameworks & Customization
- starship - The minimal, blazing-fast, and infinitely customizable prompt for any shell!
- oh-my-bash - An open source, community-driven framework for managing your BASH configuration
- oh-my-zsh - A delightful, open source, community-driven framework for managing your Zsh configuration
- Zim Framework - The Zsh configuration framework with blazing speed and modular extensions
- Powerlevel10k - A theme for Zsh
- Pure - A pretty, minimal and fast ZSH prompt
- Shell Tutorials
- LinuxCommand.com - A site containing a book and other material designed to help you learn how to use the Linux command line