Written on 2016-05-26 12:30
Depending on a project the price of my consultancy may vary between 10€/h and 50€/h. The exact price depends on various factors – for instance:
- How difficult is the task,
- The value it will add to my portfolio,
- Are you willing to let me release the software under a FOSS license,
- How fun will it be to work on it,
- The experience I'll gain during the consultancy.
We may also agree on a fixed price with a well defined milestones. I prefer agile methodology where I have a constant contact with the client – this approach results in a product better suited for your needs and in much shorter delivery time.
Improving the software and maintaining the infrastructure
I can adjust the existing software for your needs by porting it, extending or improving its quality. I've worked with many projects written in various programming languages. Getting used to the new code base is a very good exercise and I like it.
Additionally I can maintain the existing infrastructure for your company, like a website, service, server, application etc. If you want to host your application, website or an email on the internet and don't want to bother with managing the server, I can provide a hosting or create and configure a separate VPS for you. I have been working with Linux boxes for many years and I can do that with ease.
Minimum viable product
I specialize in creating the prototypes (minimum viable products), projecting the solutions and implementing them. I have experience in device drivers, operating systems and application development. I've worked with a wide range of the embedded platforms (Arduino, Raspberry Pi, Beagleboard, Cubieboard, Tegra, Zynq, Parallella etc.).
My solutions are reliable and well designed. I can achieve this by extensive testing, writing documentation and following the best development practices. Such approach results in the extensible, well tested and production ready software.
Maturity of the dependencies
Wherever possible I try to depend on a well tested and proven in the production software. If no such solution exists I carefully test and improve existing libraries to meet the reliability requirements. I'm a team player – I try to contribute to the projects I use.
Before implementing any new feature I first write tests for it and document the API, what clarifies its usage and responsibilities. This helps to write a software which lasts for a long time and is easier to maintain.
I try to avoid the feature-bloat by carefully designing what should be implemented to achieve the final goal. I'm also very careful when I pick the dependencies to make sure that the final solution won't be a resource hog nor will work inefficiently.
Despite being suspicious about adding an unnecessary features I design the software to allow its extensibility. It is important because requirements may change or an additional functionality may be needed in the future. This makes possible a software reuse and improves the flexibility of the development process.
Extensive documentation, usage instructions and tests are a must. This is crucial for the software which will be usable longer then a few months or years.
I avoid vendor lock-in because of ethical and practical reasons. This means that you may pass the work to other developers and there is no risk that the vendor you depend on will close its business.
Reducing the effort of software development and usage to the minimum makes it maintainable and extensible by everyone, not only the authors. If I use the software created by other people I try to improve it and "give back".