Our style (The Codegram Way)
At Codegram we care about software. We are a passionate team of developers concerned about both quality and productivity. And we think developing software is fun when done properly.
Throughout our experience, the following tools and standards proved making our clients (and us) happier:
The only constant is change and software needs to respond well to it. Thus, code quality is a must in our day to day. And we know 100% test coverage is not enough —it is still mandatory though!
Through techniques such as refactoring and promoting regular code reviews among our developers, we aim to deliver well-crafted, high quality software. Software that not only works now, but will be extensible and easily maintainable in the future.
Business Driven Development
What exactly does lead to a good software design? We believe in software driven by business value, the so-called outside-in development. It focuses on the why — why does this particular feature serve a customers' interest? To what extent will this other feature make the user experience better?
We try to focus on the core value of your project, delivering the most valuable features first. And we start describing these features, because we don't want to end up implementing something that nobody is going to use. In a way, code only exists to make tests pass — we code just as much as needed by the particular feature we're working on.
This leads both to a cleaner design and to less code. And less code is less error-prone software. Actually, we wish we could help you without writing a line of code.
We manage our projects together with the client. We don't believe in specification documents (in a broader sense, we don't even believe in paper). We don't believe in written requirements either — mainly because they don't exist.
Your project needs keep evolving along with user feedback and ever-changing industry demands. We adapt to those needs reducing the overall cost, focusing on the features that matter. That means we work together not just for you, but with you as well.
In order to make all this possible, we embrace iterative development, frequently delivering small releases. These are driven by user stories, which serve as documentation for the project.
User stories are the main tool of translating your ideas into implementable features. You express your ideas in your own language — your business domain. We map these into more specific software-related concepts, in tight cooperation with you. This way we always work on valuable features, features that are expressed in your business domain.
This preliminary stage helps you define what you really expect from your project, and it also serves as a guideline for actual code and tests. Plus, these user stories become the project documentation, and since they are tightly related to the code, they are always up to date!
We also borrowed some goodness from the Extreme Programming movement — developing in pairs.
This technique is one of the main keys to well-crafted software. Two developers working together produce more reliable, higher quality code, in less time. Through continuous discussion and collaborative coding, better designs and implementations come up.
Giving back to the Open Source community
We work in the edge of the Ruby software craftsmanship community, continuously revisiting our tools and practices according to both the evolving technology and market.
Since all the tools we use from the Ruby universe are open source, we give back to the community by periodically contributing to most of the tools we use on a daily basis, such as Ruby, Rails and RSpec. We also develop open source tools which enhance the existing Ruby ecosystem.
You can check out our open source tools on the work section or directly on our github profile (and fork some of them if you want!).