Never ever work without a written contract


I formally started Sparxsys in March 2010. I am just an engineer by education and never really learned anything about managing a company or a team. There are specialized courses like MBA for such stuff, I do feel sometimes about not knowing all these things when starting out, but I know from my experience that you can always learn it in the field and that learning is life long.

Today I want to share something I learned.

At Sparxsys we are currently into Drupal development services and JIRA trainings. This post is all about software services and how you should deal with clients. In web development services client will share the requirements of what they want to build. May be they are looking for a web portal or some web based application. Over the year I have learned so many things about requirement gathering where you understand the client's requirements and store them in written format, finalize it and offer a solution to the client. This is better known as Business Analysis, I am not an expert on this topic and I don't want to be, but I can definitely share my experience here. This post is not about on how to do requirement gathering, probably I will write another post on it but I want to share how to deal professionally with your clients. It will give you peace of mind and also make sure you are safe legally.

Never ever work without signed contract
You know what I mean. When you start your own company, you may not know about these things, I didn't know too, there is no one who can guide you well. You can't afford to hire lawyers, they are a**holes anyways. What I have learned in all these years is that contract is just a paper where you write what all X number of services your company will offer in return of Y amount of money in Z many days or months. Don't worry about fancy language, it could be in simple English that everyone understand. As you grow your clients you can improvise this contract.

Your contract should have.

  • Amount
  • Attach the finalize proposal that contains the list of features
  • Deadlines/Timelines of deliverable
  • Payment Schedule
  • Termination clause
  • Penalty for non delivery
  • Penalty for non payment or on time payment

Make two copies of the contract, both parties should sign it and keep it with them. Also mention in the contract that additional features or any changes will require separate discussion and will be treated as change request. After certain point of time your client will say that "I want this feature too" or "You promised that and didn't deliver it". You can always refer to this contract to remind your client about your initial agreement. Of course this contract is for both the parties. Your client can also refer to this document if you don't actually deliver what you promised. More importantly it will give you peace of mind and that really means a lot, at least to me personally. Nobody wants to get into legal matters and in case of disagreement court cases are worst thing to do but having a document will ensure that you have clearly written down your offerings. In most cases this is just enough. We never really had a situation we had major disagreement with client and signing a contract is something that we always do.

I did make several mistakes where I didn't ask the client to sign the contract and due to that had conflicts later on. Client can refer to the conversation you had long time back but if it is not written and signed then it is not part of the agreetment.

There are few other things that I want to share with everyone. Nothing related to the contract. Just my experience.

Never do any personal favors to your clients
Your client may ask you to do some favor like "creating a website for their wife", "Add this feature for free", "Setup this for free".

Never do anything for free. Personally I know and can do lot of different things. I am quite comfortable in server manangement. I know hardware stuff really well. I am also good in excel. I am comfortable working on linux, windows and mac. Overally I have good technical understanding of things, thanks to my experience of over 11 years as of 2014 but that doesn't mean I will do thing for free. Usually client's ask me for favors all the time. I define favors as something that you can do without charging money. Usually I say no to things I don't specialize in, even if I know how to do it but more importantly I know from my experience that people don't respect for things that they get for free. I have done lot of favors to people and now after bad experiences I have learned that people don't remember these favors.

Money is all you should care about
You will hear and ready everywhere that people want to start business because they want to do something good for the society or world, that is bullshit. I believe that you should first care about yourself. Business is all about making money. I have no hesitations in saying that I need to get paid really well. Of course that also means that I will provide good service to my clients and always be honest with them, but whatever decisions I make are always oriented towards making profits, otherwise there is no point of doing business. I guess it is true for everyone but people don't want to openly accept it.

  • Never hesitate about asking money
  • For small to medium project, at least take 60% advance
  • Do not start work until payment is received

I want to emphasis on the last point. Client might agree to the payment and payment terms but never believe them when they ask you to start the work and payment would be made in few days. You will make clients for a long time, be strict when it comes to the timely payment, otherwise client will take you for granted. I made this mistake intially and that resulted in late payments by several months, during that time client will also add new features and knowing that your earlier payment is due, you will be under pressure to accept that. So be strict about the payments from the very beginning.

Client's are not your friends
Never ever make friends with your clients. Ocassionally socializing with them is ok, May be you can go out with them for lunch or drinks but I personally avoid it all the times. The more you become casually with them the more your business will suffer. In my case, being a very small company client's usually interact with me, right from the very beginning till the final delivery, and even during the support. Right now I can't really afford to have multiple people taking care of various departments in our company. I do multiple roles like sales, business analysis, project management, accounting and client support. Clients know that and they also know that I am the owner/founder of the company and have most of the decision making powers. So just keep your interaction with them very formal.

