Blog of Raivo Laanemets

Stories about web development, consulting and personal computers.

Hiring me as a consultant

The following steps apply when I am hired as a temporary contractor.

First step in hiring me is to figure out what my part in the project would be and what kind of value I could provide for you or your business. I am a technical person and I'm not doing graphical design or write contents. I work best in a team of 4-5 members and with projects that have the active development cycle less than a year.

See also my CV and my past projects.

What I Do

  • I do web apps.
  • I do web sites.
  • I do web scrappers.
  • I do web site optimizations.
  • I do project management.

What I Do Not Do

  • I do not design web pages.
  • I do not do Flash.
  • I do not do desktop apps.
  • I do not do mobile apps.
  • I do not draw graphics.
  • I do not write contents.
  • I do not do marketing.
  • I do not make videos.
  • I do not build embedded systems.
  • I do not provide loans and investments.
  • I do not sell ads place.


I prefer to use the following technology:

  • Node.js
  • PhantomJS
  • KnockoutJS
  • Vue.js
  • ExpressJS
  • Bootstrap
  • SWI-Prolog
  • MySQL
  • Debian Linux

This choice of technology suits for custom projects that cannot be easily implemented as plugins for existing systems and frameworks like WordPress.

The choice of technology should be agreed at the beginning of the project. This includes possible coding conventions. In the case of JavaScript, required language enhancements (ES6, Typescript, Flow annotations, etc) must be pointed out. By default I assume that we use the ES5 standard and avoid transpiling whenever possible. Change in the technical requirements can lead to contract termination as it might become impossible for me to do the work.

Generic Terms

I work through the company Infdot OÜ which I own. This makes international work and tax management much easier.

  • All code and documentation written during development belongs to the client (you). This can be somewhat limited in some cases (see Copyright).
  • The private project code repository will be available as long as I am involved in the project.
  • The private project issue tracker will be available as long as I am involved in the project.
  • Both sides can cancel development any time without any cancellation fee/penalty.
  • No 3rd party developer will be barred by me from the project.
  • Contract will be made with the Infdot OÜ.
  • NDA and other contracts can be signed electronically. This is legally binding in Estonia.
  • A possible client must agree with background checks and must be ready to be rejected by the results of those background checks.

Instead of the private repository/tracker (I use Git and Redmine), an external online service could be used, such as GitHub, Bitbucket, Trello, etc. or the existing tracker if the project already has it.


  • No work will be subcontracted to a 3rd party without client negotiation.
  • Work can only be subcontracted to another company (either in Estonia or other countries), to a sole proprietor (FIE, only in Estonia). Work cannot be subcontracted to individuals.
  • A possible subcontractor must agree with background checks and must be ready to be rejected by the results of those background checks.

Open Sourcing

  • No code part will be Open Sourced without client negotiation.
  • I reserve myself a right to reimplement (as a complete rewrite from scratch) common technical solutions (database driver, boilerplate code, etc.), that are not related to the project features, without negotiation.


  • Estonian copyright law does not allow copyright assignment. It is still OK for contracts with foreign companies but the contract must clearly point out the assumed jurisdiction.
  • An alternative to copyright assignment is an exclusive all-license.

Service accounts

  • All accounts on 3rd party services created for the project belong to the client. This includes Twitter and Facebook accounts, mail accounts, server hosting accounts, etc.
  • The client will be the contractual party for these accounts and will pay for these accounts.
  • I will not be responsible for these accounts unless explicitly agreed to.

Payment Terms

  • Work is charged hourly with quarter-hour resolution.
  • Amount of time taken by a task can be disputed before paying.
  • The client has access to the time list in the private project tracker.
  • The list of times is sent with each invoice.
  • Invoice should be paid in a month after receiving it.
  • No after-payment schemes will be provided.
  • Payments will be made to the Infdot OÜ.
  • If the project has an invoice not paid in a month, all work is stopped on it until the invoice is paid.


  • Taxes will be added to the invoice total (hourly rate * hours) when the invoice is sent.
  • Currently there is no VAT charged for Estonian clients. This depends on the total sales and the client will be notified before VAT will be charged.
  • No taxes will be charged from US and other non-EU clients.
  • No VAT is added to EU business clients. However, in some cases the client might have to apply reverse VAT charge in their country by their country law and rates.
  • Depending on work, VAT might have be charged from individuals in EU by their country law and rates. This will be handled case-by-case.

Payment methods

  • I prefer bank transfer whenever possible.
  • I prefer to receive payments from US and other non-EU clients through TransferWise.
  • I do not accept PayPal payments more than 100 EUR per client per month.
  • I can accept Bitcoin or similar cryptocurrency payments up to 1000 EUR per client without physical identification of the client. This is required by the Estonian law.

