This week’s system design refresher:
1 year of Youtube
Top Architectural Styles
Firewall explained
Two-tier infrastructure on AWS
How Developer to Tester Ratio Changed From 1:1 to 100:1
New Relic APM 360: The industry’s next evolution of APM (Sponsored)
Prevent issues before they occur. New Relic APM 360 goes beyond incident response and unlocks daily performance, security, and development insights for all engineers in one unified view.
1 year of Youtube
Top architectural styles
In software development, architecture plays a crucial role in shaping the structure and behavior of software systems. It provides a blueprint for system design, detailing how components interact with each other to deliver specific functionality. They also offer solutions to common problems, saving time and effort and leading to more robust and maintainable systems.
However, with the vast array of architectural styles and patterns available, it can take time to discern which approach best suits a particular project or system. Aims to shed light on these concepts, helping you make informed decisions in your architectural endeavors.
To help you navigate the vast landscape of architectural styles and patterns, there is a cheat sheet that encapsulates all. This cheat sheet is a handy reference guide that you can use to quickly recall the main characteristics of each architectural style and pattern.
Firewall explained to Kids… and Adults
A firewall is a network security system that controls and filters network traffic, acting as a watchman between a private network and the public Internet.
They come in two broad categories:
Software-based: installed on individual devices for protection
Hardware-based: stand-alone devices that safeguard an entire network.
Firewalls have several types, each designed for specific security needs:
1. Packet Filtering Firewalls: Examines packets of data, accepting or rejecting based on source, destination, or protocols.
2. Circuit-level Gateways: Monitors TCP handshake between packets to determine session legitimacy.
3. Application-level Gateways (Proxy Firewalls): Filters incoming traffic between your network and traffic source, offering a protective shield against untrusted networks.
4. Stateful Inspection Firewalls: Tracks active connections to determine which packets to allow, analyzing in the context of their place in a data stream.
5. Next-Generation Firewalls (NGFWs): Advanced firewalls that integrate traditional methods with functionalities like intrusion prevention systems, deep packet analysis, and application awareness.
Over to you: Do you know what firewalls your company uses?
Two-tier infrastructure on AWS
An amazing illustration of how to use Terraform to create a robust Two-tier infrastructure on AWS.
Image Credit: Ankit Jodhani
Paradigm Shift: How Developer to Tester Ratio Changed From 1:1 to 100:1
This post is inspired by the article "The Paradigm Shifts with Different Dev:Test Ratios" by Carlos Arguelles. I highly recommend that you read the original article here.
1:1 ratio (~1997)
Software used to be burned onto physical CDs and delivered to customers. The development process was waterfall-style, builds were certified, and versions were released roughly every three years.
If you had a bug, that bug would live forever. It wasn’t until years later that companies added the ability for software to ping the internet for updates and automatically install them.
10:1 ratio (~2009)
Around 2009, the release-to-production speed increased significantly. Patches could be installed within weeks, and the agile movement, along with iteration-driven development, changed the development process.
For example, at Amazon, the web services are mainly developed and tested by the developers. They are also responsible for dealing with production issues, and testing resources are stretched thin (10:1 ratio).
100:1 ratio (~2020)
Around 2015, big tech companies like Google and Microsoft removed SDET or SETI titles, and Amazon slowed down the hiring of SDETs.
But how is this going to work for big tech in terms of testing?
Firstly, the testing aspect of the software has shifted towards highly scalable, standardized testing tools. These tools have been widely adopted by developers for building their own automated tests.
Secondly, testing knowledge is disseminated through education and consulting.
Together, these factors have facilitated a smooth transition to the 100:1 testing ratio we see today.
Over to you: What does the future hold for testing, and how is it currently working for you?
LOL it's funny DDD is NOT an architecture. It's an approach! Do not misinform engineers
Developers across big tech companies have started using automated testing tools, which are proving to be very effective and efficient too. Testers should turn themselves into developers, although it may take time to build the development skills. If they don't do, they would not be able to find a place in big product development companies.