If you are coding software long enough, you could recognize how the same Programming Concepts are reimplemented again and again. It is just like the mathematical fractals or the evolution of species. Everything is new, but in the same time, the same old thing, just the package is different. It is different, because of the environment, the current trends and the current requirements and expectations from software.
State-based system and application designs and architectures that reflect changes onto User Interfaces or Other Environments. There is whole full article on that subject you could read:
Abstractions of the underlying environment
From the birth of technical revolution, abstracting over the lower level is endlessly increasing speed of development and innovation. The problem is, when the new technology is doing the same thing, on the same level of detail or distance to the developer or the user.
MVVM, MVC, MVP
Variation of these design patterns are implemented in all places. They could be found in almost all the back-end programming languages, many frameworks and libraries and lately even in a lot of front-end frameworks.
Dependency Management Systems
CRUD operations, User Logins/Registration/etc., Messages, Comments, CMS.
Because of having different legal owner, or senior management requirements for using the latest frameworks, clouds or something else, we, developers often need to reimplement the same functionalities under the new management, under the new framework or library or trending technology. It is fun up to some moment. After it, repeating becomes a drag and the passion fades away. We must all search, find and integrate something outside of programming to keep the passion alive and this will actually make the software more meaningful.