Brazos Portal (2.0)
Brazos Portal is a proprietary process portal designed to be used with IBM BPM1. It is built as an alternative to the default process portal provided by IBM and can be used to:
- Filter tasks into smaller groups
- Receive notifications for incoming tasks
- View tasks across multiple BPM environments.
Version 2 of Brazos Portal uses the ElasticSearch index maintained by IBM BPM, which means searches for tasks are extremely fast compared to v1.x, since it relies on a relational database for the same information.
I worked on Brazos Portal in 2016 and 2017, from product inception to its first release. During this time, I have:
- Learned how to setup and use ElasticSearch (also completed a lecture on Udemy, on how to use ElasticSearch, on my own time).
- Replicated features available on Brazos Portal v1.x, while learning how to use Angular 2+.
- Personally integrated webpack into our build process (before Angular CLI was released) reducing our page load times.
Since IBM unofficially supported the use of ElasticSearch by other applications, there was not much documentation in this area. This made using the IBM BPM provided ElasticSearch challenging, as we had to experiment with the ElasticSearch indices and documents inserted by IBM BPM to understand how we can get the task information needed.
Additionally, Angular 2+ was in beta when we started using it for this project, requiring frequent updates to catch up with breaking changes.
Prior to this project I had only heard about ElasticSearch. By the time I was being moved off this project, I had learned how to:
- Setup index mappings.
- Create complex aggregations (especially date-based aggregations).
- Optimize search results using better text queries.
The flexibility of aggregations was quite intriguing, as we used them extensively to provide task due date information to the user.
I had a great time learning how to use Angular 2+, especially not having to deal with scoping and change detection issues that were easy traps to fall into in AngularJS.
In Angular 2+, the process of scoping is hidden from the developer and every component can be considered to be “isolated” (while users can specify variables exposure using TypeScript’s encapsulation). Additionally, the introduction of push-only change detection, along with access to the change detector of the component and NgZone2, change detection became easier to manage.
We used to use Gulp with various plugins as our build tool for web projects; however, this time a tool better suited for improving our page load times was needed. This is when I introduced Webpack3 to the project, which allowed us to decrease page load times by bundling the software into larger pieces (loading files in larger chunks is faster, as there is less request overhead). Even after the general release of Angular CLI, the team decided to keep using Webpack because it was working really well (and it would’ve been a decent amount of work to convert all build configurations to work with Angular CLI).
In addition to Webpack’s mentioned benefits, it provided great tools to analyze the sizes of included chunks (such as third-party libraries), allowing us to cut out duplicates and unused portions of libraries.
What Did I Learn From This Project?
- The usefulness of Webpack and its bundling capabilities.
- Despite requiring more time to learn, using popular frameworks like Angular in their beta stage can allow for a better start (if said framework has improved features compared to its ancestors), especially for products with planned long-term support. This prevents a rewrite of the entire product for years to come.
- The power of ElasticSearch when it comes to text-based searching and aggregating data. That being said, it’s not meant to be used as a database for writing, as it doesn’t support the ACID principles by default. It is best used as a searchable index along with a database system.
What Would I Do Different Next Time?
- To provide better search results to users, I would learn how to make use of the scoring system in ElasticSearch, as it seems crucial in providing more relevant search results.