I keep postponing this for a few weeks but today my partner decided to stop
the collaboration and I'll take advantage of this moment to write this post
mortem.

*Context*

I was approached by a friend few months ago about a B2B project that was
supposed to help small businesses issue beautiful invoices. It was suppose
to be a free product that would synergize with some other products that his
business was already delivering. I was supposed to implement it and he
would do all the marketing and promotion.

Having total freedom, I decided to use Elm to implement the platform in
cooperation with another part-time programmer that would do a JSON backend
in PHP.

The product required that the interface would be modern, responsive,
dynamic and look great.

*Beginning Phase*

The first phase of the development was dominated by personal attempts at
reimplementing reactive design elements such as drawers that show on big
screens and hide on small devices. After a few buggy attempts I ended up
trowing everything away and switching to elm-mdl.

A considerable amount of time was also invested at this point to set up
some kind of automatic build environment. I ended up with a solution based
on gulp.

*Middle Phase *

Once the build environment was set up, things started to move a little
faster. I then ended up needing CSS and after playing a little bit with
elm-css and hitting several missing properties I decided to implement my
own library, taking inspiration from all 3 libraries that were dealing with
style (rtfeldman/elm-css, elm-style and massung/elm-css). In hindsight this
might have been a rather bad idea for productivity reasons but I have
learned a lot.

*Ending Phase *

After I passed the 5000 LOC mark, things really started to crumble around
me. My mind could no longer deal with the complexity I have created.
Most of the brain cyles in this phase have been wasted trying to use the
little JS I know to try and somehow add to my Elm UI some widgets that I
needed. I have failed.

I have spent an inordinate amount of time trying to add some Dropdowns to
some forms I had, ending up reimplementing part of them in Elm and using
some CSS form the Semantic UI project.

Another large amount of time was spent trying to integrate a carousel. I
ended up reimplementing a bare bone version in pure Elm.

By the end, the code grew to about 8000 LOC of Elm.

*Conclusions *

- *Elm is an amazing language.* I've had countless moments of sheer
pleasure programing in Elm for this app.
- *Elm lacks the full story. *My main hope was that I could implement the
app even if I had very little CSS or JS knowledge. I could not do this. Elm
does not have yet something that would allow someone to stop touching CSS.
-* I would not recommend webdev beginners to take the approach I took.* It
is better for now to stay the tried and proven path and just use Elm to
implement smaller components in another web framework.
- *The tooling around producing a deliverable elm webapp are simply not
ready yet.*


Thank you for taking the time to read this.
If any of you has curiosities around this experience, feel free to ask me
anything. :)





-- 
There is NO FATE, we are the creators.
blog: http://damoc.ro/

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to