I am doing a report for Uni on an application developed by the team I am in. We have to deliver-among other things- a Technical Solution Document along with the application. One of the sections of this document is called "Product Architecture and Software Stack".

I have googled the phrase "product architecture" but what I have found are explanations about "software architecture". I'd like to know if they are the same or are related at all. Also, I have found plenty information about what software stack is but because I don't know what Product Architecture is I don't know what's the relationship between the two.

I'd highly appreciate it if someone can tell me the relationship between these concepts and explain how they are related.


This is IMHO more a linguistic question than a real software engineering question, but FWIW, let me try to answer it:

If your product is some software, then "Product Architecture" = "Software Architecture".

If your product is something different like a building, or some hardware, or a complex system involving hardware + software, then not. In the latter case, the software part has surely some kind of software architecture, which is part of the overall product architecture.

And a "Software Stack" is usually part of a software architecture, it relates to the third party components used in your software product.


The term "Product Architecture" refers to the architecture of the entire product you are delivering. The term "Software Architecture" refers to the architecture of the software you are delivering.

The difference between those two terms is that a product may be more than just a computer program. A product can also contain hardware components. If you are only delivering software, then the Software Architecture describes the whole of the Product Architecture, but otherwise it would describe just a part of the Product Architecture.

A Software Stack is the part of the Software Architecture where you describe which programming languages and major technologies you use (front-end framework, backend framework, database, etc.).


They are all ambiguous and used to mean different things at different times.

Just look at what has been accumulated into the Wikipedia article for https://en.wikipedia.org/wiki/Software_architecture:

  • Client-Server
  • Peer to Peer
  • Data-Centric
  • Event-driven
  • Layered

Apparently there is no one organising these aspects properly along different decision dimensions:

  • Server Infrastructure
  • Database Access Model - Client-Server / P2P. Cached Writes / Cached Subset
  • Data management - Single-Master, Multi-Master, Read-Replicas, Multi-Region
  • Security - inbuilt username/password / federated
  • UI - Client-Controlled / Server Rendered
  • UI Data - Direct to database / Service Layer Proxy
  • Service Layer - None / RESTful / SOAP
  • Service Deployment - Monolithic / Microservice
  • Service Development - Monolithic / Microservice
  • Shared Code Model - DLL / Plugin / Service-Sub-Call / Microprocess
  • Shared Logic Composition - Standalone / Pipes and Filters
  • Principles - Shared Nothing; Data-centric;

I believe it makes the most sense to consider "Software Architecture" focusing on the data and attributes of the data management and access. Even without a formal service-layer, the database schema is already a standard for multiple UIs to interact with. The UI is really just the User's way to interact with the "System" which is the data (and data processing side effects)

(The above is only a quick and dirty approximation to show how ambiguous "software architecture" really is).

WikiPedia doesn't have an entry for "Product Architecture". But it does for "Product Design" which is more about the non-software stuff I would say.

Also consider the bottom-up approach of analysis:

  • https://en.wikipedia.org/wiki/Multitier_architecture - is talking more about the communication stack. This is about the "Product", "Software" architecture, and also pertains to the "Software Stack"
  • https://en.wikipedia.org/wiki/Microservices architecture - is probably mostly talking about the "deployment" (devops). Where Cloud Functions / Lambda functions will be running code. In reality, the service implementations might conceptually be "distributed monolith", "nanoservice", or a loose consensus of what a proper "microservice" should be. In terms of the "stack" the server-side endpoint type is pertinent here; for Product/Software architecture, most people talk about "Software Architecture".

It's ambiguous.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.