I’m beyond proud to be one of the three founders of PayJunction. We met at University of California, Santa Barbara in 1997 while studying Computer Science, became friends and set off on a journey to engineer this company. I manage a small, talented team of engineers. In truth, we embody a senior engineering culture. We have high expectations for our team. We work on systems that process billions of dollars, so the margin of error has to be near zero. This creates an exciting development environment where the right type of person flourishes. We live, eat, and breathe UI, UX, security, coding, testing and dev ops. Every piece of our process is an art that we strive to perfect.
Big-picture developers flourish on our team. You must have a thirst for knowledge that drives you to understand the system as a whole. It requires being more than merely a full-stack developer. All our team members participate in coding, security, testing, QA and dev ops. We don’t silo our talent. Quite the opposite, we expect that they can participate and contribute at all levels.
We are Agile and implement SCRUM. We do production releases every two weeks with the goal of never rolling back a build. We accomplish a superb track record with continuous integration testing and peer code reviews.
We operate in a Linux and Mac environment, and use Angular for our front-end development framework. Puppet is our automation tool and we rely on Selenium, Karma and JUnit for testing. And test we do; we even test Puppet code, which few engineering teams do. We are test fanatics. We expect every developer to check in code with sufficient test coverage.
Our Coding Culture
To unify our team around the same philosophy, our engineers read the following:
- “Clean Code: A Handbook of Agile Software Craftsmanship” by Robert Martin
- “The Pragmatic Programmer: From Journeyman to Master" by Andrew Hunt and David Thomas
- “OWASP Top Ten Project”
And for the over-achievers:
- “Bulletproof SSL and TLS: Understanding and Deploying SSL/TLS and PKI to Secure Servers and Web Applications” by Ivan Ristic
- “Site Reliability Engineering: How Google Runs Production Systems” by Betsey Beyer
It’s important to be on the same page regarding the fundamentals of good code. This practice reduces code-review cycles and allows our team to maintain high velocity. Establishing shared principles from the start makes collaboration much easier.
We also follow community-established style guides, including the following:
- Angular Best Practice for App Structure and AngularJS Style Guide for file organization
Those resources guide us from a technical perspective, while “Clean Code” anchors us philosophically.
Collaborative, Long-Term Vision
Working on a smaller team means taking on responsibilities beyond what you’re comfortable with. It forces you to stretch and grow in ways you didn’t expect, and uncover interests you didn’t know you had.
That said, we have to pay attention to details other staff would handle if we were on a larger team, which is why collaboration is so important. We talk our solutions out. The reality is no one knows everything, and the best way to reach our shared goal is through our collective knowledge.
At the planning stage everyone might have different ideas about what to do and how to do it. We ask the tough questions: What makes sense from a design perspective? What are the minimum requirements this feature needs to be functional? What does it need to be useful?
Peer review from one or two people always occurs during the development cycle. That process ensures our code is intelligible and that it can last long term even if our team evolves. We believe our code isn’t simply for the computer; it’s for the long-term codebase we maintain. When you look back over the years, you see our clear legacy of writing maintainable, clean code.
Testing More Than Expected
Changing code is always a risk. Even if there’s an issue that needs fixing, it’s hard to know that your solution won’t create unforeseen issues. To overcome that possibility, we run continuous integration tests on every Git commit made.
With so much testing, you fail fast, but we’ve found that helps contain stress. While other engineering teams are extremely chaotic, PayJunction offers much quieter, more focused development.
It’s rare that we roll back a build or introduce a bug, but when we do, it’s manageable. We have many checks and balances to catch issues post-coding but before a pull request is merged. That helps us spend less time putting out fires and more time ensuring quality.
Tying It Back to Family
Culture matters. We value long-term relationships over short-term profit. We work hard to build beautiful, impactful, environmentally conscious products that benefit our customers while having a great time with amazing people in beautiful Santa Barbara. We prioritize a family-like work environment where personal growth is as important as profit.
If this blog resonates with you, then you might find a home on PayJunction’s engineering team. We would love to speak with you.