Delivering a Better Customer Experience Through High-Quality Code
A discussion of how one large organization has used digital transformation and high code quality to drive a better user and customer experience.
Join the DZone community and get the full member experience.Join For Free
As a leader in the mortgage finance industry, Fannie Mae embraces innovation and invests in technology that makes us more efficient, improves our service to the market, and provides exceptional value to our customers. Innovation is woven into our mission to provide a stable source of liquidity for mortgage lending in the United States. We serve the people who house America, enabling lenders to create homeownership and rental opportunities in communities across the country.
The mortgage ecosystem increasingly demands innovation to address the housing needs of future homebuyers and renters, and it relies on technology to meet those needs in a safe, sound, and efficient manner. Because Fannie Mae operates at the center of the secondary mortgage market, we are uniquely positioned to help drive technology in housing finance forward while laying the groundwork for others to follow. Our engineers are deploying the cutting-edge tools and principles necessary to support a rapidly shifting market through quality, ingenuity, diligence, and security. They are delivering value to customers in the form of dynamic new business capabilities and features, and doing so quickly and safely in a sustainable, predictable, and cost-effective way.
Fannie Mae’s engineering landscape today is the result of significant changes made over the past several years. To drive consistency and high quality across our engineering teams, we have made our processes leaner and faster. We ensure our product delivery teams have access to the right resources and that our software engineering teams, who need to be able to respond quickly to new needs, are empowered to develop products and capabilities while leveraging robust engineering principles, practices, and technologies. And, we continue to foster a culture of security, creativity, reliability, and continuous innovation – one that challenges our talented people to bring all their skills to the fore.
By embedding several key fundamental design principles into our software development practices, our squads are now working more efficiently and effectively than ever before. These principles are helping us to develop highly scalable and maintainable code and build highly cohesive systems. And, we continue to build and maintain systems that are safe and secure, as defensive programming and robust exception-handling are also part of our core practices.
Many of these improvements came to bear in 2020 as we had to identify and scale solutions for borrowers and renters impacted by COVID-19. At the onset of the pandemic, we were able to deliver new solutions for our customers within weeks to ensure we provided the support homeowners and renters needed. We redirected multiple teams to respond to the crisis, building new technology capabilities for forbearance, and setting up options for loan payment deferral and loan modification for homeowners. Our daily build process and use of our CI/CD pipeline enabled us to significantly reduce the delivery timeline. And, since these teams frequently deliver production releases, we also minimized the development work that was put on hold when our priorities shifted.
While there is no shortage of best practices in software development, several of those we established will continue to allow our developers to uncover new ways to innovate and deliver powerful solutions for our customers and, in turn, support the broader market.
Implementing Lean and Agile development principles produced immediate results. Teams can operate independently to deliver faster, more sustainable, and higher-quality results. Now, our time to production is measured in weeks, not months.
By moving to trunk-based development, our developers actively collaborate on code in a single branch, called a “trunk,” rather than multiple instances of the same code. Merging multiple releases was cumbersome, expensive, and error prone. But by enabling several people to work on different parts of a project at the same time, our engineers get to spend less time consolidating and more time coding, without sacrificing quality control.
We also implemented “feature-toggling” to enable continuous delivery for our developers. As our teams build code changes into one trunk, they can also continue to work on unfinished product features without delaying release, which allows for incremental improvements of the software. Teams are testing more efficiently and rolling out new features in real-time without affecting users.
We validate consistency with architecture and design patterns through source code reviews, which give us a fresh pair of eyes on our code and allows us to re-validate our solution before final submission. Through this quality assurance peer-review process, developers thoroughly review each other’s code to catch and de-bug issues and identify potential improvements in the quality of our products.
To ensure the quality and security of our code, we automated our Continuous Integration/Continuous Delivery (CI/CD) pipeline to run scans and enable quality gates to track key indicators such as code coverage, static code quality, security scans, and unit test pass rate. These scans reinforce the best practices that our teams follow. Going forward, we will continue to focus on leveraging our CI/CD pipeline to automate best practices and controls, which will enable our company’s Digital Transformation.
We focus on our Test Pyramid by reducing expensive regression tests at the end of the cycle and by moving testing to the unit level. Lightweight testing earlier in the lifecycle allows us to execute functional and performance testing on a continuous basis.
Learning and Development
Finally, enabling our teams to drive their own continuous learning and improvement has been critical to our culture of high quality and shared responsibility. Focusing on learning, instead of training, has helped improve adoption of test-driven development and the Test Pyramid using real problems the team is trying to solve – which we’ll explore more in a subsequent blog.
Through these and other innovative approaches, we have seen better application performance, less rework, and improved cycle time – helping Fannie Mae to better serve our customers.
Published at DZone with permission of Lindsay Bhandari. See the original article here.
Opinions expressed by DZone contributors are their own.