«  View More Posts

F-Words

A Journey Through the Tech Stack: From Java Roots to a Cloud-based SaaS Solution

October 6th, 2023 (Updated 02/14/2024) | 6 min. read

By Pricefx

Some of you might have been wondering, how was it to grow the team of developers from a few employees to almost a hundred and all the obstacles connected with it. Milan Borůvka shares his story with us. Although I know he likes to sprint, this one was more of a marathon for him.

Pricefx is well known for being brave enough to discover and utilize the cutting edge tech-stack, however, it is not just about the technologies used, that keeps the team happy and together.

In this article, Milan Borůvka shares his story with us. Although I know he likes to sprint, this one was more of a marathon for him…

As the SVP Engineering at Pricefx, I’ve had the chance to see our company’s incredible transformation from a tiny team of Java developers to a robust team of about 90. Now, I’d like to show you how our tech stack evolved over the years. 

Our Early Days: Java and the Cloud

Pricefx began with a simple idea: replace Excel for managing prices with something more flexible and efficient. Our software was designed to cover all aspects of price formation, from analysis and analytics to price setting and calculation. Starting simple, our focus was on small to medium-sized businesses. As our tool became more sophisticated, larger corporations began to recognize its value. 

One thing to note is our software is entirely cloud-based. Initially, we hosted it on a private cloud of rented Linux servers scattered worldwide. As we scaled, we transitioned to the public cloud—Amazon Web Services (AWS) and Google Cloud Platform (GCP). While AWS gave us countless benefits, managing costs was an important concern that we had to think about. 

As our primary application was written in Java, our initial choice was rooted in our team’s familiarity with Java and its practical, open-source nature. For specific optimization tasks, we also used containerized solutions. 

Database Management and Frontend Development

In our early days, we used technologies like MySQL, PostgreSQL, Jetty, Jackson, Hibernate, and Flyway. At one point we decided to avoid the Spring framework in our primary application. This allowed us to dodge many dependencies and keep our options open for other frameworks in the future. 

Frontend development also posed its own set of challenges. We initially used Google Web Toolkit (GWT), which performed remarkably well for data tables and performance optimizations. Over time, we decided to rewrite the user interface using JavaScript, starting with Ember.js. But we ran into an unexpected hiccup—we wound up writing most of our grid functionality ourselves! Plus, hiring Ember.js developers was a challenge. So we switched to React, which we still use to this day.   

Scaling the Team and Tech Stack

As we started scaling, we expanded our team to include back-end and front-end developers, product designers, and dedicated automation QAs. With this exciting growth, however, came new challenges. Our stand-up meetings became too long, so we reorganized our team based on their work domains. This allowed for better domain knowledge and a more streamlined workflow. 

Our core application remains a Java monolith, with services built around it. We also have a few microservices, but we’ve found that the main functionality is still best suited to the Java monolith. We don’t have a domain-specific language but utilize an internal API documented and accessible in Groovy. 

Data Handling and Machine Learning

In terms of database management, we found that in-memory databases were not always necessary if servers run at SSD disk speed. We use PostgreSQL for basic analytics, but for clients dealing with hundreds of millions of transactions, we employ GreenPlum, a clustered version of PostgreSQL. 

Machine learning plays a major role in our operations, primarily in optimization. However, we found that most of our clients are more concerned with processing challenges and data volume than they are with AI-driven price suggestions. 

Quality Assurance

Quality assurance is at the heart of our operations. Along with manual QA testing, we invest heavily in automation. We started with a focus on the back-end, using a framework called Spock for writing integration tests. With time, we introduced JavaScript for component and unit tests and automated end-to-end (E2E) tests using Cypress.js, which outperformed our previous tool, CodeceptJS, in terms of documentation and ease of use. We even dedicated a small team solely to writing and maintaining these E2E tests. 

We maintain several test environments that mimic different product versions, including development, upcoming releases, and the current production version. We clone test data into these environments, allowing us to test extensively and identify bugs more easily. 

Data Visualization and Analytics

We’ve developed an internal analytics module that uses PostgreSQL, supporting several types of graphs and data definitions. While we also use Tableau internally, we provide our customers with our own internally developed tools. These tools include a module for data analysis and pricing analytics, allowing for data export to customizable dashboards within the system. 

Despite our jokingly stated intent to “kill” Excel, we’ve found that some of our customers prefer to pull data via APIs into Tableau or use our Excel integration, sometimes even enhancing them with their own visualizations or additional data sources. 

What’s Next?

Looking back, we’re so proud of what we’ve achieved. We’ve built a robust engineering team with a healthy culture and released products that genuinely have a positive impact on customers. And we’ve managed to streamline our processes without stifling creativity, which is a huge accomplishment in itself. 

Our tech stack evolved in response to our growth and the challenges we’ve faced along the way. However, our core objective has always been the same: to democratize pricing and provide an efficient, flexible solution that caters to businesses of all sizes. 

Moving forward, we’ll continue exploring new technologies and methodologies, and adjusting as needed to continue offering the best possible product to our customers. We have an exciting journey ahead, and I can’t wait to see where it takes us! 

In case you want to move forward with us too, you can have a look at our open roles here at our Career Pages, or check on Glassdoor, what our colleagues say about their very own experience at Pricefx

Pricefx

We’re passionate about pricing and that’s why we’re committed to delivering the best-in-class pricing software to boost your profitability and increase your market share.