FDLIC / Passare
Passare is a SaaS solution that helps funeral directors and the families they serve navigate the difficult end-of-life management planning process so that they have more time to focus on people. Year over year, they’ve been experiencing over 100% growth. We’ve completed over 6,500 work items on the project.
Up and Running has had the honor of working with Funeral Directors Life Insurance Company (FDLIC) on one of their initiatives, Passare.com, since early 2013. We have over 15 full-time team members who contribute to software architecture, development, systems engineering, DevOps, and quality assurance efforts. Our team works in close cooperation with Passare’s product development team to design and develop new functionality. The product is a SaaS system that offers transformational services for families and funeral home professionals to communicate and navigate end-of-life events and next steps. The client had over 300% growth in 2015, and we’re very excited about the future, for both the product itself and our relationship.
From a technical perspective, at a high level, the core application back-end is written in Ruby using the Ruby on Rails framework and interacts with a PostgreSQL database for primary data storage. The application also mirrors searchable data into SOLR to provide high-performance and flexible search options to users. Dynamic functionality for the front-end is written in CoffeeScript and relies on jQuery to maximize cross-browser compatibility. Code quality is a top priority on the project, and an extensive testing suite built upon RSpec, Capybara, and Selenium helps identify issues before they leave development.
The large size of the project led to a unique team structure designed to integrate easily with Passare’s development team. Due to the size of the engineering team, we have divided it into four subteams (three development and one QA), each of which is led and managed by a lead developer or QA engineer. For each sprint, our engineering team leads—one of which is the overall project lead—meet with the client's product planning team for an initial discussion on the features and changes requested for that sprint. Significant features are then divided between the development team leads for further planning and technical design work. Once a team lead finalizes the requirements and technical design of a feature, they work with members of their team to implement the functionality. Team leads are responsible for reporting the status of work done by their development team back to the planning team.
Again, we can’t say enough how much of a pleasure it’s been to work with such an excellent client and their team members. Passare / FDLIC and Up and Running have built a great product together: it’s serving a social need, and impacting everyone’s bottom line positively. Building out the technology is a reward in and of itself, but it’s quite a joy being able to help so many people at their time of need in such a direct manner.
The information above covers the project in a nutshell. What follows is more detailed information, presented in bulleted lists for easy reading.
Some of the major features we built out, and what they achieved
- "Rolodex" contact manager, which is a highly-customized CRM application in effect
- The Rolodex feature allows organizations to document contact details for other businesses and individuals with whom they have business-to-business type interactions.
- The feature allows for the definition of relationships between entities in the Rolodex; for example, a business contact can be entered, and entries for individual people working for that business can be entered and related back to the business. Those people can share contact details with the related business entry, or they can have their own contact details.
- Rolodex entries can be classified by type of business or occupation. This classification is used to drive drop-down selectors on the front-end. For example, a particular drop-down might be configured to show all contacts who are Coroners.
- The Rolodex manager has a full-featured search and filtering system that includes the ability to save searches. It’s similar to a search approach that you might see in something like Facebook or LinkedIn.
- Automatic scheduling of catalog item price changes and complex pricing options one might see in an advanced e-commerce platform
- Exports to popular accounting packages, such as Intuit’s QuickBooks, Microsoft’s Dynamics GP (Great Plains), and Microsoft’s Navision, as well as general exports
- Dynamic generation of two popular document formats, Microsoft Word and PDF forms and documents
- The document generation system takes an input template, dynamically fills data into it, and then produces an output file.
- DOCX, PDF, and HTML are supported as input templates.
- DOCX and HTML templates allow the document designer to insert tokens representing dynamic pieces of data.
- DOCX and PDF templates allow the document designer to map tokens or fields in the template to fields of data in the application. The objective with this approach was automation to the extent it provided the best value, and then the provision of a means to really customize the approach, which was written more for software developers or systems administrators.
- DOCX templates also allow for the insertion of dynamic lists of data by mapping the list of data to a table in the Word document and dynamically inserting rows into the table for each element in the list.
- DOCX templates support the insertion of dynamic images into the template as well.
- DOCX and PDF are supported as output formats.
- Extensive reporting capabilities
- The application features a reporting system that allows end users to define and run their own custom reports using over 200 fields of stored data.
- The reporting engine features a drag-and-drop interface for defining the columns of data that should appear in the report output. The design of this has been well-received since it’s so easy to use and the interaction is smooth.
- Reports can be grouped and sorted by custom fields, and columns can be aggregated to produce report-level totals. This is like functionality you might find in something like Crystal Reports.
- There are many options for filtering the output of the reports; for example, by case origins, disposition types, and assignees.
- The reporting engine can output to PDF and CSV, and can deliver the reports either via email or to the Download Center page within the application.
- Reports are run asynchronously using a queue system. Multiple worker servers execute reports as they are queued. The number of worker servers can be scaled up or down to handle changes in reporting load. That is, the system was architected at the code level and at the system level for massive scale.
- The reporting system relies on a separate, de-normalized database to provide very fast report generation without placing any load on the transactional database.
- Reports can be scheduled to run periodically. The scheduling interface was designed for easy use by a non-technical user. It’s maybe even easier than scheduling a recurring calendar event in your calendar system of choice.
- Chat system
- The application features a chat system that allows for direct and instant communication with customers.
- The chat backend runs as a microservice and uses an API to communicate with the main application.
- Chat messages are segregated into separate communication channels for each customer.
- The chat system tracks which messages have been read.
- The system provides an OAuth-based API, allowing third party software systems to send customer data into the application. This is done with FDLIC, for example, to really improve communication between two different systems, if not make operations seamless.
- A web-based management interface allows organizations to retrieve and regenerate their API credentials.
- Notifications and reminders system
- As part of the online collaboration system, this feature enables interaction, which can be configured in a very custom way.
- The application features a notifications system capable of notifying users when certain events occur, such as new customer records being created or updated or report generation finishing.
- Users can configure specifically how they want to receive each type of alert. The system supports delivering alerts by email, SMS, and a notification system integrated into the application. For SMS notifications, users can choose either long or short message formats.
- Users can also set up reminders for themselves and for other users; these reminders can be configured to trigger at any time and provide users with contextual information related to the reminder, such as customer information.
- Additionally, the reminders system includes a dashboard where the user can quickly see current, upcoming, dismissed, and sent reminders.
- The checklist system allows organizations to create a custom list of tasks for their employees to perform when helping customers. This helps them ensure a consistent customer experience, and really helps ensure quality in a busy environment.
- For auditing, the system tracks when tasks are marked as completed and who completed them.
- Administrators can configure when the checklist is applicable to a customer so that it only appears in appropriate contexts.
- Case listing dashboard
- The case dashboard provides users with a quick way to access their customer records. Think of this as your home base for working with data that’s important to you regarding most of your business.
- The main features include:
- Importing and exporting of customer data
- Customization of displayed customer data
- Searching and filtering of customer data
- The ability to save common searches for quick access
- The main features include:
Some additional features
- Integration with third-party applications, including Facebook and FuneralOne
- A robust note-taking system
- Notes may be associated with each customer in the application.
- This tracks which employee added each note and when, as well as which page of data the employee was viewing when they added the note. In the age of HIPAA compliancy, such logging is important.
- A system for filling out and generating government burial benefit forms for veterans
- A system for defining obituary templates, including the ability to insert dynamic information about the client into the template
- A system for tracking signed contracts and revisions to those contracts
- Functionality that allows items in the catalog to be combined into a "Package" of items; this is really an advanced e-commerce feature for bundling of services
- Packages are often sold at a discount.
- Packages can also be nested within other packages.
- A system for defining and calculating sales tax calculations; likewise, this is another e-commerce feature that can get complicated based on the geographic presence of the funeral home customer and its clients
- A "case status" system for tracking the status of customer cases, in which organizations can custom-define their own statuses
More detail about how the project is tested
- RSpec / CircleCI: Unit tests are used to cover most pieces of the code, and unit tests are run automatically by CircleCI before all merges
- Capybara / Selenium: Key interfaces are tested using Capybara and Selenium
- Peer Review: All code is peer-reviewed by at least one other developer before being merged
- QA Review: All completed work is reviewed by one or more QA engineers
- Code Climate: Completed work is analyzed by Code Climate for general code quality
More about the project from a technical perspective
- Server-side application logic using Ruby 2 and Ruby on Rails 4
- Server-side HTML template development using SLIM
- Client-side styling using Bootstrap 3
- Primary data storage using PostgreSQL
- Data search functionality using SOLR
- Job scheduling and queuing using Resque and Redis
- Image and document storage using Amazon S3
- Amazon CloudFront for serving assets over a CDN
- Amazon EC2 for web server hosting
- Application performance analysis using New Relic
- Issue tracking using Pivotal Tracker
- Daily full-team status meeting
- Version control using Git
- Pull request tracking and peer code review using GitHub
- Please see the testing section above for information related to QA
- Over 6,500 tickets worth of work has been done
Some of the development best practices that are followed
- Separation of business logic and display logic
- Automated testing
- Peer review of all code
- Git-Flow branch management
- Daily stand-up meetings
- Documenting of regression test plans
- Use of static code quality analysis tools
How communications flow in detail in respect to the work being done
- Despite being dispersed geographically, the development team stays in constant communication using HipChat, Skype, and GoToMeeting
- The team meets daily to discuss the work accomplished during the previous day and plan for the upcoming day
- Work is organized using the Pivotal Tracker application, and long-term communication and notes are documented there
Our general process flow for a feature
- The product team writes up business-level requirements for a feature
- One of our development leads analyzes the business requirements, works with the product team to iron out questions or issues, and then writes up technical requirements
- Several people from the development team will build out the feature and peer review the work as they go
- The work will go to a staging server where the QA team will test it
- For some features, the product team will preview it at this stage
- When the QA team approves the feature, it can be deployed to production
The Up and Running team
- 3 development subteams, ~11 developers total, each led by an experienced team lead
- 1 engineering lead who oversees 2 of the subteams
- 1 project lead who oversees 1 of the subteams and the project as a whole
- ~5 QA engineers on the QA team
- 1 QA lead who oversees the QA team
Thanks for taking the time to read through this. If you have questions or would like to talk tech regarding any of this, we’d like that. Here’s how to contact us, and we hope to hear from you.