What do you use to conceptually design an Elixir system/app?

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?

1 Like

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.

3 Likes

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.

1 Like

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.

4 Likes

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:

3 Likes

I keep it old school and go with a whiteboard or pen / paper. Basically tools that promote quick iteration without getting in your way.