The Woes of Modern Software
I don't see myself as an expert developer but I have written enough software over the last 10 years both for my own projects and those of others to understand that simplicity is the best approach to software design. Every problem in computer science can be solved by adding another layer of indirection. This is a rule that has been well understood in our modern age of computing. The software that we build today are based on many layers of indirection from device to OS to languages to API to frameworks to products. Needless to say, many products today are also build on top of other products.