I use Vue and Nuxt to deploy universal single page applications together with headless cloud based CMS backends like Prismic or GraphCMS.
As with Vue and Nuxt I build isomorphic React and Next apps and plug them to a cloud based CMS.
Nowadays it is next to impossible to build a well performing webpage without a good build pipeline. I do not only use tools like vue-cli or create-react-app but can build my own Webpack configurations and, if necessary, I plug them together with Gulp tasks, Sass loaders, CSS post processors or whatever is needed.
A cloudbased CMS like Prismic or GraphCMS combined with a decently built frontend is often far superior to solutions like Wordpress and – if you care for a bug free frontend and a backend without confusingly opaque described buttons – are no more costly to build. In addition, static pages can be compiled at build time and not at runtime, making them the fastest possible solution regarding page load speed.
This is a method that often makes it easer to see side effects and together with strategies like dependency injection it is possible to deploy testable code right from the start of a project. It is also beneficial for developing more platform agnostic code, which is vital for deploying well organized universal single page applications
For the longevity of a medium to large sized project it is vital to have automated testing. How else would you know, when a small change breaks something seemingly unrelated. The time consumed by manual testing can become unbearable and seriously slow down development and refactoring.
Good performance is essential for good user experience. There are numerous articles about bounce rates for slow page loads and there are many techniques that ensure good load performance. Luckily, if you have clean code, it is often possible to apply many optimizations that ensure fast page loads, enhance perceived performance and provide resilience against unstable connection scenarios often encountered in mobile context.
It is often hard to estimate which code abstractions provide a solid base for the future and which just add unnecessary complexity, especially in agile environments where requirements can change rapidly. A good balance requires experience and a few strategies and concepts. I use those to maintain a high productivity through all stages of the project for me and my team members.
Node, Nuxt, Next, Django, Express, Python, PHP, GraphQL, Pug, Twig, JSP / JSPF, MySQL, Kirby, Wordpress