Let's try to stay on topic... but as the "coding effort" was one of the criterions mentioned in the linked article, a few points come to mind.
- "Coding effort" is a very vague term. What would be seen as more "effort" to someone may look like the same, or even less "effort" to someone else.
- When people try to quantify it, a few metrics pop up. The number of LOCs is commonly used, even though it's obviously flawed on several levels. Usually LOCs are counted excluding comments and blank lines. But is that really related to the "coding effort"? Not really. Expressing the same functionality with fewer LOCs can actually take much more effort.
- As has been said here, and that I often say as well, when writing in any language, readability is key. If better readability means more LOCs, so be it; you're not likely to get anything better (fewer bugs for instance) by making your code less readable.
- When comparing languages and/or coding styles, "verbosity" is often a key marker. But that has to be clearly understood, and clearly defined. Some languages are inherently more "verbose" than others (such as VHDL is more "verbose" than Verilog), so a similar implementation will take more "code", but is this extra code a source of bugs? I don't buy it whatsoever. So that's another way considering LOCs and verbosity in particular is completely flawed. Considering verbosity, the extra "coding effort" is merely some typing effort, and of course, aiming for the shortest code possible can lead to absurd, unreadable and completely unmaintainable code.
- Linking the average number of "bugs" to the number of LOCs is also a common metric. Whereas it's flawed, it kind of becomes statistically significant in a given team using given tools if the number of LOCs is large enough. It's hard or impossible to transpose it to other teams, and if the number of LOCs is small, it usually doesn't make any sense anyway.
- Back to HDLs: a typical HDL project is usually much smaller than a typical software project, so definitely the number of LOCs can't be used statistically to infer the potential number of bugs IMO, even in a given team using given tools.
- Considering the coding effort, the number of "statements" is a slightly better metric than the number of LOCs. But it's still flawed. The basic idea is that if you need to write more statements to implement a given design, there are just more opportunities to introduce bugs. Statements itself is a vague metric. To make sense, we should consider statements that actually have an effect. But even so, sometimes implementing a given feature in fewer statements is much harder, and thus is more likely to introduce bugs than merely splitting the implementation over several statements, even if it's more code. And of course, as already said, if it helps readability, it's also likely to help limit the number of bugs.
- One factor that makes code harder to write correctly and maintain is splitting implementation in too many places that have dependencies between themselves. Back to HDLs and FSMs, splitting a given FSM into several processes (depending of course on the structure and FSM itself) can fall into this category, in which case, even though it may lead to fewer LOCs (or better, statements), is much harder to get correct and even harder to maintain.