Development practices
Years of development experience have taught us that having a clear development methodology is an important part of ensuring project success. This is a bit of an introduction to our chosen approach to software development.
Open source software
This is probably the most important choice that we make in development. When we develop software for you, you have full ownership and access to that software’s source code. That means that you are free to examine, modify, and distribute everything we write. The implication of this is that there is no lock-in; we believe that the quality of our work stands on its own, and we don’t need to force clients to use our services. It also affects our platform decisions; we choose high-quality, open-source server software because it grants us those same freedoms we pass along to clients. We can make our own custom modifications and improvements as needed, and we aren’t dependent on vendors for bug fixes.
Agile development
Agile software development means working closely with you. Traditional development methodologies involve a rigid and complex approach, where requirements are gathered up front, then all development is done without further input from the client, until the next development iteration occurs. This can lead to an enormous gap between what you want and what you get. It happens for two reasons: first, because your requirements may change as new information becomes available; and second, because gathering requirements is a complex process in itself, and can be prone to errors.
In contrast, we stay in active communication with you during the whole development process. As we finish components of the project, we share them with you, allowing you to provide feedback and giving you a concrete understanding of what we’re developing. It also means that you have working software delivered to you quickly and continuously—software that you can start using right away.
Clear and open communication
While using agile methodologies already ensures a good level of communication, we take this further. We strive to discuss projects with you in clear, understandable language. In addition, you have the right to know where things stand at all times. When we make estimates, we tell you how much risk is involved, based on our experience with similar work, the complexity of the task, and other factors. That way, you can make clear decisions with the best information available. We will let you know if we don’t know something and need to conduct extra research. We are satisfied that our work is good; we don’t have anything to lose by sharing with you.
Fairness
It is our responsibility to you to be up front and fair in our work. We bill fairly, and only for time actually spent working on your project. We keep you up to date on progress. If we give recommendations or advice, they are for your benefit, not ours. We safeguard your confidential information and data, and do not share it with anyone without your permission. Mostly, we respect our clients, and act so as to be worthy of the same from you.
Security
With 24/7 Internet connections, the security of computer software is more important than ever before. We understand the principles of secure software and system design. We encrypt sensitive data wherever possible, test our code thoroughly with valid and invalid data, and ensure our validation cannot be circumvented. We protect systems with strong passwords, log errors and invalid requests, and scrub all input before using it in trusted contexts.
Good design
A good piece of software depends on a good architecture and data model. This is the most critical aspect of a software project, and requires a high level of expertise. We have development experience with a wide range of programming paradigms (object-oriented, functional, procedural, event-driven, concurrent), and can choose the best for your application. We design for good unit testability, and use proven design patterns where appropriate. We have wide experience with relational databases, and can create data models allowing for good flexibility and scalability. In short, we do it right.
Usability
We are usability advocates in software and web design. When a user interacts with software, it should be easy to learn, efficient and error-free to use, and enjoyable. You’re probably familiar with counterintuitive, painful software. We design with users in mind; our designs start with a user interface, and decisions are made based on the user experience. We then test our designs carefully, and make changes based on user feedback. Usability is one of the most important criteria of software development, and we treat it as such.