Elixir and BPM (business process management)

bpmn

#1

Just reading an interesting document wherein elixir takes an important place
http://arxiv.org/pdf/1601.05976.pdf . BPM (business process management), for those who never heard of it, is a sort of Model Driven Development; in BPM you model a workflow / process mostly visual and use this model for execution. So the process that was hidden in your code becomes visible and maintainable for business specialists (I mean specialists that do not code). It can be used together with other MDD parts like BRM (business rules management). Here the rules are extracted out of the code. Even the screen / form builder where you visually compose your forms is a form of MDD. You can choose to create executable models (for example an xml or json that can be interpreted by your code), generate code based on your model or choose a mix. I prefer executable models. Here a company that did a lot of research which names key advantages: https://www.mendix.com/blog/the-power-of-mendix/ .
The paper about bpm/elixir only mentions code-generation, I would like to stress the preference for a model interpreter.
Some web-based MDD frameworks / libraries / tools would definately add to a compelling / competitive elixir development environment.


#2

About the writer Robert Singer of the document: http://www.robertsinger.eu/web/.
Surprising for me that there are no reactions on this post. A wildly interesting subject it seems to me, I think elixir would be ideal for a bpms.


#3

I am still reading through that paper but I really like the idea of Model-Driven Development (Architecture/Engineering/??) in general and using Elixir/OTP especially. It’s a fresh recipe of these technologies :slight_smile: I agree about model interpretation rather than code generation; that just makes plain sense.

Have you used MDD in production before? What kinds of processes were being executed? Did it improve communication and understanding among the team(s)?

EDIT: I finished reading the paper and it whet my appetite. Do you have any good videos or reading on this topic?


#4

I have never used a full blown BPMS in production, allas. Only small but nifty homegrown workflow design tools. The most advanced one was made in a company for life insurance software. Life insurance specialists could configure their products with the software and use them afterwards. The software was very succesfull and the small company (maybe 30 workers) was bought by their most important customer: a large dutch life insurance company (thousands of workers). I have no idea about improvements that have been made with this product, but you can easily find some things out for yourself with google. I’m sure BPM can be exploited succesfully in other markets also.
I have seen a full blown BPMS during a course of a week. It was savvion. An expensive product, but vast, impressive and “complete”. It was built with java. I’m sure a better version could be built with elixir or erlang. Most BPMS systems moreover need some client install, a webinterface would be preferable. There are at least some online BPMN 2.0 designers (a lot more than just a designer is needed in the UI for a comple BPMS). Bpmn.io (free) is in development, the demo (https://bpmn.io/ , “try online”) is of an old version I think. It is a very very incomplete designer. There are others, f.e. GoJS is not free has more possibilities.
I will search for a video / reading now.
Edit: the first two hits with “business process management” I found worthwile, but they might not satisfy you. These are very short intro’s that give an overview:
https://www.youtube.com/watch?v=XtvIU0ZCwjE
https://www.youtube.com/watch?v=_YXqnEXnnBk
To see the software in action you could look at f.e. some savvion demo’s on youtube or google for “best business process management software” or whatever, choose the tool that looks promising and try to find more info on it


#5

I saw those two videos too in my search. The first author is actually a brilliant presenter; she has some other BPM videos. And in the second video, one commenter keenly points out one of the most valuable pieces of the video:

The first rule of any technology used in a business is that automation applied to an efficient operation will magnify the efficiency. The second is that automation applied to an inefficient operation will magnify the inefficiency.
— Bill Gates


#6

Just an afterthought: I think all these “higher-level” talks are an analysis of some things that have evolved bottom-up. I don’t mean the analysis afterwards is unimportant, the ideas have to be organized and communicated clearly. But first there was chaos, and programmers like us, and then the earth appeared. :-))
Or were there some concurrent processes going on? Did they appear simultaneous? Ah, Aristotle on time and all those aporias! :slight_smile:


#7

This is an example of an bpmn diagram. The diagram is persisted as an BPMN 2.0 compliant XML file. I’m using the open-source package bpmn.io as modeler, so I don’t need a client-install. Only thing that I have to do now is write the elixir backend … :wink:


#8

Im curious, Why did you opt in to using BPMN when the article is about leveraging s-Bpm


#9

I did not want to build something like s-Bpm, just my own bpms, using bpmn2.0 and dmn1.1. In the end I had to find some things out myself, the article I refered to appeared not very helpful.


#10

small sidepath: bpmn can be used for orchestration of microservices
http://www.bpm-guide.de/2015/04/09/orchestration-using-bpmn-and-microservices/
more interesting articles: http://flowing.io/
Even more, Forrester about low code envs in common:
http://agilepoint.com/wp-content/uploads/Q2-2016-Forrester-Low-Code.pdf


#11

“BPMN is the most under appreciated technology in our field IMO.”
Hear who says it (see link). Likie likie! :wink:

