There are many terms and concepts that are important for an engineer to be familiar with, in order to effectively build software. This post includes some of those terms. I will continually add to or update this list.
Agile. A flexible and iterative approach to software development that emphasizes collaboration, customer feedback, and adaptive planning. My experience and success with agile development was the inspiration behind starting this blog.
DevOps. A set of practices and tools that improve efficiency, speed, and reliability of the product through automation and optimization of the software development and delivery process where operational efficiency is part of the development process.
Continuous Integration and Continuous Delivery/Deployment (CI/CD). A set of practices and tools that result in faster and more frequent releases, through automation of building, testing, and deployment of software. A key part of CI/CD is to deliver software to production frequently and using techniques such as Test Driven Development, can significantly improve the results that teams get through CI/CD.
Test Driven Development (TDD). With TDD, developers write tests before writing code. This helps ensure that code meets the desired requirements and improves overall code quality. This practice encourages developers to match the requirements to the behavior of their code before writing it, which can lead to fewer bugs and a generally more robust software.
Scalability. The ability of a system to handle increasing load and demand, either by adding more resources or by improving its architecture. Cloud computing technologies, such as AWS provide various options to scale a system's load-bearing capabilities.
Performance Optimization. The practice of making software run faster, consume fewer resources, and handle more concurrent users, in order to improve the user experience. Here again, cloud computing technologies like AWS provide several tools that can help you in monitoring and optimizing your system's performance.
Resilience. The ability of a system to recover from failures and continue to function properly, even in the face of adverse conditions or circumstances.
Security. The practice of protecting software and its users from unauthorized access, exploitation, and data breaches. Security was initially a big concern for organizations to adopt cloud computing, though now all cloud computing providers offer robust set of tools to manage permissions and credentials to address those concerns.
Cloud Computing refers to the delivery of computing resources, such as servers, storage, databases, and software, over the internet. With cloud computing, organizations can scale their computing resources up or down as needed, and only pay for what they use, rather than having to make large upfront investments in hardware and software.
Infrastructure as Code (IaC). The practice of using code to automate the provisioning and management of infrastructure, allowing for faster and more reliable deployment, scaling, and maintenance. AWS's CDK is a great example of IaC.
Model-View-Controller (MVC) is a design pattern that separates an application into the Model, the View, and the Controller components that are inter-connected. The Model stores & manages the data, the View displays the data, and the Controller handles the interactions between the Model and the View.
Microservices is an architectural pattern where a large application is broken down into small, independent, and loosely coupled services. This approach enables developers to build, test, and deploy each service independently, leading to faster time to market and reduced risk of failure. Medium to large applications often use a combination of MVC and back-end microservices.
Software as a Service (SaaS) is a model where software is made available to customers over the internet, often for a subscription fee. SaaS providers host and manage the software, taking care of maintenance, upgrades, and security, and usually charge a fee for their solution. SaaS products help business customers to focus on their business processes rather than building software for needs that they share with other businesses. There are also several SaaS products for individuals and families.
Artificial Intelligence (AI) and Machine Learning (ML). Technologies that allow computers to learn from data and make predictions or decisions without being explicitly programmed to do so.