and finally..

Prefer formal wear when meeting clients
People make judegments by looking at you. This may seem like a small thing but the way you dress up does give a strong message to the people you deal with. You don't want to hand over an Invoice of Rs. 2 Lakh to your client wearing a torn jeans and t-shirt. I hope you get the message. In winters I even wear blazers, of course it is not comfortable but it is all about the money!

These are just things I wanted to share based on my experience. I am no way an expert but have learned from my mistakes. Hope it helped you. You can always reach me at ravi at sparxsys dot com to share your experience. I will be glad to know how you guys are doing these things. We can always learn from each other.

Good bye and have a great day!

P.S. - I will soon share the sample contracts and other legal documents in this blog.

How to change the JIRA Chart language from Hindi to English

Almost every week I install new JIRA instance either for training purpose or as part of the JIRA consultation service that we provide to our clients. I recently bought a new laptop with Windows 8.1 with 8GB RAM, this is only for training purpose and yesterday I installed JIRA on this laptop. Everything was fine but I noticed that that language in various JIRA project reports was hindi. May be it was because of the system default or due to time zone. It is good to have language support but we all are more comfortable with English, also some of the characters were not visible properly on the chart.

It was only the language in charts that was in Hindi, everywhere else in JIRA English was the default language.

For changing this the first thing I did was to look into the System > Settings and look for the Default language, but it was already set to "English (United States)". So I searched on Atlassian forums and found a clue on this link.

The trick is to add the -Duser.language=en argument in your setenv.bat file.

Here is the excerpt of my setenv.bat file.

set JVM_REQUIRED_ARGS=-Djava.awt.headless=true -Datlassian.standalone=JIRA -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Dmail.mime.decodeparameters=true -Dorg.dom4j.factory=com.atlassian.core.xml.InterningDocumentFactory -Duser.language=en

Just restart your JIRA instance after making this change.

Problem solved :)

Clicked on MS Outlook by mistake and it reminded me of my happy job days

Microsoft Outlook

Today I clicked on outlook icon by mistake, all of a sudden it brought back so many memories, mostly good. I worked for 11 years before diving into my startup completely. I have always been honest to myself and all other people around me about my journey so far.

We have tendency to showcase our best on social networks, most of it is actually fake. No one will share their true feelings. It is like a small self dosage of happiness that we seek in terms of number of likes. We upload pictures of partying, enjoying with friends, pictures of happy moments. I think it is all fake. Everyone does it and I do it too.

The point is that everyone around me thinks that it is really brave and cool to start something one your own, but in reality it is quite the opposite. I am not brave to leave my job to start my company. The real reason is something else. I was never a good employee, I was never good in working for someone else. Though I really miss my job days sometimes. It was so much fun. I really had amazing time in job.

When I was working

  • I never had to worry about the money.
  • There was a cab to pick me from home.
  • I never over worked.
  • I used to play TT or Carom in office for hours.
  • The weekends were off.
  • Going to Ambience mall for lunch 4 days a week.
  • I got opportunity to travel Europe.
  • I worked entirely from home for the last 3 years flat.
  • There was no pressure from my Manager.
  • My whole team was in France, US and italy. None in India that means Zero politics.
  • I used to work from blackberry most of the times.
  • I loved my profile. I learnt so many things.

I really had no issues with my job, in fact it was a like a dream job for me, but still I left it to focus entirely on my business and to grow my company. My job was great but my heart was not into it.

Managing your company is not cool. If you are not happy with your job, then find a one that makes you happy but don't think of starting your own company. Working for someone is not that bad. When you start your own company, you have 100 things to worry about - paying salaries, office rent, managing clients, managing team and so much more. It is like 100 jobs at the same time. The reward is also not good. You may earn more money but you will not enjoy it.

Having said that, it doesn't mean I am not happy. I just feel I could do much more and achieve something bigger. I think this feeling of under-performance is always there. Doing something on your own and opportunity to learn so many things gives me immense satisfaction which was not there when I was in job.

I wrote about this feeling of unhappiness earlier. You can read it, may be if you are like me then you can probably relate to it. I really look forward to meet like minded people who are on a similar path like me. Contact me at ravi [at] sparxsys [dot] com to share your thoughts with me :)

How to get LiveReload working with Vagrant and auto compile scss files from shared folder

Last few days are amazing. Learning so many things, especially setup of Vagrant in our company. I had few issues with the performance of Drupal running on Vagrant on windows host which I fixed yesterday. That was one milestone achieved but I didn't realized that there would be more obstacles.

