Our methods
We employ agile practices, both in development and project management. We believe that thanks to this we can give our clients additional value no traditional process can deliver.
Let us explain how we work - view our presentation:
If you don't have time for that here it is in a nutshell:
With us you get the features you need quickly and for less. You can start using first working version of your system in time it takes others to just write a specification document.
Iterative development
Iterative development is a concept of developing a product (or a software application) in short intervals of work after which project direction is adjusted to meet new situation. This idea emphasizes adaptability and flexibility of the process. Since the list of functionality and project direction are adapted every few weeks projects are rather evolved than designed in detail from the outset which leads to better results.
In general we use iterations of 2 work weeks, but depending on the project's nature it can be up to 4 weeks. Whatever is delivered at the end of each iteration must be done. Done means: fully developed, tested and deployable to the production server. In fact, it normally means deployed to the client's production server.
That means the client gets working software with new features he asked for every two to four weeks. If something is difficult to implement it might be just one change taking the whole of that time, but whatever is at the end is complete and usable.
Key benefit: you get new version of your system every 2 weeks, which means you don't wait more than 3 weeks for any new feature you might come up with.
By the way - Scrum (our project management method of choice) - calls iterations "sprints". Hence our name.
The deal to move ahead
The team and the client (be it internal or external) make a certain deal at the outset of the project. Every sprint the team will commit to delivering certain functionality/requests at the end of it, the client commits not to change direction agreed with the team during the iteration (sprint).
The development progresses from iteration to iteration, but at the beginning of each one the client can change priorities, add new requests he has just invented, delete some others that are no longer needed etc. This is achieved by means of a list where all requests are kept. It is the client who's responsible for ordering that list according to his current priorities.
Thus the client has full control over the project direction every two to four weeks, but the developers get those two to four weeks to, well, work. Software development is a creative process, it takes highly intelligent individuals hours of focused thinking to produce good code.
That's why this deal between the team and the client is needed. It gives developers the time to figure it out how to implement it - and do it right.
Key benefit: flexibility to adapt as your needs change, commitment so that the team can focus on work.
Code first
We focus on delivering working code. Even during the first iteration (or sprint) the code delivered will be done. It might not be much if we start from scratch, but it will be working, tested, deployable web application even after the first two weeks.
The whole agile movement emphasizes the importance of the working code over formal processes and documents - and we fully agree. After all, the client wants working software, not "Statements of Work", "Requirement Definitions" or other documents that don't do much.
It's not to say that we don't believe in adequate documentation, use of models and diagrams. It's just that we don't claim those are valid deliverables, because we think that for our clients it is the working code that counts.
Key benefit: you get first working and usable version of your system in time it would take traditional companies to just negotiate the specification document.
Always develop what is important now
As mentioned already - before each iteration (or sprint) a client can do pretty much everything they want with the list of things to be done. Most importantly - priorities can be changed, features can be added or removed - or adjusted.
That means that at any given moment the list reflects the most current priorities of the client. And since the team always takes tasks from the top of the list what's being developed is always what's most important for the client.
And that is a good thing - all too often on software development projects companies end up paying for stuff they never needed and not getting some that they need because they are asked to provide all their requests and wishes once, in advance, at the start of the project. It's totally unrealistic to expect that someone would know what features they really need in software they haven't yet seen it. It is normal that best ideas come along the way.
We accept that reality.
Key benefit: pay for the features you really need, get those that are really important sooner, decide later if you still want the "nice-to-haves".
No hostages taken
Since at the end of each iteration (sprint) the client gets fully working product he is no longer a hostage of the development team. At any moment the client can say what was developed so far is good enough - and walk away with his working product.
We don't take hostages. In fact we only sell services - whatever is developed is yours all the time.
Key benefit: you own your system, and you can stop the project whenever you wish - always keeping your working system you can use.
Be up to date on your project
Every day we do a team meeting, every day we update some simple statistics that track our progress within each iteration and the project as a whole. At the end of each iteration we show the client what we did, then we plan together what will be done next.
We encourage our clients to participate in all of that because it allows them to easily keep track of what we do, day by day.
Key benefit: you'll be know what we are doing for you every day. No other process offers this degree of control.