Week 13 - Systems

App Development lifecycle

Continuous integration (CI)

Continuous Delivery (CD)

Packaging and Docker

Docker setup

Building an API server

Deployments

Intro to Cloud

Using local LLMs

Appendix 1 yaml syntax

Appendix 2 Docker commands

Practice

Assignment

Core program

From idea to production

Building a real-world application is not just writing code. The application development lifecycle covers the stages software goes through from idea to production and beyond. Every application, whether a simple API or a complex cloud platform, follows a path through planning, design, implementation, testing, deployment, and maintenance.

In practice, teams rarely follow these stages in a strict sequence. There are multiple approaches to organizing this process: some teams complete each phase fully before moving to the next, others work in short cycles and revisit stages frequently, and some aim to automate as much as possible so that building, testing, and deploying happen continuously. The right approach depends on the project, the team, and the constraints, but understanding the underlying stages is essential regardless of how you organize the work.

Writing code is not everything

Working on a software project is not just writing code or executing tests. It involves many steps along the way. The chart below shows a few common steps taken in modern software development:

https://excalidraw.com/#json=vFdyAdG60DdOD9lIJmaBD,wvvDDGHcnAUiwZCh8EOrCA

https://excalidraw.com/#json=vFdyAdG60DdOD9lIJmaBD,wvvDDGHcnAUiwZCh8EOrCA

<aside> đź’­

Take a look at the chart above, some of topics will be covered in this week. We will get back to this chart and review it at the end.

</aside>

Development workflow approaches

In this section, we will cover two popular models: Waterfall and Agile. Both are used in the industry for different kinds of projects. However, the Agile approach is more common and is widely used in companies today.

Waterfall approach

The Waterfall model is the most straightforward approach to software development. It organizes the lifecycle into distinct phases, where each phase must be completed before the next one begins—like water flowing down a series of steps, hence the name.

Source: https://medium.com/@nayanatharasamarakkody/software-development-life-cycle-sdlc-models-aa18fc085f28

Source: https://medium.com/@nayanatharasamarakkody/software-development-life-cycle-sdlc-models-aa18fc085f28

  1. Requirements - Gather and document everything the software needs to do. All requirements are defined upfront before any design or coding begins.
  2. Design - Architects and developers plan the system's structure: database schemas, API specifications, technology choices, programming languages and how components will interact.
  3. Development - The actual coding happens here, based on the design documents from the previous phase.
  4. Testing - Once the code is complete, it is handed off for testing. Bugs are found, reported, and fixed.
  5. Deployment - The tested software is released to production and made available to users.
  6. Maintenance - After release, the team fixes issues, applies updates, and handles user feedback.

The key characteristic is that you don't go back. Once requirements are signed off, you move to design. Once design is done, you code. Each phase produces a deliverable that feeds into the next.

Pros of the Waterfall model

  1. Simple and easy to understand - Linear structure with clear phases and deliverables.
  2. Strong documentation - Everything is defined upfront, making knowledge transfer easier.
  3. Easy to plan and estimate - Full scope is known before development starts.

Cons of the waterfall model

  1. Not flexible - Going back to a completed phase is difficult and costly.
  2. Users see the product very late - First real feedback comes only after deployment.
  3. Late discovery of problems - Issues can be found very late during the testing or even after the deployment

In practice, teams often need to deliver working software quickly and gather user feedback early in the process. This need led to a different approach.

Agile approach

Agile is an approach to software development that focuses on delivering working software in small, frequent increments rather than all at once. Instead of defining everything upfront and following a fixed plan, teams work in short cycles (sprints), continuously gathering feedback and adapting as they go.

The core idea is simple: build a small piece, show it to users, learn from their feedback, and improve. Then repeat.

Source: https://aguayo.co/en/blog-aguayo-user-experience/agile-methodology-in-ux/

Source: https://aguayo.co/en/blog-aguayo-user-experience/agile-methodology-in-ux/

How It Works

Agile organizes work into short iterations, often called sprints, typically lasting one to four weeks. Each sprint follows a mini-lifecycle:

Plan - The team selects a small set of features or tasks to work on during the sprint. The focus is on what delivers the most value right now, not on planning the entire project.

Design & develop - Developers design and implement the selected features within the sprint.

Test - The new code is tested to catch bugs and verify it works as expected. This happens within the same sprint, not months later.

Release - The working software is released so that users or stakeholders can interact with it.

Feedback - At the end of the sprint, the team demos the working software to stakeholders and users, collecting feedback. The team then discusses what went well and what can be improved in the next sprint.

After each sprint, the team has a working piece of software that can be shown, tested, or even released. Over time, sprint by sprint, the product grows.

Pros of the Agile model

  1. Fast feedback - Users see working software after every sprint, so problems are caught early.
  2. Adapts to change - Requirements can evolve as the team learns more about what users actually need.
  3. Delivers value sooner - Usable software is released incrementally, not all at once at the end.

Cons of the Agile model

  1. Harder to estimate - Without a full plan upfront, it is difficult to predict total cost and timeline.
  2. Requires active involvement - Users and stakeholders need to be available for feedback every sprint.
  3. Can lose direction - Without strong discipline, constant changes can lead to a product that keeps growing without a clear end goal.

Additional Resources

Videos

Reading


The HackYourFuture curriculum is licensed under CC BY-NC-SA 4.0 *https://hackyourfuture.net/*

CC BY-NC-SA 4.0 Icons

Built with ❤️ by the HackYourFuture community · Thank you, contributors

Found a mistake or have a suggestion? Let us know in the feedback form.