The proud Developer…
(this is a post inspired in real people, but does not represent anyone in particular)
I’m the Proud Developer… I’m really proud and happy with my work! I love working as a Developer, providing and sometimes creating things that did not exist before or at least making existing things better. I just love to deliver software that its not only usable, but easy to use, fast, secure, responsive, scalable and well made! To get to that, i make a clean and organized code, always refactor when needed and possible (hey, i’m not perfect, i don’t get it right always the first time) and try to document everything i can (and time allows to). Since i’m also humble, i tend to implement Tests (especially automated Unit Tests) to most of the code i make. At least this way i can have peace of mind that when i change something (implementing new things or refactoring old ones) i don’t break any functionality.
And i do all of this with a PIECE OF SH$# COMPUTER! It’s slow, our build times are huge, the committed memory its always surpassing the amount of free memory so its always doing swaps with the virtual memory (a lot slower) but hey, i’m a proud developer.
In fact, i’m so proud that i don’t really care that my build takes 4 minutes, and that every iteraction (code, compile, test) it takes almost 5 minutes.
I know that 5 minutes its a lot, specially knowing somethings about response time. Quoting Jakob Nielsen from http://www.useit.com/alertbox/response-times.html:
The 3 response-time limits are the same today as when I wrote about them in 1993 (based on 40-year-old research by human factors pioneers):
- 0.1 seconds gives the feeling of instantaneous response — that is, the outcome feels like it was caused by the user, not the computer. This level of responsiveness is essential to support the feeling of direct manipulation (direct manipulation is one of the key GUI techniques to increase user engagement and control — for more about it, see our Principles of Interface Design seminar).
- 1 second keeps the user’s flow of thought seamless. Users can sense a delay, and thus know the computer is generating the outcome, but they still feel in control of the overall experience and that they’re moving freely rather than waiting on the computer. This degree of responsiveness is needed for good navigation.
- 10 seconds keeps the user’s attention. From 1–10 seconds, users definitely feel at the mercy of the computer and wish it was faster, but they can handle it. After 10 seconds, they start thinking about other things, making it harder to get their brains back on track once the computer finally does respond.
I’m so proud of my profession that i do everything i can to achieve the best response time possible (lower than 1 second) on the software that i make, but i don’t mind at all to wait for 5 minutes to test some code i’m doing for that particular software. Hey, don’t get me wrong, i wish i could have a iteration (code, compile, test) that would take less than 1 second, but i’m not a final user, i’m a developer :D. I can take this, i want to make responsive software but don’t really mind that the software i use to make it takes 50x more to respond to me.
Another interesting fact. I’m always concerned about memory leaks and low memory consumption. I tend to create objects with a small memory footprint, do a proper management of resources, lazy-loading when possible, etc. I confess, its a bit hard to deliver that quality of software with the tight project times and everything, but hey, don’t forget i’m the proud developer… I work over times even without getting paid. As soon as I open my development environment my computer memory start to scream for some free space, but i don’t mind. I’m a developer… and a proud one. I don’t dare to put me in the same position as a final user (the ones i’m doing software for). I’m a DEVELOPER, with all the capital letters. My software won’t have high memory usage problems, but… if the software i use to develop has those, well, i can take it…
WHAT THE HECK ITS THAT? I’m I insane? I’m starting to be a hypocrite? How can I expect to achieve something or even accept something from someone (the demand from the user for responsive software, low memory usage, security, etc) if I don’t want, demand or simply don’t mind not having for myself.
WAKE UP FELLOW DEVELOPERS! If your build process takes more than 1 second to respond, TALK WITH YOUR MANAGER! If you don’t have one, fix the problem yourself. I don’t really get it why the stability, responsiveness, performance of the developer machine, build process or any part of the development process tends to be in the LAST place (along with testing :D) on the list of priorities of the Management Team and (god no) the mind of developers itself. Here is how it happens:
Person in Charge: People, we have a tight schedule, we must deliver this in time. Also, the requirements and expectations are way high, so the application must work well under stress, be fast, scalable and reliable. Can we make it on time?
Developer thinking: (Man, it will be hard to get things on time, specially since my computer its so slow, but hey, i’m a proud developer, i won’t show any weakness.)
Developer says: Yeah, i think we can.
One advice for the developers: Bug your Manager EVERY DAY, MORE THAN ONCE A DAY, about things that are slow and don’t help you make your work. Your computer its slow? Bug him. Your computer does not have free memory? Bug him. The compilation process takes to long? Bug him. If you happen to work with agile methods, speed its crucial… Don’t ignore the time you waste on things that are not development itself (compiling, waiting for the application to load, checking/committing things to the repository, etc). If you can, try to measure these wasted times and do the math of how much time you waste in a day, a week and a month. Multiply these times with the number of developers in the project you work, show the results to your manager and see how big your eyes will get with the surprised expression you will make! 😉
One advice for the management team: Ask your developers EVERY DAY, MORE THAN ONCE A DAY, about things that are slow and don’t help them make their work. Their computer its slow? Fix it. Their computer does not have free memory? Fix it. The compilation process takes to long? Fix it. If you happen to work with agile methods, speed its crucial… Don’t ignore the time they waste on things that are not development itself (compiling, waiting for the application to load, checking/committing things to the repository, etc). If you can, try to measure these wasted times and do the math of how much time they waste in a day, a week and a month. Multiply these times with the number of developers in the project you work, show the results to them and see how big your eyes will get with the surprised expression you will make! 😉
The quality of the development environment should be EVERYONE TOP priority. It pains me to see that its the last. How do you expect to make things good and fast if you waste precious time with things that should not be? Is it really that hard to comprehend?
I will be really glad to see the opinions of other developers, managers, CEO’s, etc. Let’s make software development mode productive.