The 12 points discussed in the post are the following:-
1. Know your tools
 2. Modularize
 3. Error messages are your friends
 4. Plan, Plan, Plan
 5. Maintain predictability in code
 6. Write beautiful code
 7. Refactor
 8. Central location for configuration/settings
 9. Push towards automation
 10. Keep the comments updated
 11. Write jokes in comments
 12. Choose the right team
1. Know your tools
Programming is no longer just typing code out of the air into your 
text editor and compiling it after you are done. Programming is more of 
an interactive process now.
Lots of tools are available now, that can boost developer efficiency.
 Most programming languages have rich IDE’s with features such as 
“intellisense”, auto-complete, realtime syntax checking, profiling and 
debugging assistance, source control integration etc built-in. Knowing 
these various tools and features are not a must to be a great 
programmer, but, without a question, better tools can boost your 
efficiency as one.
There are programmers who 
swear on their text editors.
When I started out as a programmer, I didn’t know that you could trace (execute) your Javascript code line by line and 
watch the values of variables in realtime, as they change.
I found it accidentally one day. And I still remember that moment. 
It felt like pausing time. I felt like I was using magic sands to stop time. (When you play the game, 
Prince of Persia
 you can pause time using these magic sands. When you do this in the 
game, everything except you are frozen in time, and when everything 
including your enemies are frozen, you can go around killing your 
enemies and doing stuff.)
It was amazing! Anyway, what I was telling was that, if you find out 
and utilize such features and tools, you will find life much more 
easier. Learning little tricks like these are like collecting those 
magic mushrooms in 
Super Mario. They give you super powers, and hopefully, you will be able to knock down your enemies more easily.
“If I had eight hours to chop down a tree, I’d spend six hours sharpening my axe” – Abraham Lincoln.
So, get sharpening your axe!
2. Modularize
All software projects start small and gradually grow over time, 
adding features and getting fat. So when you start planning a project, 
modularize it – divide it into 
modules.
A module can be a section doing a particular task. Or a module can be
 a semantic group of functionalities. For instance, if you were making a
 program like Micosoft Word, then you can put together all the code for 
text formatting (coloring text, making it bold, italics, changing font 
etc) together into a single module.
Such breaking up of a project will make 
assessment, 
assignment, 
development, 
management and 
maintenance easier.
An important thing to note about when you modularize your project/program is that, modules should be be as 
independent as possible. In computing, this design principle is known as 
Separation of Concerns. Later, the different modules can be 
plugged together to achieve the full program.
Also, make sure your modules make sense in a semantic and/or 
functional way. You can have sub-modules and sub-sub modules inside your
 module.
3. Error messages are your friends
Error messages thrown by the programming language or its environment are immense help in identifying and solving issues.
Consider a Javascript program with just 100 lines of code. You, the 
programmer mistyped a variable. Say this variable was being used only in
 a special case. As a result, the program is not working as intended in 
the special case. If an error console is not present and you don’t see 
an error report, you are very unlikely to even find out that there is an
 issue.
So when you develop/debug/test, always enable error reporting. Error 
reports usually have all the information you need to fix most of the 
issues, 
down tho the line number where the problem is.
All languages (that I have ever encountered so far) have one way or 
another to report issues. If it is browser-side Javascript code, check 
the error console of Firebug or Webkit’s Inspector. If it is a PHP 
program, make sure error reporting is enabled for 
E_ALL and monitored.
If you are working with PHP, 
here
 is a nice article to help you tailor error reports the way you want. So
 make sure you learn more about error reporting for your particular 
programing environment.
4. Plan, Plan, Plan
“Weeks of programming can save you hours of planning” – Author unknown.
When I first learned programming (C language) in college, whenever a 
programming question was given to me, I would start up my IDE (Turbo C) 
and start typing
 #include<stdio.h> void main() ….  etc. I would just type furiously, until I get blocked. Then only I would start to think where I’m going next.
Well, actually, this approach worked for me, 
in college. I would like to quite humbly 

  let you know that in our batch, I was the first one to compete the 
programming task and exit the lab on our C programming lab examination. 
(Its my blog, I’ll brag 

  )
The thing is, proceeding without planning will work when you are 
writing a program in school to check if a string is a palindrome or not.
 But the case is very very different when you are building a large 
application for real-world use. Without proper planning, you will 
overlook issues, write crappy code and waste time and resources. 
Let alone the later feeling of self pity.
Let me tell you what happened to us in one project. In this lame 
social network application that we were making, the site’s users were 
able to message each other, naturally. When user A sends user B a 
message, we inserted one row in the 
messages table with 
from=A, to=B. User A could see this message in his ‘
Sent messages‘, and user B could see this message in his ‘
Inbox‘.
 Everything worked quite well – until user B decided to delete the 