We started using Omega 4 for all of our projects now and it is great. Especially compass support of SASS that enables us to design great websites in short time. The only problem is that it is not smooth to setup. If you read the Omega 4 documentation you will come to know that they have clear instructions on how to setup this stuff. I will not cover that in this blog. It is already well documented and there are plenty of articles on the internet.

I did all the setup for Omega 4 but the problem was that Live Reloading was not working and the .scss files were not compiling automatically whenever there are some changes done in them.

My current setup is Vagrant running on Windows 8.1, and guest OS is CentOS 6.5

Steps to get Live Reload working

First make sure that live reload is enabled in Drupal Omega 4 settings. Go to your Omega subtheme settings, under Development tab check the "Enable Development extension" and then under it check "Enable LiveReload". Here you would notice that LiveReload server uses port 35729. We will use it just now in the next step.

Changes in the Guardfile

You will find the Guardfile under the root of your subtheme directory. Edit it and do the following changes. We need to mention the ip address as (I am not sure about the purpose) and the port number here.

guard :livereload , :host=> '', :port=> '35729' do

Now enable the Port Forwarding in Vagrantfile

Add the following line to forward 35729 port from guest to host. "forwarded_port", guest: 35729, host: 35729

These are the changes I did and it took me 5 hours to figure out after lot of researching and hopefully this will work for you as well. Provided you are using the same environment as I am. At this moment just reload your Vagrant and try whether LiveReloading works or not.

Changes in .scss file are not detected from Windows Share, but there is a work around

I am still stuck here. If I make changes directly in CentOS VirtualBox then Guard picks up the changes immediately and .scss files are compiled when I make the changes through windows then it won't. I tried few methods but didn't succeed yet but there is a workaround which works fine.

Trick is to force the polling

bundle exec guard -p -l 10

The only problem with this force polling is that it is not super fast. You have to wait for few seconds for Guard compile the .scss files, but I am still ok with it. At least it is not blocking issues.

So far loving working with Vagrant. Lovely.

How to speed up Drupal running in Vagrant on Windows Host

I recently install and setup Vagrant on my Windows laptop. The only reason I used Windows on my laptop is because of the trainings I conduct. Most companies use Windows based systems and it is difficult to train them if you are showing demos on Linux and they have to repeat the same on Windows. For that reason only I used Windows. When I am not providing training, I am usually developing stuff. Mostly on Drupal and most recently on JIRA Plugins (Yes I am learning Java).

I heard about Vagrant in the past but never really had enough space to try it out. Recently I decided to not take usuall Drupal projects and will only work with smart clients who are willing to pay for the service and quality. That decision is costing me money, as I don't do lot of work now but I am happy with the peace on mind. This gives me with some extra time which I now devote in learning new things and improving processes in my company. When you are on your own, you need to spend your time wisely. Free time means opportunity to learn new stuff.

I was happy to understand the whole workflow of Vagrant and quite like it actually. Everything went fine. Installed CentOS 6.5 using Vagrant and setup LAMP on it. I even installed a blank Drupal site just to test it out. It worked fine too. I even created a package and moved this customized CentOS box to another machine and it worked perfectly too. I loved this idea to have exact same development environment. I will now ask everyone in the team to use this box.

So far it was great, until I actually cloned one of our complex Drupal project which we have to deliver in few days. That site was running horribly slow. I came to know that the performance can be increased if we enable NFS for file sharing but unfortunately NFS is not supported on windows.

So I searched a lot on google for possible improvements. I mean Vagrant can be installed on Windows but just because of this NFS issue it is impossible to use it for LAMP. Finally I found we tricks, which I applied and it really improved the performance. Not great but atleast usable.

Install the following Vagrant plugin in your host, Windows in my case.
Someone has written this plugin to enable NFS on Windows. I found this after searching a lot on google.

vagrant plugin install vagrant-winnfsd

Now enable the root of your project folder with /vagrant folder where I keep my website files. This could be any directory on your setup. don't forget to enable NFS by using type: "nfs"

Do the following change in your Vagrantfile.

config.vm.synced_folder ".", "/vagrant", type: "nfs"

I realised that increasing the memory also has positive effects on the performance.

Also increase the memory of your virtual machine. I have 8 GB of RAM so I can afford to allocate 3GB to my virtual machine.

config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--memory", "3000"]

Lastly some tweaks in the Apache configuration file for some extra improvements.

Finally do the following change in your httpd.conf file

<IfModule prefork.c>
StartServers       2
MinSpareServers    6
MaxSpareServers   4
ServerLimit      4
MaxClients       4
MaxRequestsPerChild  3000

These are some of the things that I tried, I cannot guarantee that it will help you too, but there is not harm in trying. It might work for you.

Have fun!


Subscribe to Ravi Sagar RSS