Grommet is dead, but nobody told me
I have always been fascinated by software projects lifecycle - their birth, growth, success and even their eventual demise. There is undeniable beauty in successful projects — you know, the ones that are launched just in time, hit a soft spot in the market and make the news. Those are the projects we all read about and dream to emulate. I know recalling about how I developed AQtime between two jobs in 3 months and how it filled a gap in profiling tools for Borland compilers makes for a good story. I can cap it with how we ended up selling the company AutomatedQA and its a great ‘American dream’ ending. I have a few other ‘hero’ stories of past projects on several continents — and they are all good subjects, all generating a good amount of interest amongst fellow developers.
But there is also the ugly ducklings of the software projects — the ones that are launched late (or never), don’t really please much users, and you try to forget. I know I can’t remember any of my failed projects :)
There is no less to be learned from the those unfortunate projects — usually the team behind put up no less efforts and heart into them, yet they are nothing to be proud of.
So lets introduce the main character of this story without further due:
Grommet
I started moving my stack to react in mid-2017 for a couple of reasons
- I needed a more responsive user interface for creating neural networks in the browser. On the fly adding/removing/updating layers of the network, where jQuery would have just been too time-consuming to maintain
- Had been playing around and observing react for some time already and felt that the libraries around it were just about getting more mature and usable in a larger project
- The code structure of a react project makes more sense to me as a developer, compared to the spaghetti style code in HTML + javascript style projects
- The backend could still be python (as most development in AI was done primarily in python)
I don’t have the time or resources to develop every needed piece of code, and one of the first steps was to find an adequate react UI library (up to that point been using materialize.css).
I had a few criteria, to select a UI library
- It had to be react by design, as opposed to a react wrapper around a jQuery or javascript library
- It had to have sorting/filtering/cards type components
- It had to support some responsive behavior
- Ideally, it would have some UI component to represent neural network layers and their connections
- It would have to be maintained long-term
- Possibly a friendly dev team that would promptly address issues
Grommet ended up being the one library that fit pretty much all the criteria above, and as a plus had nice starter sample apps like Ferret. It was a tough choice, as I have long-time friends from devexpress.com and telerik.com, but I felt their larger libraries are not yet fully react-ish. Probably a decision I will keep regretting, but Grommet was also really, really good looking.
Grommet was regularly ranked in the top 5 UI libraries for react, the team is friendly and open and with HPE behind the project — what could go wrong?
I had a few happy months learning react, moving along with the new version then in the late August 2017 came the announcement of Why Grommet 2.0?
Do not rewrite everything at once
On a first read, the Grommet 2.0 roadmap sounds ok — styled-components (Hansel, so hot right now), cleanup the code, more examples, a babel plugin, enhanced documentation, high compatibility with v1 and a conclusion that “We are expecting the transition to be very smooth.”.
That should have been the first red light — the backbone of every web UI library is the styling of the components. Switching all the way from SASS to styled-components is a huge jump by itself, but the roadmap includes other items as improving the docs, the samples, creating a named imports babel plugin.
With good project management and focus, the team could have probably managed the switch to styled-components smoothly. Like create regression tests of all the sample apps with v1, and then one by one move the components, while ensuring all the CSS props stay the same. Its a lot of effort, but possible.
The initial 2.0 roadmap was assuring us that “ If you are already using 1.5.0 and you don’t see any deprecation warnings you are in good shape.” and the HPE support behind the project was luring me to believe that they wouldn’t do a folly and simply throw all the existing code out the window.
A bit disappointing that no new features were planned (while the complaints about Grommet were mostly about it not being quite feature complete), and the bulk of the changes were oriented towards the team developers rather than the end-users.
Read your project specs (especially if they are public)
Just a month later, at the end of September 2017, was published the 2.0 Migration Guide . That was a major red flag that the project is off-rails — from the previous roadmap was completely ignored that any deprecated properties from 1.0 will have warnings so users can prepare for the migration. In fact the only deprecation warnings we would ever see in Grommet will be in the initial roadmap document.
Already components and properties were randomly removed and renamed, with no regard to compatibility.
Control your devs
An entry-level developer is not as productive and can introduce serious bugs in your software. A great developer on the other hand, if left uncontrolled can literally destroy a project. A great developer wants to rewrite the code and work on cool technologies — that’s why you need a product manager or leader that can keep the focus of the team and a lid on the developers’ creativity.
Well, Grommet 2 was now getting to be a great developer’s dream — just rewrite everything you don’t like, without regards to schedule or keeping it compatible. Work on components you want and drop the boring ones. All the while ignoring the project roadmap and being completely unaccountable.
At that time, in the slack channels was announced that an official ‘beta’ of Grommet 2.0 is expected in December 2017. Looking back, at this stage no one could have reasonably expected the roadmap or migration guide to be implemented within the next month or two, but I was busy doing my best to help users and fixing bugs in Grommet 1, trying to give the developers time to focus on their v2 work.
It’s the Clock’s fault
When you have a delayed project, that is gone way off the initial plans and roadmap — you try to go and fix the bases. Instead we started seeing strange announcements related to Grommet 2
Remember the rule that if you add more devs to a delayed project, this will only delay it even more? Of course we also saw announcements of hiring new devs for Grommet.
People will go by your last public statements
I gave the Grommet 2 some time after the announced December 2017 ‘beta’ to give it a fair try.
By the end of January 2018, no one from the team had made any mention that the project roadmap is bust or the project is getting into serious delays and I decided to give it a go. Having looked at the code, I had a slight idea that it is incompatible, but to my surprise it was worse than anything I expected:
- Basic components for data presentation were missing (Table, Tiles)
- Grommet 2 did not have any support for responsive breakpoints
- From the few available components, most were half implemented (Select without multiple-choices or inline, Box without the ability to space between items or fill the parent space)
- The code examples on CodeSandbox were slow and mostly not working
- The new react-desc introduced added complexity to the components and removed support for code completion or react warnings
- The sample apps from v1 were replaced by amusingly childish examples
- All the code was 100% incompatible with Grommet 1. Compatibility was seemingly never on the minds of the team, it was just an item on the roadmap.
Don’t play the users
Especially if your software is open source — sooner or later developers will find out you are deceiving them.
We had a joke during communist times related to the shortage of toilet paper (amongst many other things): “A guy goes into a store and asks for toilet paper. The shop manager is instructed not to admit the shortage and starts asking questions about the color of his toilet, the size of the toilet, the color of his underwear etc. Finally the guys comes back an hour later with his toilet in hand and is “here is the toilet, here is my b**tt, can I have some toilet paper now?”
I posted my findings and disappointment on the forums, expecting that the project just went a bit astray and the team is working hard to get it back on track. Nope —I was asked to list exactly what components I do use and how do I use them, was argued against that probably my project needs are different/special, that v1 compatibility is just around the corner via some magic mappings, that Grommet 2 is already being used by HPE etc.
Seems the grommet team had completely forgotten about their own roadmap and switched the tables that now users have to list exactly what they need — component by component, property by property. Hmm, the existing users signed up for Grommet 1 — so maybe that’s what they need?
For all intents and purposes, Grommet was dead without any eugoogoology. There was not going to be upgrades, new features, continued support. My precious UI code that I had worked for the last half year was to be lost and I was to start my project anew. And this new project called Grommet 2 was nowhere near ready for much.
Mistakes can be forgiven, deception can not
There were several deceptive statements from the team that are probably my own biggest disappointments with the v2 project
- That there are mappings to make a smooth transition from v1 to v2. Like in map something that exists into something that doesn’t exist — v2 is still months away from having a similar feature set to v1.
- That v2 is used in production by HPE during a time when v2 had not even rudimentary support for responsive layouts or spacing between child elements in a Box. Ex-Squeeze Me?? HPE don’t need their web apps to run on phones?
- An updated (and truthful) roadmap of v2 will be released shortly. Still waiting…
- There will be video casts etc of the ferret sample running under v2 within a few weeks — two months later, see above about simply cant fake it if its not there.
Don’t repeat your mistakes
If you see your project can not attract much of any users, and your one user has turned from a passionate fan into a vocal critic, you’re probably doing something wrong. Yes, mistakes are usually forgiven, but you can’t keep on repeating them.
- There is still complete darkness on what/if/when will be added to v2. There is no change list, or list of fixes or any back information from the team to the users.
- There is still not a truthful roadmap or migration guide from Grommet to v2. I feel like I’m taking crazy pills here.
- The default theme in v2 was further modified to make layouts incompatible between Grommet and v2
- The submitted issues on v2 - even when fixed are oftentimes not mentioned in the PRs, so I have to comb through the code changes to see what has been fixed.
- From the fundamental Grommet components missing in v2, so far only the FormField was re-introduced.
- To the Clock and Calendar was added a RangeSelector component? Yet the Table component has a shameful presence in the ‘Old School’ section of the v2 site (yep, ‘school for ants’)
You might get what you wish for
We are now mid-April 2018, and Grommet is well forgotten (long live v2). I have a presentation of my new version upcoming in May that will probably be a failure (I have several months delays due to v2), but I also took some time to learn new technologies (of which next.js is really worth the time, graphql still on the fence) while working on a sample site and developed my own set of UI components to fill the gaps in v2.
To this day, even the simplest ToDo app can not be converted from Grommet to v2 (be warned if you have devs as users — we have a mean streak when we feel taken for fools and so I recorded a video of the ‘smooth’ converting the ToDo app from Grommet to v2 (or as I lovingly call it ‘not-grommet’):
The Grommet team starts to look desperate trying to attract v2 users right away, but not sure for what purpose as the v2 project is still possibly months away from being ready for real use — quality-wise, roadmap-less and also the lack of functionality to make it an attractive option. Earth to Matilda - attracting new users while your product is not ready might not be the best idea.
Oh, and I was asked by Alan Souza to write up my opinion of Grommet 2 to make it more popular. Mission accomplie !