I know everyone is probably familiar with UML for designing OO systems.
But how do you guys draw out or dream up Elixir/OTP systems?
I know everyone is probably familiar with UML for designing OO systems.
But how do you guys draw out or dream up Elixir/OTP systems?
Sequence diagrams were always the most useful of UML diagrams, IMHO. Those apply to message passing between BEAM processes just fine when diagrams are necessary. IIRC there’s even a tool in the core erlang/OTP runtime that will generate them.
Good call on the Sequence Diagrams!
Also, I think when first making a Proof of Concept, I’d probably create all of the various modules/servers and then have them pass text strings back and forth saying what they’re supposed to do. Then if those strings passing back and forth make sense, I’d add the actual processing work afterwards.
Yes, it is seq_trace
, however it is more like debugging tool rather than design tool. It allows you to trace real system and then display what messages were passed between processes and in what order. So it would allow you to validate real implementation against design document.
Courtesy of Design and Build Great Web APIs I came across https://www.websequencediagrams.com/
You input a text representation like
home->+WIP: startOnboarding(identifier)
WIP->+customerData: collectCustomerData(identifier, givenName, familyName, email, telephone, text)
customerData-->-WIP: saveToWIP(identifier, givenName, familyName, email, telephone, text)
WIP->+accountData: collectAccountData(identifier, discount, creditLimit)
accountData-->-WIP: saveToWIP(identifier, discount, creditLimit)
WIP->+activityData: collectActivityData(identifier, salesRepId, callDate)
activityData-->-WIP: saveToWIP(identifier, salesRepId, callDate)
WIP->+finalizeWIP: completeOnBoarding(identifier)
finalizeWIP-->-home: goHome
WIP->+cancelWIP: abandonOnBoarding(identifier)
cancelWIP-->-home: goHome
that gets rendered as a sequence diagram.
In many cases that might be good enough to visualize the chatter between processes for a particular scenario.
Oh I just remembered the newish Ballerina language as well https://v1-0.ballerina.io/
Outputting sequence diagrams is part of the language itself
When needed I use PlantUML and/or GraphViz and generate these diagrams:
mix xref graph --format dot && dot -Tsvg -O xref_graph.dot
pg_graph
I keep it old school and go with a whiteboard or pen / paper. Basically tools that promote quick iteration without getting in your way.