Work time

  • I work on Estonian business days. My work day lasts from 8:00 to 17:00 in GMT+2 or in GMT+3 during the daylight saving time. Current time in Estonia.
  • Work received after 16:00 will not be scheduled to the same time.
  • I do not work on weekends. Any work required on weekends is billed at the 3x rate and must be agreed on the previous week.
  • I'm often unable to answer my business mail and phone during weekends due to non-work activities.


  • I'm currently not looking for permanent relocation.
  • I'm willing to work on-site given that client pays all traveling and accommodation costs.
  • I can travel and work for 90 days visa-free in many countries, including US.
  • I can freely travel and work in any EU member countries for any period of time.

Typical Project Lifecycle

This applies mostly to long-term projects (> 1 month).

  1. Background information is exchanged.
  2. Time/cost analysis.
  3. Project code repository/tracker setup.
  4. Development and testing.
  5. Version release.
  6. Discussion of new features and fixes for the next development cycle.

The last 3 steps are looped until the project is finished, stopped or someone else takes over the development. The loop naturally covers maintenance. During the development I do my best to keep the working code in the repository. It might still miss features but it must be buildable and all features implemented so far should work.

Time and Cost of a Project

This also applies mostly to long-term projects (> 1 month).

The time/cost analysis is done by dividing the project into functional components. For example, a login page is a component. Then I write down all the tasks that are needed to complete a such component. For each task I assign the minimum and the maximum time to complete the task. I assign the bounds by using my own experience from previous projects. The cost of the project is a range (min...max) and is calculated by multiplying the total minimum and the total maximum by the hourly rate. This technique is not perfect and often underestimates the time/cost as new aspects or features that were not needed before are added to the project. The actual charging/billing is done hourly.

Fixed-price projects

I do not accept fixed-price projects unless specific conditions are met:

  • The project must contain no work with uncertain outcomes or interfacing with 3rd party systems that have non-documented interfaces (this includes most web scrappers).
  • The web application/site specification must contain screenshots of every view.
  • The specification must make absolutely NO assumptions about implicit features, performance, or security. These cover features like admin interfaces and form validation messages, securing certain data, and having the application/site perform well under full load. All of these must be clearly documented.
  • The client must be ready to renegotiate the whole project on every change to the specification.

The fixed-price projects are usually suitable only for very short projects that take couple of days.

Long-term fixed-price projects

An existing project might be turned into a long-term fixed-price project once the specific conditions have been met:

  • The project has been in development for 3-4 months.
  • There is a clear incentive to develop it further.
  • It contains work that is easy to estimate with high certainty.

These projects are ideal as they have a clear budget and timeline. I can provide reduced effective hourly rate for these types of projects as the risk of clashing schedules and the opportunity cost between the projects is reduced.

Hourly rates

Hourly rates depend on the value of the work and start at 96 EUR per hour.

Emergency maintenance contract

Emergency maintenance contract will be agreed per project. Typical terms:

  • Response time 10 days unless it causes significant losses.
  • 2 hours free of charge per month.
  • Monthly cost is 300 EUR at minimum and depends on the explicitly agreed responsibility.

The intent of the emergency maintenance contract is to be ready for unplanned and urgent changes.

Legality of actions

I will not do anything illegal. This includes:

  • Breach of criminal law.
  • Breach of civil law.
  • Breach of any contracts (including contracts with 3rd parties and cases when the contract terms are possibly non-binding). This includes violations of Terms of Services of 3rd parties.


Any cooperation with the client will be terminated in the following cases:

  • I am asked to do something illegal.
  • Client has provided fake (business) name or refuses to provide any real credentials.
  • Client demands loan or investment to continue the project.
  • Client demands unexpected work to be done with unrealistic deadlines. This includes work on unrelated projects.
  • Client asks me to behave harmful or incompetent to other parties.
  • It has become clear that the client lacks the resources to complete the project.
  • The previous rule also applies when the client has resources but is unwilling to use them.

A notice is sent to the client describing the current situation and reasons behind the possible termination. An attempt will be made to resolve it through negotiation.

Any access to repositories, projects trackers etc. maintained by Infdot OÜ will be revoked upon termination. The assets produced and paid for so far will be sent to the client by e-mail along with a notice of termination.


Annulation attempts to undo the effect of the contract as it was never agreed:

  • No written contract will be annulated unless with a court order.
  • Oral contract may be annulated in special cases to exchange or reassign intellectual property such as copyright rights.
  • Annulation is the last-resort method.
  • Annulation must not be used for illegal purposes such as tax evasion.


My preferred contact channel is email. The second is IRC. Please see my contacts page.