Principles for software development
Software development is a complex activity, and especially so for systems over a trivial size, in a non-trivial domain, with a non-trivial usage performed by a team of a non-trivial size. All of these characteristics certainly apply to Tradeshift.
As professionals doing software development, we are all guided by our own and commonly shared background — where Clean Code, Clean Coder, Pragmatic Programmer, Extreme Programming, The Agile Manifesto, Structured Systems Development, Lean Software Development, etc all are part of that cultural heritage.
When working together in a company on a common codebase, with a common goal, there are certainly advantages to align practices and principles — which manifests in processes (peer reviews, iterative development, continuous integration and development, etc) and tools — IDE’s, compilers, build automation servers and frameworks, infrastructure automation tooling, etc.
At a much more foundational level however is a shared understanding of preferences: How to navigate a landscape of choices that seemingly are equally valid, when considering business requirements and requests, alongside with notions of technical debt, good craftsmanship, best practices, functional and non-functional properties, risk-mitigation and opportunity capitalization, etc, etc.
The following is a distillation of what we currently believe to be our preferences in Tradeshift Engineering, that help guide us in making the right choices. Enjoy:
First and foremost, we care. We care for each other, the business, our users and our code. We care for democratizing business and building the world’s largest network for businesses.
We make decisions every day where two good things are at odds. Our daily activities & choices are a reflection of the preferences we hold strongest.
These statements show where our preferences lay. While we recognize there is value in the right-hand side, we generally prefer the values on the left.
Being on an adventure over being safe and cuddled
We do what has never been done before. We are building the world’s largest network and platform. It’s difficult. It’s challenging. But we do it because we would rather tackle overwhelming challenges than playing it safe..
Helping my team deliver over making individual contributions
We succeed as a team. We assist our teammates when they are struggling. Taking the time to make each other better will make us collectively stronger. We would rather have a well functioning and performing team than a few superstars that do not play well with others.
Being part of a global team over supporting my immediate neighbors
We have colleagues all over the world and we make it a priority to work well with each other and meet halfway, even when we have never met in person. We acknowledge that close physical proximity provides more favorable premises for communication than distant relations — and we try not to fall into the trap of giving immediate neighbors preferential treatment.
Delivering on promises over working predictable hours
We are dedicated to meeting our commitments, and for making ourselves and Tradeshift successful. We strive for work-life balance, and are willing to go the extra mile when needed.
Building products users love over products users request
We strive to simplify a complex domain. We build products that solve the root problem, not just provide a bandaid. We challenge complex external requirements to protect the user experience.
Accountability for my work over focusing on current tasks
We take responsibility for our prior work. We monitor our solutions after they are released. We step up to fix problems in production. We value full life-cycle ownership of components.
Working on the full product over focusing on technical perfection
We strive to understand the business context surrounding the projects we work on. We share our opinions on what should be built and how it should be built. We look for solutions that solve problems on a platform-level. We balance the scope of our designs and implementations with the product and company goals our solutions would achieve.
Getting feedback and learning over unwavering execution
We take a step back from time to time to check in about how we are doing and where we are going. We are always looking for ways to get better, for data to validate our assumptions, for evidence that we are on the right path. And while we keep an eye out, we are full steam ahead.