Software Engineering

How does one design, develop, and maintain software systems effectively?

What Do I Need To Know?

Software engineering is certainly more than just programming—it’s about the systematic application of engineering approaches to the development of software systems. There are various principles, methods, and best practices that guide the process. Your goal as a software engineer is to create systems that are efficient, maintainable, scalable, reliable, and secure.

To build a software system, you’ll need to know exactly what the user requirements are, so you’ll need to know how to get them, and be able to communicate with stakeholders effectively before, during, and after development. Communication is a power skill.

Here’s what you need to know:

One of the main takeaways from this video: Programming is turning specifications into working software. AI is good at that. Human “programmer” jobs have been going away for a while now—AI coding agents are doing almost all of that work now. Engineering, on the other hand, involves design, reliability, tradeoff analysis, cross functional collaboration, and incident response. Humans are needed for these tasks. The number of software engineering jobs is expected to rise over the next several years.

Exercise: There are at least two other major takeaways from this video. What are they?

The SDLC

There are quite a few phases one goes through in building software systems. Roughly, they are Ideation, Planning, (Requirements) Analysis, Design, Implementation, Code Review, Testing, Documentation, Integration, Deployment, Maintenance, Evaluation, Retirement, Disposal. Collectively, these phases are known as the Software Development Life Cycle, or the Systems Development Life Cycle (SDLC). You can learn more by starting a web search at Wikipedia.

Skills and Practices

In no particular order, software developers, engineers, architects, and anyone involved in producing software systems should hone technical skills in:

and, of equal or greater importance, so-called durable human skills, also known as power skills (or sometimes soft skills), such as:

Exercise: What else?
Exercise: These notes discuss engineering. How is engineering different from science? From art? From craft? How is it related to design?

People skills are power skills.

Initiation

The early phases of the SDLC are focused in ideation, gathering requirements, understanding the problem domain, defining the scope of the project, and high-level design.

Notice that security concerns are part of system design, and not something you tack on at the end.

Security is a design concern, not an afterthought.

Implementation

The software that gets built includes (at least) executable programs, supporting scripts, and configuration files. Test scripts are essential during implementation, too! They should be created alongside the main code to ensure functionality and reliability. Code reviews for correctness, conformance, security compliance, and performance are also crucial.

This is the part that AI agents can do pretty well. But humans must be kept in the loop.

As of 2026, four “layers” are emerging in getting the code and tests produced by AI agents:

You can find details at: MindStudio and Elastic Search Labs. Or this article with tips on doing good context engineering. For now, here’s a little table of the main ideas:

Prompt Engineering Context Engineering Intent Engineering Agentic Engineering
Crafting effective prompts to elicit desired responses (including precise output formats).Providing relevant information and context to to improve understanding and response quality.Aligning AI model outputs with user intentions and goals.Designing and developing AI agents that can plan, use tools, and perform specific tasks and functions autonomously.
Think: InstructionsThink: Necessary informationThink: Goal DefinitionThink: Orchestration
Focus: Tone, structure, basic examples, persona, how to “talk” to the model.Focus: What the model needs to know to carry out the tasks.Focus: Alignment of AI actions with the correct user goals.Focus: Managing state, multi-step reasoning, autonomous decision-making, error handling and recovery.
Techniques: prompt templates, few-shot learning, iterative refinement.Techniques: context windows, knowledge graphs, external data sources.Techniques: reinforcement learning, reward modeling, user feedback loops.Techniques: multi-agent systems, task decomposition, autonomous decision-making.

There are many resources available that will show you, for each layer, best practices (and common mistakes). Mistakes can be quite costly!

Exercise: (Research) Why should you avoid “just dropping in a whole bunch of PDFs” as context for an AI agent? What are the alternatives?
Exercise: Find guides for intent engineering and agentic engineering. What are some of the best practices? What are some of the common mistakes?

Implementation is not just “coding” the main functionality. Testing and Security (especially Software Security) are concerns that are 100% integral to the development process.

Testing happens during software development.

Ethics

The two major professional societies for software engineers are the IEEE Computer Society and the ACM, and each have published codes of ethics. They should be read in full:

If you like bullet point summaries, we got you covered! Read on.

Key principles (an oversimplification, but a good place to start):

Core Ethical Principles:

Themes:

Professional Responsibilities:

You can find another short summary at Fellow.ai.

Exercise: Check out the FAccT Conference.
Exercise: Read through, and consider interacting with, the course module An Introduction to Software Engineering Ethics from the Markkula Center for Applied Ethics at Santa Clara University. (Thanks to Monica DeLong at the Markkula Center for permission to share this resource.)

Recall Practice

Here are some questions useful for your spaced repetition learning. Many of the answers are not found on this page. Some will have popped up in lecture. Others will require you to do your own research.

  1. What is software engineering?
    The systematic application of engineering approaches to the development of software.
  2. What is programming?
    The conversion of specifications into executable code.
  3. Marina Wyss mentions that AI is really good at programming, but there are things that humans excel at in the software engineering process. What are those things?
    Design, reliability, tradeoff analysis, cross functional collaboration, and incident response.
  4. What are some of the phases of the Software Development Life Cycle (SDLC)?
    Ideation, Planning, (Requirements) Analysis, Design, Implementation, Code Review, Testing, Documentation, Integration, Deployment, Maintenance, Evaluation, Retirement, Disposal.
  5. Name several technical skills important for software engineers.
    Languages, frameworks, agent orchestration, version control, testing, debugging, design patterns, command line interfaces, project management.
  6. The term “soft skills” has been around a while, but there are at least two better terms. What are they?
    (1) Durable Human Skills and (2) Power Skills.
  7. Name as many durable human skills as you can.
    Communication, collaboration, inclusion, problem-solving, creativity, adaptability, empathy, ethical awareness, critical thinking, leadership, time management, emotional awareness, self-management, continuous learning.
  8. Is there a security analysis phase of the SDLC? Why or why not?
    Security analysis should be integrated throughout the SDLC rather than being a separate phase. Security must be built-in to the entire software development process.
  9. What are the four layers of agentic development?
    Prompt engineering, context engineering, intent engineering, agent orchestration.
  10. What two professional organizations provide codes of ethics for software engineers?
    The Association for Computing Machinery (ACM) and the Institute of Electrical and Electronics Engineers (IEEE).
  11. What are the 8 principles of software engineering ethics (from the ACM/IEEE code)?
    Public, Client and Employer, Product, Judgment, Management, Profession, Colleagues, Self.

Summary

We’ve covered:

  • What software engineering is
  • What software engineers do
  • The systems development lifecycle
  • Project initiation
  • Implementing software systems
  • Ethical concerns and published Codes of Ethics