%% date:: [[2022-08-12]], [[2022-09-29]], [[2022-12-21]] %% # [[Performance]] Performance is the measure of how well something works for its intended purpose. ## Aspects of performance In the context of [[Tech|Computer science]], performance can refer to the following aspects of an application: - [[Scalability]] - [[Elasticity]] - [[Availability]] - [[Reliability]] - [[Speed]] Some argue that performance is a subset of Reliabilty, but I argue the opposite. I think the way we commonly use the word "performance" when not referring to technology extends to reliability. We don't say that an employee "performs" well if they are not reliable. However, we *could* say that the same person is reliable, but doesn't perform well. However, I do think this is mostly a case of semantics. ## Types of performance Aside from the aspects of performance above, performance can also be categorized by type, based on what area of the application it refers to. [[Frontend performance testing|Front-end performance]] refers to performance of an application on the client side. [[Backend performance testing|Back-end performance]] refers to the performance of the servers and infrastructure underlying an application. ## [[Factors affecting application performance]] ## [[Measuring application performance]] ## [[Performance Testing]] ## [[Principles of improving work performance]] At its heart, improving application performance can be generalized to include all work; that is, what improves the performance or [[Productivity]] of an individual can often also improve performance in a computing context. ## Trends in application performance - [[Observability]] has become an essential part of building with performance in mind. - The industry had shifted from [[Thin Clients]] to [[Fat Clients]] to alleviate some of the slowness and unreliability introduced by poor internet connections, but the pendulum is shifting back towards [[Thin Clients]] for a few reasons: - Mobile networks are improving globally. - [[Serverless computing]] has made it inexpensive and feasible to outsource modular computations. - [[Device fragmentation]] has made it more difficult to develop native apps and more appealing to develop web apps that all devices can access. ## Building performant systems in practice Here's a use case from [[Niantic]] sharing how they scale their systems for the game [[Pokémon Go]]. <iframe width="560" height="315" src="https://www.youtube.com/embed/MtsEFebioWI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> ## See also - [[Performance Testing]] - [[Go is built with performance in mind]] - [[Software Testing]]