It's Time for a DevTools for Designers
uxdesign.cc
uxdesign.cc
But these are the best parts of the web! As much as designers want to believe it, a web app isn't actually a series of pictures. There are far more possibilities than with paper, and you remove all of those possibilities when you insist on designing like it's paper.
Disclaimer: I am a designer who codes.
I am sick and tired of designers who are mostly glorified pixel pushers that throw together something pretty, but give no thought to edge cases or application states that force their designs into becoming ugly or having a poor interaction, or just becoming downright unusable, all because they rely on shallow and antiquated schools of thought that were born out of the paper and magazine media industries. Pretty, but rigid designs.
I love working with designers who know they have no idea how to code, admit to having no idea how to code, but persistently work with the developers to ensure a smooth hand off of designed assets. Everyone's job is easier when they attempt to understand the other team member's job and tasks as well. I don't expect everyone to understand how to code but I don't think anybody likes working with someone who makes their job harder.
Perhaps that's because "designer" is just a label that anybody can use, as opposed to e.g. an "MSc industrial design" which is someone with proper education.
For the former though, I actually wish more designers had better knowledge of the "shallow and antiquated schools of thought" from the print world. A lot of that was born out of decades of iteration, and many of the toys that the web gives us aren't actually very useful for the kinds of content that many of them are tasked with publishing.
You're ignoring the other aspects of design; research, testing, etc. Just because I don't code doesn't mean I don't understand the ramification of what I put down on 'paper'
I have coded in the past but I chose to let that skill drop as it takes practice and time.
By example, here's an overview of my methodologies. In fact, I call out how I can save coding time by iterating ahead of the dev.
A designer needs to understand and work with their medium and as long as they keep trying to represent the web (where their designs will be shrunk, enlarged, reflowed, include a time dimension and at any point entire elements can appear and disappear as a result of interactions) as a bunch of static 2D pictures they're working against their medium and are basically out of date. This was kind of understandable in the 90s when the concept of designing for the www was becoming mainstream. Around that time I was expecting it to take 5-10 years for the old generation of designers to fade out and for new people to arrive who would be trained and understand that print design isn't web design. I underestimated the problem, because that didn't happen.
It's now 2018 and I still regularly see job ads asking for developers who will create "pixel perfect PSD to HTML conversions". This is so wrong-headed.
I enjoyed the article, I remember rubbing sheets of Letraset transfer and literally cutting and pasting with a scalpel and Pritt Stick. The author is obviously clever and understanding of the current problems in web design. But I can't help thinking the main question the article asks is similar to "why is there still no point and click software with which I can write a high-quality novel?" or "why can't my beautiful rendering of a car be output as a working vehicle"
I'm not sure if we've actually moved away from this or are moving more toward it. It used to be somewhat expected that a site should be functional without css (by putting the core content at the top), javascript and images but no one designs for that anymore. Half the buttons on the modern web are meaningless without a font served from a CDN.
And now we're moving toward a web built on canvas + web assembly, our user agents will have less control than ever. Maybe we can even cut out the middle men and render the psd directly.
I know you're making a bit of a slight, but I won't kid you that publishers—frustrated by the fact that certain interactive features and desired visual structures require an understanding of the platform and code (even if they just have to hire people who -do-)—have started some move back to using print-version PDF's served to applications like Texture (recently purchased by Apple). Even with any compression or download-size problems that might come along with it. The art teams and editors are all very happy to keep doing the same process they've been doing for ~25 years, after having another technological progression dangling in front of them. If they could just take the PSD, stick it in a black-box folder and have it come out in their publication on every platform they output to... I think they might dance in the streets. Or start drinking earlier.
Am a programmer who has worked with first-hand with such publications. And now doesn't.
Shameless plug: http://h5mag.com/
(I'm just a friend of the founder of h5mag, and would love to know what isn't DevTools'y about h5mag, from a developers perspective. Disclaimer: I'm a developer...)
You need a language and a metaphor for those items too.
Hell the very article linked to irks me because of the persistent bars (so typical of Medium.com derived sites) that cramp the actual article area.
But even worse is sites like the new Reddit, that tries to behave more like a mobile app than a document.
That's why what the author wants is impossible. Everybody tried to make the perfect design Tool for web content starting back from Frontpage, it just never worked, not even once.
There's so much invisible pieces in web which are not related to the design. Does the markup makes sense? How does the design integrate with the features (web isn't static print at all). How does the code renders on non-standard screen sizes? Is the code generated maintainable and readable for future use? Is there a right balance between design and loading time?
The core issue is that if you would provide all the features in a software that the code provides, it would be more complicated than learning coding itself. That's also why nothing replaced a text-editor to code after all these years. If you would invent something to replace it, it would be more complicated than directly learning to code.
After using a lot of different dev tools, I disagree. There are orders of magnitude easier environments than others.
Have you ever used anything like Flash Designer? Because that was better than using a text editor for making flash programs. There are plenty of design tools in existence. It's just that the web ones never caught on in mass.
The problem is that it is difficult to serve both purposes - ease for content authors isn't the same UX as ease for designers. And the effort to write good underlying code no matter what insanity the users do is a hard problem. I don't feel that it is an impossible task... just a hard one, and there isn't enough business need for such a tool that anyone has made a go of it.
Hailing from 1995, Flash (nee Future Splash) was a dev tool for designers. Design, animate, optionally code, then ship to production on any device. For that connection between design and code [and the imaginativeness, the creative empowerment!] there's still a big ol' Flash-shaped hole in the world. [1]
More recently, in the game industry, Unity brought together design and code in a compelling way — by integrating existing tools. E.g. do your 3D modeling in Maya, do your coding in Visual Studio; find a common workflow to design and code together for any platform through Unity. This has worked well enough for Unity to capture > 50% market share in the game industry over the course of the last ~decade.
The key to this problem is a workflow-unifying tool that 1.) enables designers and developers to create software together through comfortable + familiar tools 2.) ships that software to every device
Like Unity. Like Flash. It's been done before.
[1] I'm passionate enough about this subject that I've dedicated my career to it. I'm on the Haiku team (YC W18) and we've taken a lot of inspiration from Flash, Unity, and modern software practices to build a cross-platform solution that allows designers and developers to create software together. https://www.haiku.ai/
EDIT - took a look at Haiku, looks great!
I do not long for bygone days.
People may ignore it cause it's not "serious", but gaming in all its forms is a huge chunk of computing and it's only going to get bigger.
Smartphones are taking over the roles previously held by consoles and before them by PCs, as the foremost gaming platform. And that was something that blindsided people at first, because everybody focuses on the "serious" use cases.
Ignore gaming at your own peril :)
This game is built in HTML5 and is even on Steam, and is free. It's quite impressive. (gets overloaded on multiplayer sometimes, lag and such)
Average web page size has increased dramatically over the last decade [1][2], suggesting "massive sites" are more of a today-problem than a bygone one.
I understand "Flash" was the trigger-word here, and it is for a lot of people. "Flash Player" the consumer experience was fundamentally different from "Flash," the creation environment. Flash the "dev tool for designers" was the baby thrown out with the bath water.
[1] https://www.keycdn.com/support/the-growth-of-web-page-size/ [2] https://www.yottaa.com/a-brief-history-of-web-page-size/
During flashes heyday though virtually everyone was effected. Almost everyone had a slow connection and we pushed slow flashy crap out anyway. Who were we designing experiences for?
Our animation engine IS a UI engine, and we decided to ship an "interactive animation builder" as its own thing. If you can make any pixel render any value at any time, you can express any UI. Component composition, layouts, form controls, and more are coming soon.
Don't think of it as code, or engineering. Get over the mental block. It's not more complicated than learning Photoshop or Illustrator. It's just a different interface. One that gives you total control. Where you can build things that actually work, and aren't just static representations. If you do web design, learn to work with the final medium. Otherwise, what are you really doing?
(..from a designer and engineer.)
No ifs, &&’s, || but()’s about it.
I used to think some people are just dummies. But it really comes down to some people preferring workflow with little abstraction between action, mental model, outcome.
So even though “highlight text, click bold, see bold” and “type <b> and </b> around text, save, refresh browser, see bold” are really similar; the gap with switching tools and having to mentally model what will happen is more compatible with some people’s preference than others.
Designers can do that in PowerPoint for presentations or mockups.
There is also Adobe Edge for the web and theme designers like Divi in Wordpress.
> HTML + CSS is the best design tool you could learn.
The problem for designers is that you're asking them to mentally translate from a medium they're good at (visual) to a textual medium. But we've had GUI tools for making visual stuff for several decades now.
The web is behind on this front, even though companies have tried to make things like Dreamweaver, Flash Designer, Frontpage and Edge. With gaming, you have Unity. A lot of desktop software has layout managers and visual tooling.
It's kind of silly to expect designers to want to work with a textual format in 2018. Smalltalk came out in the 70s.
The challenges for developing software that would let someone who doesn't know HTML/CSS produce HTML/CSS seem high. In the "drag and drop interface" did that drag mean that the column should be 60px smaller? 10% smaller? 1.21rem smaller? Should the font get smaller when a username is longer than 15 characters, should the column get bigger, or should it overflow to the next line? Is there custom menu interactivity at different breakpoints, or can I just let Bootstrap do its magic?
That said, Sketch or Figma plus an exporter gets wonderfully close to what the author is talking about. And as a developer, I appreciate being handed imperfect HTML and CSS over being handed a picture of a website. At least with the former, I can copy and paste into the appropriate location, or throw out that which my judgement decides is counterproductive or unnecessary.
So I don't believe that this DesignTools utility needs to be perfect from the get-go, or address most/all of the edge cases that will come up during development. It just needs to decrease the cognitive workload that developers take on during the "PSD >> application/website" process.
Designers > GUI DevTools > Canned Solutions
Designers > Coder/Designers > Coders > Any Solution
Designer/Coders > Any Solution
Designer/Coders > GUI DevTools > Canned Solutions
etc...
You have to make a compromise somewhere, either with skilled people or tooling.I had a friend work with a client using a Squarespace site, and his client asked "Can we put a red circle ad in the top right corner?"
His reply was "Maybe". If they were using a non-canned solution, the answer would be "yes".
> "We deliver all of your static content (html, js, images, etc.) over a secure SSL connection and serve it on a CDN. Firebase Hosting is for hosting static assets. Firebase currently doesn't offer any way to execute your code on Firebase's servers."
In the olden days, blogger.com used to have this feature so you could self host. They ditched this in I think 2009 so google could get deeper data on all those blogs users.
I've never been able to play around with Sketch because it's Mac only. Every browser-based, UI design tool that I've ever played with has been so klunky, or non-intuitive that I just gave up after a couple minutes.
I'd love to have a nice prototyping tool using Bootstrap 4 or Material that has round-tripping like the old-school IDEs used to have.
It's not. It's a page layout. But websites and apps aren't pages, they're dynamic systems built from interactive components with multiple states and screen sizes.
All visual web builders do is replicate traditional drawing tools, but output to HTML/CSS rather than Postscript or bitmaps. This is not enough, except for the most basic of brochure sites.
There's still a massive gap between designs and working code. Some things that are easy to do in Sketch are tough in code and vice versa - it's too easy to do things that become problems later. And because it's static images, it's not easy to show live data or interactions.
Prototyping tools like Framer and Flinto can help here, but again, it's never a true representation of what can actually be done in code.
For both layout and interaction, the developer has to recreate something that's already been created - it's an inefficient process, and one that go wrong unless the design team thoroughly understands the systems they're designing for and can know the consequences of their design decisions.
I've seen it happen many times where developers struggle to implement something that the designer did quickly without really thinking about. Not the designer's fault - just falling down the gap between design tools and medium. And not enough collaboration between the teams.
There is some really cool stuff on the horizon however. React, and the move towards component-based design and development is making this possible. But it's early days.
Supernova Studio [0] is an interesting start, along with Alva [1] and AirBnb's Lona[2].
[0] https://supernova.studio [1] https://meetalva.io [2] https://github.com/airbnb/Lona
I recently decided to give Webflow a try after a good friend, who does happen to be a front-end dev (and quite good), told me how cool he thought it was.
He wasn't wrong. Yes, you have to pay to really do anything with your creation, but I think it might be worth it (if you're a designer who doesn't want to learn to code). I was extremely impressed with how quickly I could export my assets and various measurements from Sketch and lay everything out in Webflow, especially when it was time to build the various breakpoints and add some animations.
What would have normally taken me a few days (over the course of a few sessions), instead took me 2-3 hours, tops.
More importantly I used flexbox for much of the page, which is something I hadn't touched before. I've of course read about it and have a basic understand of how it works, but I'd have spent A LOT of time getting that aspect of it right had I been coding from scratch.
The best part was, at least from what I could tell and based on their claims, all of this would have exported to clean code worthy of a production site. Pretty cool.
So, as the author mentions, Webflow is very interesting. It's just not exactly practical because of the way it's tied to their CMS and hosting platform. If you're only really building marketing sites for clients who need basic hosting anyway, it might be perfect for you, but outside of that I can't imagine where I'd use it. Certainly not on a product team, but it's still worth playing around with on the free plan.
There are plenty of very smart people laboring away to make this happen, but as it turns out, it's not that easy.
For example starting with the standard CRM and invoicing apps and going to more complex apps for inventory management, product & project management - virtually any kind of database software can be built without writing code.
I’m skeptical though as I lived through the 90s 4gl database software for PCs like Clarion, FoxPro, Access and others that promised the sane thing but required lots of coding for the final 10% needed to go live.
What worries me about a tool that outputs html + css is then having to take that markup and integrate it with whatever client side framework or server side template engine so that its consistent with the rest of the code base, follows set code and style standards, is fully responsive and adheres to whatever arbitrary standards are set by the dev team.
I just don't have a lot of faith that a tool can be flexible enough to output markup that can then be used effectively. I imagine a developer will need to massage it into place in order to get it to conform well and by that point it might have just been easier for a competent web developer to build it from scratch. For prototyping or building out functional mock ups, it could be quite useful, but if the end goal is to hand a developer some markup and stylesheets and then let them build out the business logic, then things could get messy pretty quickly.
It's a good dream though and I hope that one day we can let designers do more of the view layer work but I'm cautiously optimistic.
Anyways, I'm a strong believer that design and prototyping should be firewalled off from production. Even when the assets are transferrable, the iteration speed demanded by the design process means they'll necessarily lack the polish of production assets.
Sketch -> Zeplin -> Storybook (React Component)
Works like a charm! Developers are super happy and productivity increased by three.
Ultimately I found that Zeplin doesn't replace the need to have conversations about most aspects of a design; and whilst it can provide value in some cases, that scope of that value tends to be vastly overstated. If you know that your design system uses a base unit of 8 pixels, you can eyeball most dimensions up to about 8 units, and guess pretty successfully above that.
Until that point, we need tools that output real applications in ( to start with ) react that allow real time collaboration between design, engineering, qa, product, and project/execs/stakeholders.
Pagedraw is a tool that converts Sketch or Figma files into the HTML and CSS of React render functions.
The responsive design system is really intuitive as well, and is easier to reason about than regular css techniques.
The code markup that comes out is.. quite messy, but it made me realize the potential of design tooling that could completely take care of the work around html and css for an individual component (for me, they take at least 2x time compared to JS for some types of components)
It kinda goes against the rigor of producing lean code, and does away with expertise, but it’s definitey a version of the future: designers could output a bundle that was a packaged responsive UI component that exposed a JS API
Look at every website you've built. The frontend is made possible only by functions. You may call them React components, or Vue templates. You may even have your own view library. But they all boil down to the characteristics of simple functions:
As in, they are parametric, they compose, they recurse, and, most importantly in visual design, they do NOT match 1-1 with HTML nodes. Let me qualify:
Look at this simple <Button> component (defined in React for example):
+----------------+
| | <--- div
| {children} |
| |
+----------------+
The component not only produces the surrounding <div>, it also accepts an instance of another component that it then places inside that div: const Button = ({children}) => <div class="button">{children}</div>
The <Button> component does not match 1-1 with the number of HTML nodes it produces. That's how you build abstractions – it's why you can re-use this button in different situations without changing its source. And, you do the same thing for other reusable piece of your project. That's how you keep the complexity of your frontend manageable.In visual design tools however, these abstractions aren't possible. What you get to work with are layers. Every 'thing' on the screen is made of a layer, sometimes more than one layer. Every 'thing' you want to put on the screen will make your hierarchy at least linearly more complex. That is the opposite of what programmers have, where they can create hundreds of 'things' with the ease of controlling just a few 'things'.
The most that visual design tools have done to manage this complexity so far, is a feature known as Symbols/Components as it's named in Sketch/Figma. It helps, but it doesn't give you anywhere near the power of functions. It's not parametric, it hardly composes, and it doesn't recurse. Also, you can't create the above <Button> component with it.
Now, why haven't design tools given us something as powerful as functions (or React/Vue components)? Because functions have complexities of their own, eg. type annotations, or runtime errors, just to name a few. Can you imagine having to fix runtime errors when you're in the zone playing with shapes and colors? I certainly can't.
This is all not to say that it's impossible to make such a powerful design tool. It is possible. It's just harder. You gotta rethink the whole thing from the ground up. But there are tons of low hanging fruits in this growing industry. You can take Sketch's UX and add animation/multiplayer/history to it. People want that. So it's easier to invest on those and get rapid adoption rather than invent something completely new and convince people to jump ships.
--
ps. We're building such a tool. We call it TheaterJS. No online demos yet, but we'll have a private beta soon. Hit me at aria@theaterjs.com if you want to know more :)
I occasionally use MS expression blend. It’s a visual design tool, yet it’s quite good at working with styles, control templates, data templates.
These are XAML markup equivalents of functions. They don’t match 1-to-1 to visual elements, and you can compose them; even recursively if you want to, see e.g. HierarchicalDataTemplate.
HTML doesn’t have templates, but there’re third-party libraries implementing them on top.
IMO the main reason why people still code web design is legacy: until recently, clients were too slow, different browsers were less compatible, i.e. coding was the only viable option to ensure acceptable quality results.
So is the appeal of a lean, semantically correct, fast-loading page.
I really miss those instead of writing tedious bootstrap boilerplates.
It's very easy to fall back on entrenched opinions and unhelpful developer-vs-designer stereotypes, and see any call for a visual tool to be one to remove or demote code from the process altogether. That is absolutely not what the article states or is about.
I'm adamantly against canned solutions that make things easier for designers but harder for developers; rather, I want something that merges the power of code-centric tools with the speed and approachability of visual tools.
Basically: Visual Studio Code + DevTools + Codepen + a browser rendering engine + the stuff we use Gulp / Grunt / Browsersync / Sass etc for on the command-line, but bundled into something useful for non-developers - with added GUI deliciousness that would obey good code rules.
Rather than just 'draw anywhere' and getting all that FrontPage-y style rule nightmare, it might be more 'define a grid, then draw a div into a grid cell, then either create or apply a class,' etc.
Interaction is definitely supposed to be part of this (something I did not go into depth with in the article) - defining states for sure, as well as animation.
One use context is creating a component library / pattern library that will be consumed by several different user types. For instance, Material.io or the Salesforce Lightning Design System, IBM's Carbon Design System, etc, intended for producing web applications.
Designers need a style guide, front-end developers or 'designer-devs' want to see live examples with code snippets, other kinds of developers might want to know about data sources and where the variables are used in a particular component.
A visual tool should make it very easy to both create and edit such components, and maybe add a bit of metadata like 'this component is recommended for use as the nav' and 'it has these dependencies' - so you can more easily export it into something like Clearleft's Fractal tool, etc. In the long run, such metadata might let an opinionated tool automatically snap things into place / recommended source order to guide beginners, but always modifiable by developers.
And similarly, being able to open a library of components, see a 'molecule' like a nav bar, then drill down to atomic components like ULs, buttons, see what the data placeholders are, etc - preferably also with some human-readable annotations.
(Obviously I am handwaving the complexity of actually doing something like this, but conceptually, it _ought_ to be doable.)
By its nature, I would want this kind of tool to promote understanding of CSS inheritance and modularity, so that it would lend itself to creating reusable symbol-objects, much as we are used to in Adobe apps and Sketch, and previsualize the changes to the cascade, or get warnings that "x other classes depend on this, are you sure?"
For instance, InDesign style palettes can roughly map onto text and object styles - your basic H1-H6, standard HTML styled elements. The missing part in Adobe is scoped/modified or additive styles, but that's just a conceptual step forward. In a code context, an "H1, but inside a product grid" style can decompose to BEM classes, and the app or tool should make this clear as we already do with Inspector computed views.
So just to clarify, what this really should do is help visual designers make the leap into becoming hybrid designer-developers (and vice versa) but if someone simply wants to use it to sketch things out freehand, regardless of end use or code quality, it should help them do that, albeit in an opinionated way under the covers.
As I allude to in the article, we don't ask visual designers to write raw PostScript. We depend on the tools we use to author it correctly when we draw boxes or type text into our documents; the Web has added robustness. I'm not that worried about it producing spaghetti code.
Any visual tool should produce at least well-structured, readable code; lean towards making sure it's standards-compliant / uses best practices; but also is flexible enough to let you author it in any way that is suitable for your needs, so you're not trapped in canned layouts or overly-prescriptive boundaries.
No they don't , almost half a century after the creation of the most influential software technology , Smalltalk. Development tools still largely ignore designers mainly because designers try to stay as far away from coders as possible and coders as far away they can from designers.
These are two cultures that are founded on polar opposite ideals and principles.
A browser, in particular, is from a designer perspective nothing more than an abomination and is laughable to compare web apps and web technologies with specialized designers tools like Photoshop, Illustrator, Blender, Zbrush, Maya, 3DS Max etc. with the ugliness of Javascript , CSS, HTML and XML and is no coincidence that those technologies have so tiny presence on the web. Even WebGL which supposed to bring design and designers to web browsers is pretty much an abandonware.
For now, we can only compromise with modern IDEs that are somewhat designer-friendly like Pharo, Delphi, Squeak etc. and maybe we designers wait for another half century until the so-called "IDEs" catch one and another century for web technologies to move to HTML12 which may or may not be at last designer-friendly.
Especially when we take into account the blazing fast evolution of designer tools (which drive also the hardware evolution mostly through games) and the glacial pace of the evolution of software development tools stuck to the curse of backward compatibility, those two worlds continue to move apart with an accelerating rate.
In the meantime, the gap (or more likely the abyss) between those two cultures will remain. Designers avoiding coding like the plague, coder being mesmerized by their "readable code" completely oblivious to what makes a design good, kneeling before the glory of the holey grail know also as "not reinventing the wheel" or "not fixing what is not broken".
It is sad that 30 years ago designers and coders were so close together as communities, the closest they ever been was during the 80s with the introduction of Amiga 500 which gave birth to some of the most popular design tools but those days are long past.
It's funny because I joined a "coders and designers" facebook group out of curiosity and after 2 years the only design related talk have been a mockery about designers and a couple of mention of design tools from the rare breed of game developers that tend of frequent the group. Can't say I am surprised.
But hey if coders want to continue to believe that coding is an art and that design is an essential part of software development, who am I to judge. I am also delusional at times. None is perfect.
Designers have a bias in favor of form (brand identity), developers a bias in favor of function (usefulness, productivity). That's why you have those conflicts between devs and designers over the amount of whitespace and functionality within the viewport, and possible results that can be either based on feature overload and bad UX, or that miss crucial functionality.
A way to get both on the same page is information architecture that is informed by generative UX research and positioning. You come up with a content, data model and schema that informs representational and functional parts of your app. Basically a parent discipline for designers and coders within an organization, roles/teams that are made up of designers and coders. This helps to limit the functionality to what you really need, and gives the designers a frame of reference for their prototypes.