When the design hide the inherited complexity of your domain, then this means that the design is good
I have many years of experience working with Spring. Spring MVC, Spring Data/Integration, Spring Core, Spring Test, AOP, SpEL, and so on. These are some of the modules which I have been working in recent years. I know how it works the IoC container and the main structure of the framework.
I worked with Spring and Java EE on the server side. I know the advantages and disadvantages of each one, and this is why is so important to choose the right option based on the client requirements.
I know that the good design, is the design which hides the inherited complexity of your domain model, doing easy to add functionaliy to your application. Here is where the Design Pattern and good practices are so important. These patterns add complexity, but if they hide the domain's complexity, it means they were well applied.
It's impossible evolve a complex software in a consistent way without any automated testing. I spent a lot of hours doing unit testing and integration testing, and I have experience working with methodologies like TDD and BDD. I know very well that when something is hard to test, something in your design can be improved.
As a software engineer, you have to be able to leave your comfort zone. This means you have to be able to prepare your mind to listen new ideas, new paradigms, new tools, evaluate them and extract conclusions about them.
I have been work with technologies like Android, Freemarker, Dagger (IoC on Android), AngularJS and so on..
Every database offers to you some properties and benefits of course the also have some weakness, choose between one or another depends of your scenario. The key is to study the requirements to find the good match.
I really like to make pet projects about new technologies. You can find in my GitHub account some personal projects. I am open to participate in any interesting Open Source project. Feel free to contact me for any suggestion.