Pomm 2: One year in production

Posted 2 years ago.

The good, the bad, the ugly

Two years ago, after few weeks of prototyping based on the 4 previous years of Pomm 1, the first stone of Pomm 2 was laid. Several months later a first beta version was released and some developers, really happy with what they were doing with Pomm, started to use it in production with some of their small projects. Most of these projects are still running right now. One year ago, a production ready version was released. How is Pomm 2 one year after?

First analysis, there is very low feedback on the 2.0 (stable) version. There could be 2 possible reasons for that: either Pomm is not used or people manage to make it to work silently and are happy that way. We dug a bit and found out the reality was a bit of both reasons. Pomm2 has been installed more than 10 thousand times in a year and a half using composer which is far from other standard RDBMS access middlewares like Propel or Doctrine. But we also find out that Pomm 2 was used in production for critical applications where a lot of strain was put on Postgres. The community of users was wider than we first thought and every time, we figured out our users were happy with Pomm. Most of them used Pomm intensively for more than one year without a itch, a bug or a critical feature missing and that was for us the most rewarding feedback we could have. As far as we know, Pomm is used in various web environments like online stores, statistics dashboards or other data centric applications.

In a way, it is not surprising that Pomm2 is not (yet) widely used and we knew since the beginning it was promoting an alternate culture (at least in PHP). At the time most of PHP projects use database abstraction over MySQL, the direction taken by Pomm is the complete opposite: use PostgreSQL features in direct contact. The good news after one year in production is this approach works beyond expectations on all aspects: ease of development, reliability and performances. The main reason why it succeeds and at the same time why lot of people keep their distance with Pomm can be explained in one acronym: SQL. SQL has a sad reputation in PHP because its community has a strong MySQL culture and even though MySQL’s forks are racing for implementing "modern" SQL features it still smells like the MsDOS of the SQL: painful, simplistic with an unfriendly CLI. Unsurprisingly, most of the PHP community thinks that relational databases are something from the past which should be superseded by technologies from "our time".

Far from its 1992 ancestor, the SQL offered by Postgres is modern: it offers a complete language to compute complex data manipulations in a descriptive way. Instead of telling the computer how to compute data (like we would do in PHP), just telling the computer what to do with the data makes the engine to process the treatments. No exception management, by far less edge cases no apparent nested loops! Mixing SQL with PHP creates a very strong and reliable base to build powerful applications. As stated by a kind message:

> Pomm simply works and it is easy to start with it, the main gap is learning Postgres’SQL and it’s amazing.
> Thank you.

What parts of Pomm have been the most appreciated or disliked? One thing is coming back in almost all feedbacks directly or indirectly: Foundation. Foundation is the brick that makes Pomm easy, powerful and extendible. A large company wanted to create a modern web application that performs statistics on millions of elements. The Model Manager was not suited to do such task as there is no need to hydrate results in entity class instances to send them to a Javascript front end in JSON. A lightweight dedicated model layer has been quickly set up for this purpose, keeping the performances high. The second favorite part is, in the model manager, the ability to provide queries in traits for the model classes. These two points seem to be the favorite features shared by the feedbacks we have.

In another hand, do negative points have been raised by some disappointed users? The most recurrent feedback that could be tagged as negative are more like "I do not know how to work with Pomm". Indeed, it looks like an ORM and as such, people are tempted to use it the same way. But Pomm does not present the "features" of classical ORM. Like one said years ago about Pomm 1: "It looks like Doctrine but appears to have less features and works only with Postgres".

So, what’s up now?

Pomm 2.0 is fast and rock solid but as always, there are minor slight improvements that will land in a 2.1 release. This will hopefully be real in the months to come. It is also time to promote the use of Pomm and Postgres in PHP. To address the main problem raised in the feedbacks we had, it would be nice to create a tutorial to present how to use and work with Pomm 2. Your company, open-source project is using Pomm? Tell us and we will add your logo on our website. Help us to spread the Postgres goodness in the PHP community.