Page
1
The Developer’s Field Guide to Modern Software Engineering Methods, Tools and Best Practices — Nico Loubser
Page
2
The Developer’s Field Guide to Modern Software Engineering Methods, Tools and Best Practices Nico Loubser
Page
3
The Developer’s Field Guide to Modern Software Engineering: Methods, Tools, and Best Practices ISBN-13 (pbk): 979-8-8688-2156-1 ISBN-13 (electronic): 979-8-8688-2157-8 https://doi.org/10.1007/979-8-8688-2157-8 Copyright © 2026 by Nico Loubser This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein. Managing Director, Apress Media LLC: Welmoed Spahr Acquisitions Editor: James Robinson-Prior Development Editor: James Markham Coordinating Editor: Gryffin Winkler Cover image by eStudioCalamar Distributed to the book trade worldwide by Springer Science+Business Media New York, 1 New York Plaza, New York, NY 10004. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer-sbm.com, or visit www.springeronline.com. Apress Media, LLC is a Delaware LLC and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation. For information on translations, please e-mail booktranslations@springernature.com; for reprint, paperback, or audio rights, please e-mail bookpermissions@springernature.com. Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales web page at http://www.apress.com/bulk-sales. Any source code or other supplementary material referenced by the author in this book is available to readers on GitHub (https://github.com/Apress). For more detailed information, please visit https://www.apress.com/gp/services/source-code. If disposing of this product, please recycle the paper Nico Loubser LONDON, UK
Page
4
To Kim, Ethan, and Maia, for your patience during the book-writing process.
Page
5
(This page has no text content)
Page
6
(This page has no text content)
Page
7
(This page has no text content)
Page
8
(This page has no text content)
Page
9
(This page has no text content)
Page
10
(This page has no text content)
Page
11
(This page has no text content)
Page
12
(This page has no text content)
Page
13
(This page has no text content)
Page
14
(This page has no text content)
Page
15
xv Nico Loubser has been writing software for 22 years. During that time, he earned an honors degree in software engineering, delivered talks at PHP meetups, designed numerous systems from the ground up, and learned how to build as well as how not to build systems. In recent years, he has shifted his focus to the architectural aspects of software engineering and is designing systems on AWS. He is a firm believer that mentorship is essential to developing the next generation of software engineers and that, with the AI revolution, we will need mentorship for junior engineers more than ever. Nico is also the author of the popular book Software Engineering for Absolute Beginners from Apress. About the Author
Page
16
xvii Alex Khrustalov is a full-stack developer with 10+ years of experience. His primary focus is front-end development with TypeScript. Apart from that, he has a decent back-end development experience with Erlang/Elixir and Node.js. That’s why he finds it more appealing to work as a full-stack developer. His main professional interests are programming language and type theory. About the Technical Reviewer
Page
17
xix We all have to start somewhere, and for that reason, I would like to thank Ivor Kettles for believing in me and giving me my first break in IT, even after I told him I did not know what FTP and TWAIN were in my interview. Acknowledgments
Page
18
xxi Introduction This book is about mentorship and sharing the knowledge I gained from numerous projects and the people I worked with. The aim of this book is not to let you completely master any of the topics in the chapters. That approach typically leads you to aspects of software engineering you will encounter only once a year, if not less. This book aims to provide you with the knowledge you need to create software projects and the concepts you will encounter in your day-to-day work as a software engineer. It aims to provide a foundation of knowledge from which you can tackle those complex issues that only arise once a year. Topics covered here range from setting up engineering environments and the command line to security, coding standards, the software development lifecycle, and MVPs. It also delves into the repercussions of AI, which is permeating software engineering from all angles.
Page
19
1 © Nico Loubser 2026 N. Loubser, The Developer’s Field Guide to Modern Software Engineering, https://doi.org/10.1007/979-8-8688-2157-8_1 CHAPTER 1 Containers Goal of This Chapter In this chapter, we will look at containers, an industry-standard way to create large- scale executable environments for our software that are reproducible across different platforms and shareable between software engineers. The aim is to provide you with knowledge of containers and expertise in implementing and managing them. Containers One of the most significant changes to how we run software in the last decade is containerization. The benefits are clear from the outset. It enables us to develop our software in the same environments as all our colleagues who will be working on the same projects, having those same containers run on our production environments, and the easy sharing of those environments. The simplest, although not completely correct, way to think about containers is running another “server” on your computer, or wherever it is spun up. This approach of running a computer on your computer is not new. It was preceded by virtualization, where a truly complete system could be spun up in a virtual environment. The contrast between virtualization and containerization is stark. The one similarity is that both run on a host and need to run inside an already installed operating system that supports virtualization or container functionality. Although that is not where the similarities end, I will not dig into it further. Virtualization feels more intuitive to understand. An operating system is spun up in an isolated environment, network interfaces are emulated, etc. From a virtualization perspective, I can install Windows 98 and run it with its graphical user interface. So with this example, a complete operating
Page
20
2 system is spun up, completely independent from the underlying operating system it is running on. With containerisation, I cannot easily spin up a full Windows 98 container with a graphical user interface and run it in my Windows 11 machine, but that is not where the power of containers lies. With containers like Docker, we do not have an operating system spun up per se. The docker container shares the kernel, or core, of the host it is on. Complex isolation techniques are used to separate the container's processes and the processes it shares with the host kernel from the rest of the operating system on which the container is running, making it feel as if it is running an operating system completely separated from the host. Linux, at its core, provides support for these advanced isolation processes. It was a feature created as part of the kernel back in the 1970s already (the kernel refers to its core operating functionality) as a safety measure to isolate risky processes from the rest of the system called chroot. Containerization evolved from that. The container, then, in this isolated process, still uses the host's kernel. Various isolation techniques, called namespaces, isolate the container from the host to the extent where the container seems to be something completely separate from the host. Windows lacks native isolation processes and employs alternative, less mature techniques to isolate the container process; if configured incorrectly, it may be prone to security issues. Mac OS also has no such isolation process. Because Docker relies on sharing the host machine's kernel, it means that we cannot natively run a Linux container on Mac or Windows, or a Windows container on Mac or Linux. Instead, the docker engine will introduce a lightweight VM on Mac and Windows, allowing it to run Linux containers securely. To run Windows emulation on Linux, you will need virtualization, which we will not cover in this book. Mac also does not have the isolation support, chroot, that Linux has and will rely on the lightweight Linux VM. We do not need to worry too much about this, as we will use Linux-based containers, and Docker Desktop, which we will install, will have the lightweight Linux virtual machine sorted out for us. Understanding the basic principles of containers is relevant. Although Linux is built with strict backward compatibility, it is not impossible for an upgrade of the host operating system to break your container, as well as understanding that you cannot dockerize certain operating systems on specific hosts. We will only use Linux-based containers. This is to keep things simple but also to prevent any potential security risks that a Windows container may introduce due to a misconfiguration. I will never provide you with a Windows container, only Linux. The technologies we will look at, for instance, Python, are popular and run on Windows, Linux, and MacOS. Chapter 1 Containers