| Web applications can be surprisingly complicated distributed systems, when you take into account.. - the JS frontend that communicates with AJAX and/or WebSockets IPC with the backend - the backend may actually be a bunch of microservices - the fact that there are many concurrent frontends (users) - messages from frontends may end up reordered/dropped/rerouted on their way to different backend ipc channels (microservices or replicated backend) - the frontends are untrusted (the user or browser may tamper with your code running there) - the backend server is also often replicated / sharded - there are caches (think Redis) that the backends share in addition to the main DB. - load balancers, high-availability reverse proxies with various failover propreties, etc - various caching behaviours that are only partly under your control (browser-side content caching, DNS, etc) - all of the above are interconnected over unreliable channels - there are secrets and security involved so functional assurance ("pressing button X always makes function Y happen") doesn't tell you enough (I have no TLA+ experience so can't say how one would use it with a web app, though). |