message from his damn Inbox. Well, when B deleted the message from his 
Inbox, bam!, the message was deleted from user A’s ‘
Sent messages‘ also.
The problem was that, each message was a saved as a single record in the 
messages
 table, and actions from both sender and recipient were directly applied
 to it. So if either its sender or recipient deleted it from his 
mailbox, it would disappear from the other person’s mailbox too. Oh, and
 let me regretfully confess that I was was the one designed the above 
said database. All because I jumped in without planning properly. Well, 
there is a lesson learned, and a couple of sleepless nights 
 
 
Anyway, what I do now is that, when I get a problem, I analyze and 
understand it well. Then I outline a plan to tackle the issue. Once I’ve
 outlined the solution/algorithm I’ll try to see if there is anything I 
overlooked. Once I’m happy with my plan, I’ll go ahead and implement it.
 If the problem is complex, I’ll ask somebody to take a moment and 
review my plan.
As humans, we are prejudiced about things based on our very limited 
knowledge. As a programmer, it is always good to ask your friends or ask
 in StackOverflow or somewhere to see if anyone else has a different 
solution for the same problem.
5. Maintain predictability in code
When you are working in a project with more than one developer, 
discuss with your team and decide upon the conventions you will be 
using. Conventions include, but not limited to, 
naming of variables, classes, functions, database tables etc, 
interfaces of modules, 
coding style, 
documentation practices etc.
When commonly agreed upon conventions are used in a project, it gives the advantage of 
predictability to the programmers. Predictability probably sounds unimportant, but believe me, it 
is important.
For example, in a project, we agreed that entity classes will be the singular form of the entity name in 
UpperCamelCase. We also agreed that all tables will have a method such as 
get_entity_details(entity_id) to get a particular entity’s details. So naturally a person can expect that 
User->get_user_details($user_id)
 will give a particular user’s details, without checking the code or 
documentation. Do you see the beauty of predictability? May be you don’t
 yet. But take this, such perks are huge bonuses when working in big 
projects.
And a little rant, I once worked with a programmer who made frequent careless 
spelling mistakes. In code. If he was creating a User class, he would probably write a misspelled member function like this 
get_uesr_details(). When someone else tries to call the function in their code, they will, out of instinct, use the correct spelling, which is 
get_user_details(). Of course it will trigger an error somewhere saying that “function 
get_user_details()
 does not exist”, and the second programmer will have to refer the my 
dear buddy’s code/documentation to see what the wonderfuck is going on.
Man, did that guy give me enough headaches for a lifetime or what!
Checkout the 
coding conventions for PHP, by the Zend Framework people. Even if you are not working with PHP, you can get some ideas from it.
6. Write beautiful code
“Programs must be written for people to read, and only incidentally for machines to execute.” – Abelson / Sussman
When you write a piece of code, keep in mind that it is very very 
likely that you or someone else will be coming back to the code in some 
point in the future. May be someone will want to modify the code and add
 a new feature, or may be someone will need to fix an issue in it or may
 be someone just need to look at your code and study it. If you write 
clear, readable code, your colleagues will hate you less for it. And 
there is a good chance that you will go to 
programmer heaven when you expire 
 
 
There was this buddy of mine who never ever use consistent indentation. I have a screenshot of his code below.

If it missed you, indentation, brace positions and everything else is
 inconsistent in those 6 lines given above.  The above code 
might still seem ok for 
some
 of you. But a real program is almost never 5-6 lines like this. Imagine
 a source file with 2000 lines of code like this, where complex logics 
are implemented.
Jeff Atwood in 
this essay says that “
beauty
 isn’t just skin deep, so beauty of a piece of code lies in the 
underlying ideas and algorithms represented there, not just in the code 
itself”. He’s right, but it doesn’t hurt if the code itself is beautiful and readable, does it?
Here are some pointers to write beautiful code:-
1. Consistency is a key factor in writing elegant code. Decide on a style and follow it.
2. Proper & consistent use of white space (indentations, space between tokens etc)
3. Proper use of comments.
4. Stick to conventions.
5. Meaningful names for variables, methods, classes, tables, files etc.
These are a few points that just came of the top of my head. 
Here is a well written article with guidelines on writing beautiful code.
7. Refactor
Refactoring is making slight changes in the existing code to improve 
it. Continuous improvements will make the code more understandable and 
maintainable.
“By continuously improving the design of code, we make it
 easier and easier to work with. This is in sharp contrast to what 
typically happens: little refactoring and a great deal of attention paid
 to expediently adding new features. If you get into the hygienic habit 
of refactoring continuously, you’ll find that it is easier to extend and
 maintain code.”
