# The problem with modern software: Unnecessary complexity and bad practices We live in a time when software should be more accessible, powerful and simple than ever before. Yet we find ourselves surrounded by bloated applications, oversized libraries, and tools that, instead of simplifying the lives of users and developers, add layers of unnecessary complexity. How did we get here? ## The feature obsession One of the main culprits is the features obsession. Every update must introduce "something new", often at the expense of efficiency or system stability. Applications like modern text editors or web browsers have become huge conglomerates of features that few users really need, sacrificing speed and lightness. Adding a plugin or library has become the default approach for every new requirement, even when it could be implemented natively in a leaner way. ## Dependency hell Another plague is dependencies. Many developers seem to ignore the difference between reusing existing code and turning their software into a fragile house of cards. It's common to find small projects with dozens, if not hundreds, of external packages, each with its own vulnerabilities, bugs and uncertain maintenance. This approach leads to security risks and an overwhelming management burden. ## The illusion of flexibility Frameworks and one-size-fits-all tools promise flexibility and rapid development, but often deliver the opposite. Take Electron, for example: it allows developers to build desktop applications using web technologies, but at the cost of massive resource consumption. Building a "native" application that uses 2GB of RAM just to open a simple window is technological failure, not progress. ## Forgotten Best Practices A glaring example of the decline of best practices is the proliferation of overly complex and opaque configuration systems. Kubernetes, while powerful, often takes hours (if not days) to understand and configure correctly, forcing organisations to rely on outside consultants. The average user shouldn't have to become an expert in distributed architecture just to run an application. ## Solutions that solve nothing Then there are "solutions" that create new problems. User interfaces designed to be "intuitive" often hide advanced options under layers of confusing menus, making it difficult to gain full control over the software. This is especially true of modern operating systems, which increasingly limit customisation in favour of a "standardised" experience. ## Conclusion The way out of this mess isn't easy, but it starts with collective introspection. We need to ask ourselves: are we really improving technology, or are we just building monuments to our ability to complicate things? Simplicity, lightness and efficiency are not outdated concepts - they're what we should be striving for in every line of code we write.