When you go to accept a contract and the client has already estimated the time that the feature addition will take, and expects you to sign off on it, do not sign.
It is very important that you are involved in the estimation of the project. You need to sit down with the client for a day and break the features down into small, manageable chunks. Only then can you provide an estimate - being careful to stress it is an estimate only.
Why? Because clients do not know how impenetrable their code is. They don't understand that their proprietary storage engine will set you back three weeks trying to learn it. They don't understand that their codebase doesn't contain enough documentation to set up their product in your environment. They don't understand that their spec sheets do not contain information that is easily interpreted by a programmer with no domain knowledge of their business.
I have unfortunately made this mistake once before and I will never make it again. Realise that it could be difficult to recognise this issue if you are under financial pressure and want to sign something quickly, but it is so important to avoid getting involved with clients in this way. Explain to them the correct way of doing things and when you're sorted out with proper estimates and spec sheets only then should you sign the contract.
Django Python 960.gs Git Vim NetBSD Nginx
This is the blog of Brad Willis, a software engineer living in Brisbane.
Help
Latest entries
*BSD Agile Apache Apple apt Athletics Best-Practice Censorship Comedy Cool Crosswords Deployment Django English Exim Firefox Git Hardcore Health irssi Javascript Jira Languages Linux Makefile Mathematics Mobile Broadband Mutt MySQL NetBSD nginx Nokia OpenVZ OSX Perl Privacy Python Rant Requirements rsync Ruby Shell Slackware SQL SQLite SSH Standards Subversion Television Testing ThisBlog Vim VMWare (Fusion) VPN X zsh
Checking for exceptions in doctests
Homer's Curling Speech
retry in Python
Vim Makefile tabs
Centos (or RH) IPTables
Converting ssh2 public keys to openssh
Vim comment hints
Context managers in Perl
Dish rotation
Git - fixing commit user
apt stuff
Using shell variables in AWK
Linux - Too many open files
Tell gvim to save and quit... remotely
Vim - automatically remove whitespace at EOL
Python - relative paths from within modules
TV Aspect Ratios
Git - Which commits are in your branch only?
Subversion setup cheat sheet
Force detach a screen session
Modify sudo's use of environment variables
Install all Perl modules
Mutt - delete old messages
OpenVZ VPS and swap space
fail2ban on NetBSD for ssh
NetBSD - Using sup
Python - testing for a sys.exit
Python Best Practice Link Dump
Python script names
Perl - Using an expensive module
Speed of git clone
Perl Modules with Custom Prefix
Perl: tr vs. s
Brilliant sysadmin Reference
Why is GRUB better than LILO?
Why is swap space important?
Perldoc Output
Git's Index
Jira Project Keys
Git GUI