<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 19, 2013 at 6:44 AM,  <span dir="ltr"><<a href="mailto:kevin@funceng.com" target="_blank">kevin@funceng.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


I recently wrote a blog post on software estimation and progress tracking for functional languages. Unfortunately, the post was not terribly substantive and posed more questions than it answered. Since the Erlang community seems to have a lot of good practical experience on various sizes of commercial projects, I wondered if anyone here had experience with estimation and progress, particularly as it differs (or perhaps doesn't) when using Erlang as opposed to imperative languages.</blockquote>


</div><br>The underlying problem of software estimation is this:</div><div class="gmail_extra"><br></div><div class="gmail_extra">"Please estimate how many years it takes to make a fusion reactor from now, solving all power problems on the earth in one fell swoop."</div>


<div class="gmail_extra"><br></div><div class="gmail_extra">The thing is, you can't. People understand this to be research and hence they have no qualms at throwing effort at the project in the hope it brings you closer to the ultimate goal, albeit slowly.</div>


<div class="gmail_extra"><br></div><div class="gmail_extra">Software is not "construction". It turns out to be "research". Regarding it as "construction" by imposing estimates and progress tracking is usually futile due to this dichotomy and the fact people missed it was "research".</div>


<div class="gmail_extra"><br></div><div class="gmail_extra">So, will the research happen faster in Erlang than in other languages? This is hard to answer without being concrete. My loose experience is that languages working at higher level in general provides shorter paths to enlightenment[0]. Since functional languages are often working at a higher level there is a considerable overlap. But don't underestimate something like Python, Ruby or Javascript which also works at the same high level. It is not always the case that you will be faster due to the trait of being functional.</div>


<div class="gmail_extra"><br></div><div class="gmail_extra">Compared to "traditional" languages like C or C++, the lack of proper garbage collection is the key thing which make you research faster. Compared to Java, it is the succinctness of Erlang. Compared to many other systems, like Python or Ruby, it is the toolset in Erlang to describe concurrency and the ability to utilize the machine via parallelism. Compared to Golang, it is probably the process isolation and the ability to run large complex systems with hundreds of applications in the same memory space without panics[1].</div>


<div class="gmail_extra"><br></div><div class="gmail_extra">Bringing it back to estimation, I fear that we will just adapt and expect more features to delivered in shorter time, so our estimation of progress and effort will still be off, even if we get things done faster. For some reason, there is a bias toward "fast delivery" with no regard toward "quality of product". This is a depressing work environment, though: every deliverable will be too late, always. And this leads to a psychological phobia of estimation :)</div>


<div class="gmail_extra"><br></div><div class="gmail_extra">[0] Since software is research, the goal is to seek enlightenment and understand something deeper than before.</div><div class="gmail_extra">[1] Though this is a hunch, not experience.</div>


</div>