Laying aside fundamental views on whether this is the right direction for the web or not, this degree of complexity isn't an issue in an of itself. In the same way back-end systems tend to have layers of redundancy and more thorough testing processes, If the front end is now doing more work, it stands to reason that it also needs more 'process' to prevent it from falling over when things go wrong.
However, as the roles of the front-end developer have stretched into the realms of 'engineering', it has created a split:
(Terms coined by Brad Frost)
Again, this isn't a bad thing. It gives folks the choice to specialise in what they're good at. It can, however, become a problem when:
The latter issue is the one I'm going to focus on. It's becoming increasingly more common for organisations to jump straight from “design” to “engineering”, missing out the front-of-the-front-end altogether. After all, if the engineer codes, and the phase after design is code, so why not let the engineers build the UI?
Well, by jumping straight between the colossal gulf spanning the two functions, a huge wealth of design intention can disappear out of sight. The nuance of a design is built from layers of knowledge passed from Research to UX to Content to Design. The tiny details and systemised thinking that go into design all add up to a make great interface, and scalable front-end codebase.
The language that converts from a 'picture of a design' to a website is CSS. CSS is seen as such a contentious language because it's where design and engineering meet.
There needs to be a way to bridge the gap...
This is a quote taken from the excellent design engineering handbook, published by Invision:
Design engineering is the name for the discipline that finesses the overlap between design and engineering to speed delivery and idea validation. From prototyping to production-ready code, this function fast-tracks design decisions, mitigates risk, and establishes UI code quality. The design engineer’s work encapsulates the systems, workflows, and technology that empower designers and engineers to collaborate most effectively to optimise product development and innovation. Natalya Shelburne
In a team where there is friction between design and engineering, or even design, front-of-the-frontend, and back-of-the-front-end, a design engineer's job is to smooth the translation process between the disciplines.
A design engineer may be involved in:
In essence, a design engineer's primary aim is to be helpful. Helping UX come to sound decisions, helping research get the most useful insights from their testing, helping designers generate sound & deliverable ideas, and helping engineers understand the design intention. But the primary focus is on doing anything they can to help translate the design for the engineering team.
We talk of ‘creators’ and ‘maintainers’: those who do the work, and those who keep it running well. But I think it's a spectrum. Design engineers sit firmly in the most ‘creationy’ part of the creator camp, building rapidly, failing early and clearing a way through the bad ideas so the other creators can follow smoothly.
As an agency, every project we undertake is different, so we know this function as a formal role may not be appropriate for all projects. However, the mindset of translating effectively between 'who designs it' to 'who builds it' is.
Although we've been practicing this way of working for a while; building with prototypes, collaboratively creating out design foundations, and helping clients build design systems, we've not formally dubbed it 'Design Engineering' till now.
We're going to continue to utilise this role on future projects, monitoring to see how it improves the overall design process.