"Workflow" is such a loaded/broad/bifurcated term.
In this case we seem to be talking about "Scientific Computing Workflow" or some sort of data pipeline. (As opposed to some sort of "Enterprise" workflow)
Fully agree. It seems nobody understands it in the sense of Business Processes/Workflow modelling anymore and it is arbitrary used for "something to do".
Yes, "Workflow" has to be one of the most abused word in the industry.
People seem to use workflow for all of these things:
#1 Business process modeling and automating platforms - Camunda, BPMN, jBPM etc.
#2 Assembling together software functions (also called tasks, sometimes) for getting an output data - Airflow, Cadence, CWL is related too.
#3 Moving one entity (bug, document, deal) through different stages of a state machine, until the entity reaches an end state - Sharepoint workflow, Zoho Orchestly, Comala workflows
#4 Orchestrating several apps together for automating something, usually as reactions for events - Zapier
When developers talk about workflows, it's mostly about #2. When business people talk about workflows it's mostly about #1.
When managers/leads of a team talk about workflows it's mostly about #3.
We should accept that Workflow as a word is too ambiguous, and come up with what kind of workflow category the tool belongs to, before branding it as an "one stop solution for all things workflow".
Couldn't agree more. I do work with workflows (mostly #2 and #4), but in the beginning of my journey I had problems understanding what researchers were actually trying to tell me, and I always got confused. I suspect that they themselves do not fully understand how ambiguous this word can be..
“we seem to be talking about "Scientific Computing Workflow" or some sort of data pipeline”
So, more along the lines of https://en.wikipedia.org/wiki/Dataflow_programming. A good problem space to bring declarative/functional/logic/concatenative concepts and tools, IMO, as opposed to the ubiquitous “hit it with a rock” of the usual C* suspects. Be great to see real progress here, but my bullshit detector is immediately dialed to MAX.
The great problem with “workflow systems” is that they very easily disappear up their own ass: “Potemkin solutions” that solve every problem except the customer’s own. (See: https://thedailywtf.com/articles/The_Inner-Platform_Effect). “Enterprise workflows” in particular I think are just a way for indolent code monkeys to shirk learning how the business works for themselves. Looks all very impressive without ever solving shit.
..
FWIW I do think Alan Kay was onto something with his Nile strategy (https://news.ycombinator.com/item?id=10535364). Pity there wasn’t followthrough (bit of a mayfly, Kay). Ditto Iverson and APL, although APL’s sidelining was more down to a nascent Programming Profession redefining Programming™ to be what they do for users rather than what users (mathematicians in this case) do for themselves.
CWL is a declarative/functional language for describing how to execute command line tools (staging input files, mapping arguments, collecting outputs) and how to connect the outputs of one tool to the inputs of the next. It is HPC and cloud agnostic. The same workflow description can run on a laptop or on 1000 cloud compute nodes. Lots of people are already using it to solve their problems, for some examples see https://github.com/search?q=extension%3Acwl+cwlVersion
Quickly skimming the CWL User Guide, calling that a “language” is a huge stretch. Looks like writing a bunch of YAML config files which let you write more YAML files to construct a UNIX pipeline and run it.
In which case, why didn’t you just use bash?
Yeah, I know bash stinks. But this is not my fist rodeo* so I’m struggling here to see how CWL stinks less. See again: Inner-Platform Effect, Greenspun’s Tenth Rule.
--
* i.e. I already know how easily “workflow engines” go up their own arse because I’ve done it myself. And CWL fails the same sniff test. Not a good start.
This is a serious question, BTW. “Lots of people are using it” is testament neither to sound architecture nor practical need. Lots of people have joined MLMs; does that mean MLMs are good and needed? Or does it just mean lots people are easily seduced by layers and layers of makework and grift?
The only bit that sounds at all novel or interesting is the dispatcher; and even that is really just an expression of `<load_balancer> | ssh`. At which point, Unix Philosophy tells us we should implement <load_balancer> as a small simple single-purpose Unix command which can easily pipe to other Unix tools. Itch scratched; everyone can now go get on with their actual work.
So if that is the case, the precisely what problem is all CWL’s Castles-in-the-sky YAML crap actually solving, other than bored developers’ need to keep entertained? Especially when [from what I can tell] the project doesn’t even provide you a dispatcher component but instead tells everyone to take a spec and write their own.
How many wheels need to be reimplemented before someone involved declares it a pig in a poke? And how many more before the rest can accept this?
I'll play. CWL was designed for bioinformatics research first. We're using CWL for bioinformatics analysis, because as the "scientific workflow | data pipeline" grows (beyond 5-10 tools), bundling the execution and logical analysis together becomes difficult. If we can let researchers write just their analysis (which tools to run and what their dependencies are), and abstract the execution environment we can create more structured analysis that's portable and publishable, and also often quicker to run.
Bioinformatics software isn't perfectly written software, there are a number of weird behaviour that a simple unix pipe doesn't solve. There are engines that support CWL, and other existing engines have been adding CWL support.
I'm not saying that there aren't other frameworks out there for doing analysis, or that this is the best way but this is an option that IS working for researchers.
Edit: workflow -> scientific workflow | data pipeline
I don't know if I can change your mind, or if anyone else is reading this thread, but CWL was designed to solve a particular set of problems, if you don't have those problems, you might not need it, but it doesn't mean those problems don't exist.
> the project doesn’t even provide you a dispatcher component but instead tells everyone to take a spec and write their own.
Close...
Software that supports CWL are SaaS vendors, FOSS projects, and various HPC schedulers that all have their own incompatible data management and dispatch/scheduling systems. If you want to write an analysis that runs on more than one of these platforms, you need some abstraction for it. CWL is one such an abstraction.
This matters because maybe you've developed a research pipeline that integrates a bunch of different tools written in different languages and want to run it on somebody else's data, and you need to run it on their infrastructure because copying 12 terabytes of HIPAA-restricted data from their LSF cluster to your Google cloud instance isn't an option.
"Just use bash" is what people who adopt CWL are trying to get away from. It is nearly impossible to write portable parallel / distributed analysis in bash, and the result is brittle scripts with more coordination code than code that actually does scientific work. Because CWL is declarative, the CWL engine handles all the coordination, scheduling and data staging for your particular infrastructure.
You may not have any of these needs, but suggesting that we're just bored developers creating castles in the sky is really unhelpful.
We've used it and competing workflow management "languages" -- there are a few of them -- in our bioinformatic processing pipelines. "Sophisticated bad joke" is a pretty accurate description.
Which field? In the absence of any constraint, the choice of workflow management system is down to individual preferences.
Note that the goal of CWL is to be a standard workflow language not a workflow management system. That is, it is concerned purely by how to precisely describe a workflow, not by how it should be implemented which is the task of a workflow management system.
The diversity of workflow management systems starts to be recognized as an obstacle to re-use and reproducibility of scientific workflows. Having different systems implementing a standard language would help get around this issue. Several workflow management systems used in bioinformatics have or are implementing support for CWL.
Skimming the WDL “Quick Start Guide” (https://software.broadinstitute.org/wdl/documentation/quicks...) to get an overview, it’s like watching a snake eat its tail. You’d think a narrative in this problem space would at least have a clear beginning, middle, and end.
At least the Nextwave homepage (https://www.nextflow.io/) starts with a clean concrete written example, even if it does leave you to deduce its actual meaning for yourself.
Imagine a programming language except it also has to be valid YAML. Yeah. Now sprinkle some JavaScript in there just for good measure.
Look no further than their own hand-crafted examples (confusingly called "Episodes") for compelling arguments for why to NOT use Common Workflow Language.
The attempt to cleanly separate out workflow is nice in theory but an extremely leaky abstraction when it comes to real world operations for DAGs larger than 10s of nodes. You will end up with lots of code that will duplicate functionality that exists in a workflow engine just to have something common (e.g. notifications, database ingest, etc...) There are no operational concerns in CWL.
That’s my main issue with CWL. It’s a nice execution language, but not something I like to write an analysis pipeline in. Because it is YAML, using runtime logic is difficult (impossible?). I much rather use a pipeline tool that includes some flow control and ability to adapt to different arguments. Last I looked at CWL, this wasn’t the case.
After seeing the horror that was conditionals and flow control in Ant's build.xml format, I don't see anything based on a text file format working well...
CWL project co-founder here. It's funny, I have been trying to start a discussion of CWL on HN for years, obviously someone else had to do it.
The goal is to provide a way to describe dataflow processes that is highly portable, auditable, and reproducible. This is incredibly important in research, clinical, and regulatory domains where you need to be able to show how you came up with a result.
It's not a general purpose language on purpose, and operational concerns like notifications are the domain of specific implementations (engines).
I agree the syntax is horrible (and I designed most of it) but it also makes it easy to write programs that read and write CWL, enabling an ecosystem. For example, here is a transpiled languages that emits CWL:
Snakemake, CWL, WDL, Nextflow are used in bioinformatics workflows.
Just plain old bash seems to work just fine, though.
It is simple and gives you a lot of portability to HPC clusters and general purpose cloud. Not hardwiring to a configuration file and not using an, in practice, un-portable workflow language saves you a lot of pain.
A truly portable cloud/hpc module for python would be a good solution.
44 comments
[ 1.4 ms ] story [ 108 ms ] threadIn this case we seem to be talking about "Scientific Computing Workflow" or some sort of data pipeline. (As opposed to some sort of "Enterprise" workflow)
People seem to use workflow for all of these things:
#1 Business process modeling and automating platforms - Camunda, BPMN, jBPM etc.
#2 Assembling together software functions (also called tasks, sometimes) for getting an output data - Airflow, Cadence, CWL is related too.
#3 Moving one entity (bug, document, deal) through different stages of a state machine, until the entity reaches an end state - Sharepoint workflow, Zoho Orchestly, Comala workflows
#4 Orchestrating several apps together for automating something, usually as reactions for events - Zapier
When developers talk about workflows, it's mostly about #2. When business people talk about workflows it's mostly about #1. When managers/leads of a team talk about workflows it's mostly about #3.
We should accept that Workflow as a word is too ambiguous, and come up with what kind of workflow category the tool belongs to, before branding it as an "one stop solution for all things workflow".
So, more along the lines of https://en.wikipedia.org/wiki/Dataflow_programming. A good problem space to bring declarative/functional/logic/concatenative concepts and tools, IMO, as opposed to the ubiquitous “hit it with a rock” of the usual C* suspects. Be great to see real progress here, but my bullshit detector is immediately dialed to MAX.
The great problem with “workflow systems” is that they very easily disappear up their own ass: “Potemkin solutions” that solve every problem except the customer’s own. (See: https://thedailywtf.com/articles/The_Inner-Platform_Effect). “Enterprise workflows” in particular I think are just a way for indolent code monkeys to shirk learning how the business works for themselves. Looks all very impressive without ever solving shit.
..
FWIW I do think Alan Kay was onto something with his Nile strategy (https://news.ycombinator.com/item?id=10535364). Pity there wasn’t followthrough (bit of a mayfly, Kay). Ditto Iverson and APL, although APL’s sidelining was more down to a nascent Programming Profession redefining Programming™ to be what they do for users rather than what users (mathematicians in this case) do for themselves.
In which case, why didn’t you just use bash?
Yeah, I know bash stinks. But this is not my fist rodeo* so I’m struggling here to see how CWL stinks less. See again: Inner-Platform Effect, Greenspun’s Tenth Rule.
--
* i.e. I already know how easily “workflow engines” go up their own arse because I’ve done it myself. And CWL fails the same sniff test. Not a good start.
The only bit that sounds at all novel or interesting is the dispatcher; and even that is really just an expression of `<load_balancer> | ssh`. At which point, Unix Philosophy tells us we should implement <load_balancer> as a small simple single-purpose Unix command which can easily pipe to other Unix tools. Itch scratched; everyone can now go get on with their actual work.
So if that is the case, the precisely what problem is all CWL’s Castles-in-the-sky YAML crap actually solving, other than bored developers’ need to keep entertained? Especially when [from what I can tell] the project doesn’t even provide you a dispatcher component but instead tells everyone to take a spec and write their own.
How many wheels need to be reimplemented before someone involved declares it a pig in a poke? And how many more before the rest can accept this?
Bioinformatics software isn't perfectly written software, there are a number of weird behaviour that a simple unix pipe doesn't solve. There are engines that support CWL, and other existing engines have been adding CWL support.
I'm not saying that there aren't other frameworks out there for doing analysis, or that this is the best way but this is an option that IS working for researchers.
Edit: workflow -> scientific workflow | data pipeline
> the project doesn’t even provide you a dispatcher component but instead tells everyone to take a spec and write their own.
Close...
Software that supports CWL are SaaS vendors, FOSS projects, and various HPC schedulers that all have their own incompatible data management and dispatch/scheduling systems. If you want to write an analysis that runs on more than one of these platforms, you need some abstraction for it. CWL is one such an abstraction.
This matters because maybe you've developed a research pipeline that integrates a bunch of different tools written in different languages and want to run it on somebody else's data, and you need to run it on their infrastructure because copying 12 terabytes of HIPAA-restricted data from their LSF cluster to your Google cloud instance isn't an option.
"Just use bash" is what people who adopt CWL are trying to get away from. It is nearly impossible to write portable parallel / distributed analysis in bash, and the result is brittle scripts with more coordination code than code that actually does scientific work. Because CWL is declarative, the CWL engine handles all the coordination, scheduling and data staging for your particular infrastructure.
You may not have any of these needs, but suggesting that we're just bored developers creating castles in the sky is really unhelpful.
You can find some CWL workflows on dockstore [1].
[0] https://www.ga4gh.org/ [1] https://dockstore.org/search?descriptorType=CWL&searchMode=f...
See also: Greenspun’s Tenth Rule, “Yo Dawg…”.
Any information about which language is leading the field?
CWL seems to be more popular than WDL, as far as I can tell, but Nextflow is probably more popular than both.
At least the Nextwave homepage (https://www.nextflow.io/) starts with a clean concrete written example, even if it does leave you to deduce its actual meaning for yourself.
https://i.pinimg.com/originals/5a/a7/95/5aa795b87c41d0f4d595...
Those who can’t, implement Standards.
Look no further than their own hand-crafted examples (confusingly called "Episodes") for compelling arguments for why to NOT use Common Workflow Language.
Your comment almost gets there, but not quite—and then it sinks itself lower by breaking this one:
"Don't be snarky."
https://news.ycombinator.com/newsguidelines.html
Can you please take the guidelines a bit more to heart when posting here? We'd appreciate it.
The goal is to provide a way to describe dataflow processes that is highly portable, auditable, and reproducible. This is incredibly important in research, clinical, and regulatory domains where you need to be able to show how you came up with a result.
It's not a general purpose language on purpose, and operational concerns like notifications are the domain of specific implementations (engines).
I agree the syntax is horrible (and I designed most of it) but it also makes it easy to write programs that read and write CWL, enabling an ecosystem. For example, here is a transpiled languages that emits CWL:
https://github.com/common-workflow-language/cwl-ex
https://media3.giphy.com/media/49zC0Bm1kbu36/source.gif
[1] https://www.omg.org/spec/SPEM/2.0
Just plain old bash seems to work just fine, though. It is simple and gives you a lot of portability to HPC clusters and general purpose cloud. Not hardwiring to a configuration file and not using an, in practice, un-portable workflow language saves you a lot of pain.
A truly portable cloud/hpc module for python would be a good solution.