Thank you letter to Julien Dubois and the JHipster Team
Hello!
My name is Ernesto Buttó, I’m Co-Funder with Cindy Marin of a small software company (currently 3 people) called catwizard.io. Cindy recently did a workshop in Women Tech Makers Barcelona 2018 about JHipster, and I wanted to say a few words about how JHipster has impacted our lives and the people around us.
This comes as a way of thanking the JHipster team for making this platform. I figured that the best way we could do it was telling our story of JHipster.
We have been working together for 11 years now. Cindy and I are both originally from Venezuela. We started a software company there that now days is called catwizard.io (originally Bambu Soluciones). After getting our degrees in Computer Engineering, we started our professional path as software developers while also starting a company. Being programmers and entrepreneurs. During those early days, we were many, not just Cindy and I. We met our first partner, he had the idea of a building an online product catalog solution for a specific industry and a Content Management System to go with it. He sold us that he could sell it and he would become a supporter and mentor for the startup years.
A friend recomended Spring as the backend, we figured Adobe Flex is the future in the front end… We, young and enthusiastic as we were for anything that sounded fancy and productive, followed. So we coded, we build, we sold. It worked! Kinda…
Learning about Code, Business and Market
It was all growing slowly but surely as we became incrementally better in the technical and business front. We were learning how to be a company rather than a team, how to be profitable, how to manage money and time, while at the same learning how to write better code, how to manage ourselves as programmers. We learned to hire and to teach, we gave and took, and in the process, we met the third team member that has been working with us since then Fatima Pestana, data engineer with a taste for CSS and helping customers to achieve their goals.
It was like setting up the foundations of a house, sure it was slow, but whatever we were building, it was growing steady and strong. Then Venezuela happened. Economy and personal security levels went in a steep decline. Shortages of basic stuff began (toilet paper, eggs, legumes, milk, etc…) while crime rates went dramatically up. Saddened, we started to think about leaving. What future could we have in these circumstances? Then again: how do you leave behind all that you’ve built for years? How do you leave all your promises to your customers and to yourself? How do you just get on a plane, and… start from scratch? A small decision. To get through a door, to get on a car, to give a final hug, and your habits and definitions and reminders of who you are, in an instant, puff…
Our company, however… We did not want stop working together. Our company. It grew into us. It was our dream. It was our vision. It was working, it was giving back. We just couldn’t. And at least about that, of all things, we were able to do something.
“To run it remotely”, we figured. So we did.
Now, easier being said than done, amirite? Our business, our sole business at the moment was this: a set of modules and services that we sold to companies. Our sales strategy was based on trust that we had built, relying on existing customers that wanted new modules, and a support and service-oriented approach that contributed to our reputation spreading mostly by word of mouth. We basically ran most of the time in operations, while prospects and customers called and visited us.
But Venezuela kept happening. As the country tumbled, many of our customers were forced to close doors, or to stay operating at minimums depending on the industry, size, strategic view of the owners, with a heavy dose of unrelenting optimism, and faith. Lot’s of faith that it will all turn out for the best. Eventually…
So what could we do? We can work remotely, ok, but most (not all) of our clients were closing shop, and nobody outside of Venezuela knew us. We figured that we could work on custom developments and consulting, primarily to costumers in the USA that we already had bonds with. Strengthen our relationships, you know. Improve our delivery times and features compliance, become competitive, while not forgetting about those in Venezuela that still relied upon us and somehow managed to stay afloat.
Digital Nomads vs Giving Up
After living on the road for a few months, while being a consulting company and traveling to several countries (living the remote life, hooray!), including Colombia, Peru, Chile, Sicily, we decided to settle ourselves for a while in warm, sunny Spain, in a small city close to Barcelona called Girona. It was working great! We had challenges but we had freedom, we had stress but also relief. Responsibilities but also a taste of peace of mind, and less loud worries about politics or tragically, toilet paper (and I do mean less loud …family and friends are still there). We had left our home, but we were finally feeling like were building a new one.
Almost immediately after taking our first breath in our first Spanish flat, we were thrown into a very stressful situation. We accepted a project that was going to affect a core process of our main customers in the USA while a new opportunity involving a mobile app connecting via Bluetooth to an electric skateboard arose (stoked!). We had very little time, and a very limited budget to handle it all.
Our client’s business software touched many areas. It required security and reliability to handle everyday operations, it integrated SalesForce to their products marketing information system and to their accounting systems. We loved the project, but the resources and time frames were very short for such a software to be built from sratch. I could feel the risk of finishing the project and beraly being able to pay our bills, and in any other circumstances, we probably would not have agreed to do it, but by this time we have no other source of income and zero contacts in Spain. Nobody knew us, and we didn’t know how to market ourselves here. And on the other side there were the skateboard guys. New client, young guys with a revolutionary product at hand, with lots of promise and potential and interesting technologies… No much money upfront but if the project launched and worked then it would also make sense in the buisiness side… And it seemed so much fun! We just couldn’t say no to that. What if this became the floating skateboard we are all waiting for? Our future selves would’ve never forgiven us. But no time, no money. What can we do?
Enter JHipster
So, 2 days after agreeing to the project with our USA client we were feeling like we were already falling behind. Very anxious and all that. We remembered that we had tried JHipster some years back, while fooling around on the Internet. I went and looked at it again and was amazed on everything the team had built around the generator. The JDL language, the ease of use of the development workflow, the generated security, the roles! The user’s administration, swagger integration, the monitors, the logging, the profiles, java testing, frontend testing, the sonar integration, performance tests, integration tests… I mean… all the options, man! Once I got a hold of the workflow using GitHub and all the tools JHipster provided I felt like Mickey in the Fantasia movie, the Wizard Mickey discovering that he has this magic, that he he owns it, and that he can create universes and life! We were suddenly able to learn and apply a lot of technologies and concepts that we simply could not afford in the past. There was a way of updating the entities fields and relationships, exporting the model. The production profile is so well packaged, the cache options, the database options, do you need realtime with websockets ? ultra fast Elasticsearch engine ? internationalization ? got it choose the languages… we included ng-prime and solved specific user interface requirements (Now days there is a module for that in the marketplace), and the Angular2 was almost out of Beta (They support Angular 5 now and React). I mean I was so excited of all the tech behind it and at all it could do for our customers, all it could do for us! Well… Fast forward some months and we are now delivering the project built in JHipster, approved for production (replacing a very old legacy lotus notes workflow, allowing collaboration between the users, monitoring, delivering branded PDF’s, creating tasks on the CRM etc…) and with a very happy client. We delivered on time and turned a profit thanks to the hours we saved. Even more, some other module, one that was approved after all of this and wasn’t even part of the original scope of the project, we were able to include it before hand. We had anticipated and we delivered! We were skipping through time!
Thanks to that we were able to pay for the migration costs, find a better place to live, get our legal papers in order. That first breath of our new flat came again, and this time we managed to fully enjoy it. Ecstatic relief. Good news appeared: our client in the USA told us that their solution was used steadily in daily operations. We became able to help our partner in Venezuela (Fatima Pestana) dealing with the, by now, devastating economic crisis. We were helping family and friends leave the country. Thanks to JHipster we became again to not only be sustainable as a company but also to able to give back. To connect with others.
Cindy came up with the idea of a JHipster workshop for the Women Tech Makers in Barcelona. It would not only show the many technical benefits of JHipster but it could also be purposed as a tool for empowerment. It turned out to be (at the time of this writing) the most viewed video of all the talks (you can check it out here). That same workshop inspired me to help in the next Software Craft Barcelona 2018 event and help Cindy to boost a GDG initiative at Girona. Spreading the word, be it via a workshop, or a long article in a small blog seems like the least we could do to say thanks.
Example of generated update entity view
JHipster boosts learning
To learn you shall want and to learn you shall do! There’s so much to learn from JHipster. I mean… Let’s start with the code. The quality of the generated code (AAA in sonarqube currently!) is the result of well-thought concepts and solutions aimed at a very specific set of problems. What JHipster does, it does it well. Considering how easy it is to get confused in this world about best practices, best methodology, best strategies, best this, best that… There is a huge benefit of seeing those best bests in a tangible product, functioning in the real world.
A small example in the Spring part: the service layer… Should I build a service layer for every endpoint, or can I get away with calling the repository directly? How should we deal with that kind of thing…? Ok, how does JHipster generates all those abstraction layers and why? Now, as responsible programmers, we go and read the documentation, test it with some cases, and very quickly arrive at our own conclusions. Because behind the tools there are philosophies and concepts that support the results, and because you provide several options regarding a particular practice, we can compare, we can experiment and tinker, we can be playful! (and everybody knows the importance of play)… Oh! yes let’s use service class in this case, interface in that case, but mostly let’s just call the repository.
Example swagger integration, out of the box JSON API interactive interface sandbox!
I can recommend 100% JHipster to anyone who is on the path of learning about Java + Angular/React/Ionic , or about architectures, or about microservices, or about Spring security, or about DevOps (because the profiles, CI tools, deployment and docker stuff is awesome!), or about data modeling, or comparing paradigms like NoSQL vs SQL, or about multilanguage architecture, etc…If you’re reading this and are still not sure, I say: Yes, go through books and online courses and MOOCs and whatnot, but—as it is with anything worthy in this life—, I encourage you to get your hands dirty, as anything worthy in this life requires… Now, if you decided that yes, that you do want to get to the depths of some tech, to see it as it is and understand what it does, how it does it and what it really has to offer, not necessarily become an expert but really knowledgeable… I mean, if you really want to get your hands dirty, why not do it with some really really good mud? This is the algorithm: create a simple project with JHipster, see what it does, add a technology you would like to understand, see what it does now, repeat.
Recently I was learning and implementing docker, and we have a real use case of a company that has two monolith applications that work together communicating through their JSON API’s. I wasn’t sure if this was right, or common or if there are ways of packaging them. Came again JHipster. In the Docker section of the documentation I found this gem:
If your architecture is composed of several JHipster applications, you can use > the specific docker-compose sub-generator, which will generate a global Docker > Compose configuration for all selected applications…
Ooohh!! So it’s ok! It’s OK. They don’t have to be microservices to connect. And look at the docker-compose files! Certainly, we can start from here…!
JHipster changed the game for us
By this point, you must know that every technology in JHipster has a reason to be. It is useful by itself, yes, but it can be even more if combined with another one. To successfully implement these combinations (JWT Spring security + Angular for example, or ElasticSearch… or Social, etc..) by yourself is not trivial. Lot’s of trial and error, lot’s of mistakes, maybe even some expensive ones If you want to learn about it you need a lot of time, and budgets of SMBs project won’t cover for these researchers. JHipster provides a way. A low-cost way of learning not how to be a developer but how to be a good one. Not only using Spring in blind-following-the-blind fashion like when we were starting in Venezuela, but using it well; and that along Elasticsearch, and Docker, and Swagger and a myriad of other outstanding packages…
Example of generated monitor screen
Again, JHipster was a fundamental solution during a very hard time of our lives, and it is now a fundamental part of our learning, our processes as developers and our processes as service providers. What else can I say but thank you.