Software Development Methodologies
bogotobogo.com site search:
Agile
Iterative and incremental development.
Agile Manifesto
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
Source: Dilbert
Scrum
Scrum is an iterative, incremental methodology for project management often seen in agile software development.
The name scrum came from rugby, where the whole team "tries to go the distance as a unit, passing the ball back and forth." Likewise, in scrum, the development phases strongly overlap and the whole process is performed by one cross-functional team across the different phases.
A key principle of Scrum is its recognition that during a project, there can be requirements churn, and that unpredicted challenges cannot be easily addressed in a traditional predictive or planned manner. As such, Scrum adopts an empirical approach accepting that the problem cannot be fully understood or defined, focusing instead on maximizing the team's ability to deliver quickly and respond to emerging requirements.
Terminology
- Product Backlog
Wish list for the features of final product.
- Release Backlog
Priotirized list of Backlog.
- Spint Backlog
Short duration (3-30dyas) milestones for ship-ready release.
- Burndown Chart
This shows remaining work in the sprint backlog.
Extreme Programming (XP)
Extreme Programming (XP) is intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development, it advocates timeboxing, which is intended to improve productivity and introduce checkpoints where new customer requirements can be adopted.
Other elements of extreme programming include: programming in pairs or doing extensive code review, unit testing of all code, avoiding programming of features until they are actually needed, a flat management structure, simplicity and clarity in code, expecting changes in the customer's requirements as time passes and the problem is better understood, and frequent communication with the customer and among programmers.
Lean
Think big, act small, fail fast; learn rapidly."
Basic principles of lean are:
- Eliminate waste - Everything not adding value to the customer is considered to be waste
- Amplify learning - The learning process is sped up by usage of short iteration cycles each one coupled with refactoring and integration testing.
- Decide as late as possible- delaying decisions as much as possible until they can be made based on facts and not on uncertain assumptions and predictions.
- Deliver as fast as possible - The sooner the end product is delivered without considerable defect, the sooner feedback can be received, and incorporated into the next iteration.
- Empower the team
- Build integrity in - refactoring
Test-driven development (TDD)
Test-driven development (TDD) relies on the repetition of a very short development cycle. It's a technique for designing a code. In TDD, each new feature begins with writing a test not the production code. By writing the test code first, we're focusing on the behavior of a unit or its interface.
If we deliver a project using TDD, the code tends to be more cleaner and less complicated. This is because as I'm writing the test, I'm ensuring the code testable. Testable code is clean and simple so that we can isolate it and test it easily.
Water Fall
The waterfall model maintains that one should move to a phase only when its preceding phase is completed and perfected.
Software Development
- Software Development Methodology
DevOps
Phases of Continuous Integration
Software development methodology
Introduction to DevOps
Samples of Continuous Integration (CI) / Continuous Delivery (CD) - Use cases
Artifact repository and repository management
Linux - General, shell programming, processes & signals ...
RabbitMQ...
MariaDB
New Relic APM with NodeJS : simple agent setup on AWS instance
Nagios on CentOS 7 with Nagios Remote Plugin Executor (NRPE)
Nagios - The industry standard in IT infrastructure monitoring on Ubuntu
Zabbix 3 install on Ubuntu 14.04 & adding hosts / items / graphs
Datadog - Monitoring with PagerDuty/HipChat and APM
Install and Configure Mesos Cluster
Cassandra on a Single-Node Cluster
OpenStack install on Ubuntu 16.04 server - DevStack
AWS EC2 Container Service (ECS) & EC2 Container Registry (ECR) | Docker Registry
CI/CD with CircleCI - Heroku deploy
Introduction to Terraform with AWS elb & nginx
Kubernetes I - Running Kubernetes Locally via Minikube
Kubernetes II - kops on AWS
Kubernetes III - kubeadm on AWS
CI/CD Github actions
CI/CD Gitlab
DevOps / Sys Admin Q & A
(1A) - Linux Commands
(1B) - Linux Commands
(2) - Networks
(2B) - Networks
(3) - Linux Systems
(4) - Scripting (Ruby/Shell)
(5) - Configuration Management
(6) - AWS VPC setup (public/private subnets with NAT)
(6B) - AWS VPC Peering
(7) - Web server
(8) - Database
(9) - Linux System / Application Monitoring, Performance Tuning, Profiling Methods & Tools
(10) - Trouble Shooting: Load, Throughput, Response time and Leaks
(11) - SSH key pairs & SSL Certificate
(12) - Why is the database slow?
(13) - Is my web site down?
(14) - Is my server down?
(15) - Why is the server sluggish?
(16A) - Serving multiple domains using Virtual Hosts - Apache
(16B) - Serving multiple domains using server block - Nginx
(16C) - Reverse proxy servers and load balancers - Nginx
(17) - Linux startup process
(19) - phpMyAdmin with Nginx virtual host as a subdomain
(19) - How to SSH login without password?
(20) - Log Rotation
(21) - Monitoring Metrics
(22) - lsof
(23) - Wireshark introduction
(24) - User account management
(25) - Domain Name System (DNS)
(26) - NGINX SSL/TLS, Caching, and Session
(27) - Troubleshooting 5xx server errors
(28) - Linux Systemd: journalctl
(29) - Linux Systemd: FirewallD
(30) - Linux: SELinux
(31) - Linux: Samba
(0) - Linux Sys Admin's Day to Day tasks
Ph.D. / Golden Gate Ave, San Francisco / Seoul National Univ / Carnegie Mellon / UC Berkeley / DevOps / Deep Learning / Visualization
Puppet
Puppet with Amazon AWS I - Puppet accounts
Puppet with Amazon AWS II (ssh & puppetmaster/puppet install)
Puppet with Amazon AWS III - Puppet running Hello World
Puppet Code Basics - Terminology
Puppet with Amazon AWS on CentOS 7 (I) - Master setup on EC2
Puppet with Amazon AWS on CentOS 7 (II) - Configuring a Puppet Master Server with Passenger and Apache
Puppet master /agent ubuntu 14.04 install on EC2 nodes
Puppet master post install tasks - master's names and certificates setup,
Puppet agent post install tasks - configure agent, hostnames, and sign request
EC2 Puppet master/agent basic tasks - main manifest with a file resource/module and immediate execution on an agent node
Setting up puppet master and agent with simple scripts on EC2 / remote install from desktop
EC2 Puppet - Install lamp with a manifest ('puppet apply')
EC2 Puppet - Install lamp with a module
Puppet variable scope
Puppet packages, services, and files
Puppet packages, services, and files II with nginx
Puppet templates
Puppet creating and managing user accounts with SSH access
Puppet Locking user accounts & deploying sudoers file
Puppet exec resource
Puppet classes and modules
Puppet Forge modules
Puppet Express
Puppet Express 2
Puppet 4 : Changes
Puppet --configprint
Puppet with Docker
Puppet 6.0.2 install on Ubuntu 18.04