views:

85

answers:

3

I am aware that this could be seen as subjective but this is definitely not my intention. I am always on the hunt for techniques that I may have never heard of that help improve both productivity and quality of software engineers.

In particular I am looking for tools, techniques, approaches, tips and tricks, best practices, etc. that helped you to improve both your productivity and quality as a software engineer. This is actually a process related question. So please don't answer with your opinion about which programming language is the best from your perspective.

I expect the answers to be subjective. But that is the beauty of it. Not everything works for everybody. We all have a different set of constraints that we operate under. Therefore it is unavoidable that we make different choices. If the answers are contradictory, that would be perfectly fine!

What were the techniques that were helpful to you specifically? How did they make a difference? What criteria do you use to come to that conclusion?

+1  A: 

Delegate to the appropriate party. Then review the assigned task periodically.
Once you know who best to delegate to, who will get tasks done correctly and efficiently, it improves your productivity massively.

It lets you focus on what you want or need to be doing.
Like answering stackoverflow questions for example.

Bravax
@BravaX: It is tough to accept any particular answer as correct as all are. But I have to choose one. Thank you for your answer!
John
+1  A: 

Ok, here for my subjective answer.

Standard approach for improving quality is unit testing, in my opinion. Of course you can still write crappy code that works and have unit tests that confirm that it works but at least you know that it works. Where unit tests really give you an advantage is when you want to make changes to your code or add additional features. Having unit tests guarantees that your code keeps working.

As for productivity and unit tests it depends whether you look at short-term or long-term productivity. Unit testing takes time so you are less productive writing actual functionality. In the long term I'm absolutely sure you are more productive since your unit tests guarantee that during maintenance all functionality keeps working.

Second productivity and quality enhancing tip is to think each new feature thoroughly through. Once a new feature is shipped, you have to maintain it. Maintenance takes time and decreases productivity. Is the new feature necessary? How many customers actually want this feature? Always try to look at the bigger picture, what is your own vision for your product, does the new feature fit in with this vision.

The less code you have, the less code you have to maintain and the less bugs you have. I always try to keep that in mind.

Ronald Wildenberg
@Ronald: It was hard to choose a correct answer as all are. I think that your experience with unit testing matches with mine. It is one of the few techniques that are hard to implement with an established team and a legacy code base but you can improve both productivity and quality at the same time. Thank you for your answer!
John
+1  A: 

Learning how to use recursion effectively. It's given me a framework to decompose complex problems into understandable code. It's helped me to code tough bits faster with no or very few errors. The book that taught me how to think this way was The Little Schemer by DP Friedman.

The second I'd say was learning Lisp. It's helped me to learn other languages more quickly. I can now classify other languages by the subset of Lisp functionality that they implement.

P.S. I don't use recursion frequently in my software. Most modern languages and frameworks have features and utility functions that allow you to avoid using recursion for simpler problems.

Giles Roberts
@Gile Roberts: It is tough so choose a correct answer. All of them are correct. Thank you for your answer!
John