You’ve heard of smokestacks, library stacks, and haystacks. You probably have a stack of paper on your desk, and you may have had, if ever so briefly, a stack of chips at a casino card table. But what the heck is a technology stack?
Hint: It’s not that pile of broken computers, monitors, cell phones, and other junk you’re planning to e-waste at some point. A technology stack is simply a collection of different technologies that work together for some purpose, usually as a foundation for systems such as websites, mobile apps, and standalone desktop software. When a collection works particularly well together, that can become a de facto standard, complete with a clever acronym.
One of the best-known examples of a technology stack is LAMP, which is commonly used for websites. LAMP stands for:
- Linux – Server operating system
- Apache – Web server software
- MySQL – Database system
- PHP – Programming language, well-suited for developing interactive web pages
Together, these technologies provide most or all of the underlying foundation necessary to build a highly functional, interactive website.
Types of Technology Stacks
There are several types of technology stacks. The LAMP example is a server-side website stack. There is also a technology stack on the website visitor’s end—for example, Windows operating system, Chrome browser (which implements additional stack components, such as HTML, CSS, and JavaScript), and Adobe Flash. A desktop application might involve Microsoft’s .NET framework and SQL Server Express database backend. There are hardware stacks, too, such as the combination of processor, server and storage, not to mention those technology stacks associated with network infrastructure.
It’s easy to see that an end-to-end solution may involve several different technology stacks, all of which must work together to ensure trouble-free performance.
Why Technology Stacks Are Important to You
The choice of technology stack, or of the components within a technology stack, depends on system requirements such as:
- Speed. In systems such as websites, especially when database searches are involved, speed is crucial, so all components of the hardware and software stacks should work together to optimize speed performance. Some disk storage components, for example, may be more efficient at writing data than reading it, which would not be a benefit to this type of website application.
- Throughput. Some applications might need to do serious number-crunching. This may require a technology stack that is optimized for parallel processing.
- Scalability. Some technology stacks lend themselves more easily to expanding to meet growing demands (such as number of simultaneous users) by adding disk drives or servers or what have you.
As with so much in life, there are tradeoffs involved in technology stack decisions, many of which involve cost. Thus, budget has to be considered along with the system requirements.
Technology Stacks and Software Development
Technology stack choices can also influence how a software development team does its work. For example, if a desktop or mobile application relies on a local database, the number of input-output transactions on that database will probably not have an appreciable impact on system performance. Put that database on a local area network or in the cloud, however, and developers have to be much more careful to minimize the number of database calls or the system performance could be dismal.
So when you’re looking into developing a custom application, be it a desktop application, web app, or mobile app, among the first questions the development team should ask you is what the anticipated technology stack looks like. If you don’t know, that’s OK—the developers should be able to work with you to determine the best approach, considering all the system requirements, tradeoffs and budget.
Too many custom development projects fail because the developers or other stakeholders did not know or fully appreciate the environment in which the software was to be run—specifically, the technology stacks involved. Knowing this at the beginning can inform a robust software architecture and produce a high-performing system that meets everyone’s expectations.