Last week I attended a talk called ‘Productive Programmer’ at Devoxx, Antwerp, Belgium. It inspired me to write a blog about this interesting subject which can help us all to become more productive and even to end up in hyper productive state. And with ‘all’ I mean everyone working in the IT business: developers, testers, analysts, project leads, consultants, project managers, scrum masters, product owners, … Sorry for the roles I forgot to mention.
For those who attended the talk too: don’t worry, this isn’t a simple copy of the talk, it’s inspired by the talk, my personal experience and knowledge so it covers much more.
First of all we can improve productivity as an individual.
Though we’re not living in the stone age anymore, it’s still impossible to have multiple items on the clipboard at the same time in most operating systems. Most people use a text editor as buffer but opening the text editor, adding 1 item to the clipboard, pasting it into the text editor, adding another item… and finally copying all the text from the text editor to the location where you need it…is a huge waste of precious time! But don’t worry, a tool called CLCL allows you to have multiple items on the clipboard at once. This tool comes in very handy!
Ban the mouse
In fact we can say that in general, using the mouse is not only less productive than using the keyboard, it also causes RSI. If you use the mouse during your whole career it’s not a matter of ‘if’ you will suffer from RSI, it’s a matter of ‘when’. So knowing keyboard shortcuts doesn’t only save time, it’s also much better for your body. But enough about the body, we’re IT guys, we sit behind our desk the whole day so who cares about the body ;-) So back to productivity then… mousefeed is a very nice Eclipse plugin which tells you the keyboard shortcut if you execute an action by using the mouse. You can even make mousefeed undo your action if you use the mouse. It will only work by using the keyboard. Can be annoying but you know, the best way to learn something is doing it the hard way :-P
IntelliJ’s equivalent of mousefeed is called Key Promoter which does actually the same but afaik it isn’t configurable.
Focus/Locus of attention
A rule of thumb: try to avoid multitasking and too much task switching. Try to concentrate on one single task instead.
For example you can open your mailbox in the morning and after lunch. Read all your mails, reply/forward if needed and close the mailbox when you’re done. It seems stupid but it really helps. You can concentrate on handling mails and pick up a new task afterwards. You can focus on the next task without being distracted by incoming mail alerts.
Same thing can be said about instant messaging. It’s cool that people can reach you by using different ways of communication but when it reduces producitivy, you should really think about the added value for you.
Defining some general guidelines is necessary. If there are too much internal discussions, it’s better to book a meeting room where people can discuss things without disturbing other people. If people have too many non-workrelated chit chats, you can introduce quiet time, …
Automated deployments and navigation
Introduce automated deployment instead of only configuring automated packaging. In fact you’re just automating deployment on the integration environment by integrating this as a build plan in the CI. This way one can check the current state of the application at any time.
Use macro’s to navigate. During development of webapps, developers will test the screens locally. Most of the time they navigate to the page they want to test by performing manual actions like filling in some data, clicking on some links and buttons. Selenium IDE is a firefox plugin which records macro’s. You can record all those manual actions in a macro and Selenium IDE can execute them very fast for you. This saves a lot of time and lets you focus on the core task: testing your page.
Pair programming sounds like a waste of time to some managers. Productivity is reduced with 15%, which is absolutely not much, but the amount of bugs is also reduced with a minimum of 15%! This means that quality is raised but also that no defect control needs to be done afterwards because it’s done at the same time as programming. An extra important advantage is that knowledge is immediately spread over both programmers.
Most of us know popular acronyms about best practices such as KISS (Keep It Simple, Stupid) and DRY (Don’t Repeat Yourself). YAGNI is yet another one to keep in mind. It stands for ‘You Ain’t Gonna Need It’ and means that you don’t have to overengineer, don’t do some premature optimizations, don’t write stuff that may be used by someone… some time… Just write stuff that is needed now, that’s all, folks!
A good idea for an IDE plugin is YAGNI, some Microsoft Clippy clone which annoys you all the time when you’re doing something stupid.
Improving as a team
Communication is very important. Organize the room in a way that communication is stimulated instead of trying to isolate every team member. Stand up meetings can help but it should be a mindset. Just like the team that has code ownership instead of a single team member.
Communication can also be forced by organizing a short daily meeting, like the stand up meetings from Scrum. Everyone knows what team members did and what they will do and impediments will be visible.
As a manager it’s important to keep your team motivated to make them productive. You don’t do this by command-and-control-ism but by trusting the team and expecting that they will succeed. Trust means also that teams are allowed to make mistakes. Teams that are comfortable at making mistakes often find that they also produce extraordinary results. True success is often comprised of multiple failed efforts that did not sink the team, but rather allowed the team to learn things they could not have learned otherwise. Working within a corporate culture that recognizes this is a key component to super teams.
Independence and a sense of ownership
The team needs to feel that they can contribute creatively and have some control over the game. This isn’t necessarily total ownership, but some.
Political games inside a company or inside a development team, dumb corporate rules, wrong motivation schemes, communication problems due to personal likes and dislike – just some factors that make cooperation almost impossible.
Job protection is the absolute opposite of cooperation because one will protect his job by keeping some info for himself. Of course that’s contraproductive, knowledge exchange is the key to a great team.