Sketch.systems
sketch.systems
sketch.systems
Definitely giving this a go, thanks for sharing!
One thing that tripped me up was the name. I use Sketch[1] quite a lot and the reason I clicked the headline was I immediately though maybe this was something new around implementing design systems using Sketch. This tool is much more interesting to me, but still, thought I should mention it.
Loving the simplicity of the design in this little tool. It'll be interesting to see whether it works beyond simple experiences. The syntax makes me think it ought to be composable, like having larger state charts composed of smaller components, pluggable via open ended transitions either by omitting the target state or having some special syntax saying "plug in your state here".
Anyway, definitely going to give this a go, looks great!
--
It doesn't get any better as you scroll either. Everything is animated and changes while you're trying to read it.
I tried to give them feedback through there "Contact Us" form and it's broken.
-----
Sketch. If you read this thread, please take this feedback seriously. It's shocking how unusable your marketing website is.
This would be useful for more systems than just graphical user interfaces and frontend development.
Backend systems, distributed systems, stateful protocols and microservices are complicated and hard to think about. Raft for example.
I am working on a state machine formulation that is text based and I have an idea which I think would prevent entire classes of bugs.
The idea is that we can see the state machine as a graph and check reachability of states between state machines. If the code literally never fires the event that would cause the reachability of the next state, that's a bug.
The number of times I've been writing some code that uses threads or distributed systems and there is absence of behaviour, it's tricky to debug absence of behaviour.
I've always wanted to "see the future" from my IDE to see what state my code puts everything in.
One of my ideas is the idea of value flow tracing to detect steady state systems, systems that always make forward progress.
https://www.hillelwayne.com/tags/formal-methods/
Check out the sub-topic tags for more. Or just skim his blog.
Added bonus, it can be formally verified using Alloy [8].
Another similar FSM-based UI/UX tools are XState[3], XState Visualizer[4], and Stately.ai[5] powered by XState.
But Sketch.systems seems to be easier for fast prototyping using plain text format (what they mistakenly calling "markdown"). While XState generates a JS code, which can be used in React apps.
I guess it's possible to convert Sketch.systems format into XState, or other similar ones, after finishing prototyping and moving to implementation/debugging.
Sketch.systems seems to be much more lightweight, which is important for fast prototyping, and lowering barrier to entry for non-tech people.
Another relevant method is Event Modeling[6], which is somewhat in the middle between Breadboading and EventStorming[7]. Its main advantage is that checks the Information Completeness of the entire flow (both frontend and backend, including external services/systems, not just UI/UX), and that it can map 1:1 to CQRS/ES software design.
--
[1] https://basecamp.com/shapeup/1.3-chapter-04#breadboarding
[2] https://www.wisdom.weizmann.ac.il/~harel/papers/Statecharts....
[6] https://eventmodeling.org/posts/what-is-event-modeling/
[7] https://www.eventstorming.com/
[8] Formally specifying UI https://www.hillelwayne.com/formally-specifying-uis/
Sketch.systems: Has an edge at prototyping UX and understanding the state changes (maybe even) user flows.
XState: Lets you build a working state machine in JS using the definition (and visualize it, of course)
The team has awesome plans for the visualizer and V5 is around the corner which simplifies and generally improves the system overall, hopefully making it easier to learn but also to improve the visualizer.
I might try this, to see if it immediately solves a problem of helping think through interfaces and workflows. Looks promising, but these kinds of tools can get complicated quickly.
We built https://www.teampando.com out of a similar love for state-based thinking. We turn natural language requirements into state machines, have a Figma plugin to connect designs to states (didn't realize sketch.systems had embeds that can support that - very cool!), and can export XState state charts.
State-based thinking is already helpful just to get your thoughts organized as you're building something but it's super helpful to give everyone (eng and non-eng) on the team something concrete to talk about and play with.
I wrote a couple of articles about better UX tools, went into a protype for text command based wireframing:
https://medium.com/proof-of-concept/creating-a-true-ux-tool-...
The other articles [1] go more into this, but it includes ideas about auto-generating flow-charts, easily export your UX source code, generate working front-end, etc.
I once presented this to ~30 UX designers, and they liked the general idea of a more holistic UX tool that does not take the wireframe as the central piece, but the project as a whole. But when I started showing text-commands as a prototype to show how different interfaces could be built for ux source code, I got nothing but blank stares.. haha, they did not want to look at text representing elements.
So while I agree with Sketch that there is value in UX source code, and the tools they have created seem great. I hope they integrate it in their other tools, so you can output the same source code via a GUI.
And then someone could write a script that converts my UX source code, from my mobile wireframing app TinyUX [2] with theirs :D.
[1] First article of series: "A True UX tool" https://medium.com/@JuliusHuijnk/a-true-ux-tool-9e892b0dc1a5)
[2] Wireframing on your phone by tapping icons. Hope to grow that into a more refined and 'holistic' UX tool: https://tinyux.app
That predates your article by roughly 20yrs
The goal would be to figure out a way to capture and manage UX projects in a way that you are not bound by a single tool. So you can import/export parts to other tools in your chain.
The video positions this as a tool for designing around edge-cases and offloading work from the developer to the designer, but to me, the main difficulty in development are the edge-cases: "What are the possible errors that can occur when I call this API?", "What would be the most fitting design for the realities of our architecture?" It's as much the developer's job to solve them as it is the designer's.
The example, "What happens if the user backgrounds the app?", is a question that inherently must be solved through back-and-forth between the developer and the designer, because the designer might not understand the realities of the operating system (see iOS multitasking). It's easy to point to loading states or network errors as example edge cases, because they're well-known. But usually, the developer will be the first to discover such problems.
Some of the tools I like haven’t significantly changed for me in years. There sometimes is a “good enough” to software that I don’t need a developer to work on it endlessly for the rest of their life.
But I will say that my interest in this, it was dashed after your comment. This looks like a tool is complex enough to probably not be perfect.
I fundamentally disagree with this logic. Talk to any designer and they will tell you "to build any product, you must first build a design system."
This is an overwrought approach that I don't believe will stand the test of time.
I swear this is a campaign for Figma so more designers depend on their software to do their jobs
The URL in the Wayne’s Formally specifying UI blog post link isn't resolving, should be https://www.hillelwayne.com/formally-specifying-uis/
Also, what language/framework is that in the code samples?
> Yes, there are many!
So the justification for confusingly reusing the name of an existing product in the same space is just "there exists many other products with the same name"? Is it just me or does this not make any sense?
If you want to go straight to the source, David Harel's "Statecharts: A Visual Formalism for Complex Systems" published in 1987 is the original paper: https://www.inf.ed.ac.uk/teaching/courses/seoc/2005_2006/res...
I'm curious what the use case for the Figma connection is. If you're using Figma for design, wouldn't you use the built in protoyping tools?