- Joshua Kerievsky, Refactoring to Patterns (From Wikipedia)
But at times, you will face situations where just refactoring isn’t 
enough. At those times, a complete rewrite could be the only solution. 
Joel Spolski, CEO of StackOverflow and the renowned author of 
Joel on Software, writes in an article named 
Things You Should Never Do, Part I, that one should 
never rewrite code. He reasons that the project will be set back in its schedule if gone for a rewrite. Ok, 
never rewrite is a little too 
strong a choice of words here, imo. So, lets take home this:- 1) 
refactor continuously, 2) 
rewrite only when there is no other option.
8. Central location for configuration/settings
In typical PHP projects, there is a file called 
config.php, 
which holds the configuration settings. I’ve seen projects in other 
languages also employing similar configuration files. It is always a 
wise choice to store all your configuration settings 
grouped together in a central location.
This is helpful in deployment, because there are fewer files to edit 
and configure. Also, it is hard to miss one of the settings when you are
 grouping them together.
The optimal scenario is to save configuration in a separate dedicated
 file which is exclusively for saving configuration. It is best if you 
could avoid adding application or business logic into these 
configuration files. When Version Control Systems (VCS) are used for 
managing the source code, we will usually need to keep the configuration
 files outside of source control’s tracking. If you had other code or 
logic also included in your configuration files, excluding these files 
from source control will be messy.
9. Push towards automation
Lots of things at different stages in a project can be automated. The most commonly seen automation scenario was 
automation of test case verification.
 Deployment automation is also on the rise now. Previously shell scripts
 and similar techniques were used for automated deployment.
Now there are tools such as 
Capistrano for deploying web applications which allow sophisticated level of control with ease than the shell scripts.
In a project I did, we wrote a script to sweep over the United States
 to pick up business listings and save them to a database. The script 
took around one week to complete one full scan over the U.S. When one 
sweep was over, we had to manually reset the script with new start 
points (latitude and longitude) for the script to start again. This was 
ok initially, because we had to do it only once a week. But later we 
were running multiple script instances at the same time from multiple 
servers to speed up our gathering of data. So we had to manually reset 
the completed scripts more often, usually once every day, which soon 
enough became very cumbersome. It was an unnecessary process that wasted
 several of our precious 
man-hours.
Later we automated the script-reset process and things were swift.
Quora Engineer, 
Edmond Lau in his insightful answer to “
What makes a good engineering culture?” says:-
In his tech talk “Scaling Instagram”, Instagram 
co-founder Mike Krieger cited “optimize for minimal operational burden” 
as a key lesson his 13-person team learned in scaling the product to 
tens of millions of users. As a product grows, so does the operational 
burden per engineer, as measured by the ratio of users to engineers or 
of features to engineers.  Facebook, for example, is well-known for 
touting scaling metrics like supporting over 1 million users per 
engineer.
When repetitive tasks are automated, we are making the system take care of itself with least manual interference. 
Edmond Lau continues to say that automated tasks must be logged and measured:-
Without monitoring and logs to know what, how, or why 
something is going wrong, automation is difficult. A good follow-up 
motto would be to “measure anything, measure everything, and automate as
 much as possible.”
10. Keep the comments updated
“
It is better to have no information rather than having wrong information“. When I ask someone for route, I would rather have them say “I don’t know” than pointing me in the wrong direction.
Comments are like signboards. Comments, when properly written, are as
 good an asset as the code itself. They will help the reader get a grasp
 on what is going on in the code faster.
Now imagine the case where this nice programmer wrote a well 
commented program. Anther guy, when modified the program didn’t bother 
to update the comments to reflect the new modifications he made. Now the
 program has comments that are no more valid. Now the program is going 
in one direction, but the comments are pointing the other way. Well, 
what more can be said. The third person trying to understand the code is
 in for a 
serious brainfuck.
Don’t ignore comments and leave them wrong because they do not affect
 the program’s working. A program is already difficult to read than it 
is to write it. So, keep your comments updated and accurate.
11. Write jokes in comments
  
   
   
   
    
     
    |  | 
/* 
* After 36 hours, 2 holes in my wall and writing my code right beside the API 
* this still doesn't work. 
* function getMap():void takes in an event object @param: evt:mouseEvent 
* I will now retire for the day with a bottle of rum and 2 hours of crying 
*/ | 
 
 
Another one:-
// I dedicate all this code, all my work, to my wife, Darlene, who will
// have to support me and our three children and the dog once it gets
// released into the public.
If you can light up a moment of another miserable programmer treading through your code, please do it 
 
 
The best thing about writing jokes in comments is that, your joke 
doesn’t even have to be explicitly funny or witty. Almost anything light
 hearted or foolish you write there will seem funny to someone.
// If this code works, it was written by Paul DiLascia. If not, I don't know
// who wrote it
(
Comments collected from StackOverflow)
12. Choose the right team
Last, but not the least, 
choose the right team. This applies especially if you are a team lead or something of that sort. Do not pick people into your team just because you 
like them or cuz they are friends with you. If you do, take my word for it, 
you will ruin the project as well as the relationship.