(fyi I built a bpms - a bpmn and other dsl’s interpreter - using bpmn with an elixir backend, wip, but I have to make money with something less interesting now) :wink:
Search for keyword “bpm” on this forum to find more.

https://news.ycombinator.com/item?id=17506437


#12

There’s also a BPMN library in Erlang but not sure what it’s worth: https://github.com/synrc/bpe


#13

How does the elixir community prefer model long running business processes? I’m talking typical business processes like Approval/QA, Submission tracking, etc. or scenarios where you want a Status field to work with and users who work out of buckets or lists of these tasks/records of a state. From what I’ve observed there are a few options:

  • Classic CRUD: Relational database with some kind of Status/Stage enumerable field & state machine business logic around commands. This would probably reveal itself as a Phoenix/Ecto application running on Postgres.
  • CQS: Can be CRUD in the background, but with more domain specific Commands and further decoupled business logic processing. Maybe a GenServer or gen_statem with Structs/Maps to model the state where persistence to a database is only a minor implementation detail?
  • CQRS & EventSourcing: e.g. https://github.com/commanded/commanded

@StefanHoutzager How does BPMN or S-BPM fit into implementation patterns like above? Elixir being an Actor model language with great macro capabilities would suggest it’s a great fit, but I’ve not found very many resources for bridging the gap between this world of BPM, Pi-Calculus, the Actor Model, and Elixir. It’s a fascinating area, so it’s a bit surprising I haven’t found more discussion about it in the community. I’ve read the paper you linked in the other thread, but it’s still very speculative, are there any other resources you’d recommend?


#14

I have seen it before. I cannot conclude much from the description except that it (the documentation itself + at least the list of supported bpmn elements) is very incomplete. It might be a valuable starting point. It is not actively maintained.
It is not that hard to build a bpms yourself. Good modelers (browser-based) are available as open source.


#15

Answering tomorrow. The paper about S-BPM was not that interesting I concluded after writing some things myself.


#16

Someone who has written interesting, down to earth about DDD, µS, orchestration / the place of an orchestration engine & choreography, event driven architecture and more buzzwords is Bernd Rücker. See f.e. https://blog.bernd-ruecker.com/flowing-retail-demonstrating-aspects-of-microservices-events-and-their-flow-with-concrete-source-7f3abdd40e53 and associated links. Another interesting link is https://www.infoq.com/news/2018/07/complex-event-flows?utm_campaign=infoq_content&utm_source=twitter&utm_medium=feed&utm_term=architecture-design . Also worth a read: http://www.soa4u.co.uk/2018/02/is-bpm-dead-long-live-microservices.html
Netflix has an orchestrator also: techblog.netflix.com/2016/12/netflix-conductor-microservices.html
I think you can extract answers to your questions from these links, if you still have questions I’ll try to answer them.
Erlang and the languages built upon it’s VM are used to build massively scalable soft real-time systems with requirements on high availability, so they are a perfect fit for an orchestration engine. Indeed the actor model is a good fit. I have not found a use case for macro’s yet while building my bpms.


#17

As you can see again there is almost no interest. I will stay amazed. As punishment I will not open source my project, hahaha. But serious: it almost for sure would not be worth the effort.


#18

By saying “executable workflows in JSON or XML”, do you mean like interpreted in real time? That sounds awfully slow and inefficient…

I have stumbled upon one organization in my career that seriously loved workflows and flowcharts. They fought with IBM Rational and a few others that supposedly translated digital UML diagrams to code, about ~16 years ago, and never had any half-semblance of success. So in my case I guess I am conflating BPM(N) with these older tools which were only a way to sell extremely expensive consultancies without actually delivering any business value.

In terms of more formalized processes, I personally would compromise a bit by re-molding some of my older messy imperative code in Ruby, Go, Java and PHP to state machine implementations and would change them to event-sourced paradigm where it makes sense (in truth, almost everywhere actually). But going all the way to executable flowcharts… I get UML war veteran flashbacks.


As a generic copy-paste inspirational quote: do your own thing and don’t care what people think. If Einstein listened to his critics we would not have his amazing body of scientific work today!


#19

Interesting reaction. :wink: I would say try it out for yourself, concerning performance. All these sloppy, expensive and awful engines work that way. It has reasons that I don’t want to explain again and again.


#20

Well it’s about scaling and future-proofing IMO. I can try it on my pretty strong desktop PC and equally as powerful MBP and it will probably work lightning fast but what about when you integrate that software in a huge org that relies on it as the backbone of all their operations – CRM, accounting, ERP, logistics etc.?

I worked with SOAP and WSDL (and a few higher-level protocols that assembled them in bigger operations) at their dawn and I have to tell you, things go out of control very quickly and very badly.

So please don’t take this as an attack. I am very definitely less experienced than you but so far have not seen any good evidence that such systems are sustainable and that they fix more problems than they solve…