<div dir="ltr"><div>Dear Erlang community,</div><div><br></div><div>This is my first email to the mailing list. I apologize in advance if this is odd or off-topic.</div><div><br></div><div>Coming from an object-oriented and data-centric background, I have cognitive difficulties when it comes to conceptualizing, thinking about and designing systems consisting of modules, processes and key-value data stores.</div><div><br></div><div>My brain reverts to thinking about classes, objects, inheritance trees, encapsulation and SQL-style relational data models. I'm afraid this could lead to unidiomatic Erlang system architectures and implementations, which would be undesirable.</div><div><br></div><div>Here are some of the essential complexities I have difficulties grasping:<br><br></div><div>A) Identifying discrete modules and processes and finding good names for them.</div><div>B) Appointing supervisor and worker modules; defining process hierarchies.</div><div>C) Deciding which processes should communicate with each other and how.</div><div>D) Designing a sensible persistent data model with Mnesia or other NoSQL data models (e.g. using CouchDB).</div><div>E) Deciding which processes should read and write persistent data records.</div><div>F) Incorporating global modules/"shared facilities" like event handlers, loggers, etc.</div><div>G) Visualizing the system architecture, processes and communication lines; what kind of graphics to use.</div><div>H) Organizing source code files into separate projects and directory structures.</div><div><br></div><div>Questions:</div><div><br>1) How do you unlearn "bad habits" from object-oriented way of thinking?</div><div>2) How do you think and reason about process-centric systems designs?<br>3) When designing a new system, how do you approach the above activities?</div><div><br></div><div>I would appreciate any practical tips, examples, "mind hacks" and resources that might help.</div><div><br></div><div>Kind regards,</div><div><br></div><div>Leif Eric Fredheim</div></div>