Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

When I'm working I feel like most of the time I'm not doing actual work. For example after making a change to the code in order to test it, I have to first build the project, and start the server(say JBoss). Upon testing, I find that there is another small issue. So I bring down the server, make the changes, build again and start up the server again.The building and bringing the server up/down is not very useful work.

Also, the IDE (let's say Eclipse) does things such as updating Maven indexes and building the workspace which take some more time to get things done.

Have you come across this kind of situation? Do you have tips on how to overcome/bypass this? Any features on the IDE/build tools that can be helpful? Any architecture/application design/technology that attempts to overcome this?

share|improve this question
    
JRebel is a great tool, where you do not have to restart your server for every small change. –  Jarle Hansen Mar 18 '12 at 14:57
    
You might want to set up a CI server if the build overhead is slowing you down. –  Daenyth Mar 18 '12 at 16:36

4 Answers 4

Development always involve overhead like this, even without an IDE. At the the end of the day "someone has to do it" and "whatever time it takes, it counts as development time".

In either case, what you describe is just the development cycle with an IDE (I use a variety of IDE's and editors).

Since you asked for tips, one thing I do find easy with an IDE is the visual ability to select and run one or a selected number of tests easily to avoid the time delay of running the whole suite.

Another thing that can help a lot is caching. For example I develop in rails and it caches stuff in production more than development to make development changes easier. However that be be changed as needs to help speed things up more for development (e.g. css/js assets don't change).

Sometimes it's better to use command line tools and a lighter-weight editor depending on the circumstance at hand.

share|improve this answer
    
Downvoted because his question has nothing to do with whether or not he's using an IDE or editor, it's about how he can shorten each iteration in his development workflow on the whole. –  Ben Burns May 22 '12 at 13:54
    
He sure mentions a IDE a lot though and asked for tips! –  Michael Durrant May 22 '12 at 18:31
    
You're right, and I apologize. I should probably not downvote late at night... –  Ben Burns May 23 '12 at 14:03

You should begin by keeping track of how much time is spent by each of your developers are doing their different tasks.

  1. Take note of the tasks that are repetitive and easily scriptable (ie- run build on code & reboot server with updated code)
  2. Prioritize impact of each class of task (ie- launch new build, startup/shutdown, source control)
  3. Investigate the most time/cost effective solution to each individual task, whether the solution should be a script, more hardware or a new software package.
  4. Work each solution into your processes individually.
  5. Evaluate at preset time periods to ensure you are seeing the productivity gains expected and tweak as needed.
  6. Bill out all possible parts of this list to clients. :-)
  7. Profit!

At my company when a new build is created, we update a dropdown box on an internal server and whenever any of our dev servers restarts apache it automatically pulls and deploys the new build.

While free/open-source solutions can seem to be great to start with, sometimes you'll see greater productivity savings by paying for a service to manage your processes.

For instance, my company uses JIRA for our issue tracking which integrates with source control and allows anyone to view the specific source changes that apply to a particular ticket.

share|improve this answer
    
+1 for automate repetitive tasks & track where the time goes. –  Adrian Schneider Jun 12 '12 at 4:38

It may look capricious, but having powerful hardware can easily improve your productivity. A lot of the tasks you mention (building, starting the server, updating Eclipse indexes…) are highly hardware-intensive (CPU, HDD, RAM…). Improving hardware performance has a very quick ROI.

A few month ago we switched our environment to 8Gb RAM in x64 (previously 4Gb RAM in x86, which thus meant ~3.2Gb usable) and I can say this has been a huge productivity improvement. Now I don't have to worry any more about memory usage or closing some software because it is too heavy. I can even start Eclipse on 2 or 3 different workspaces, start 2 different servers and run a database server simultaneously!

We are also using JRebel as proposed by Jarle Hansen.

share|improve this answer

If you look at it from a business perspective, you'd have to make a distinction between value-adding activities and non-value adding activities. What is a value-adding activity? One that the customer is willing to pay for.

Does the customer want to pay you to start up the server? No! Does the customer want to pay you for a relevant change in the code? Yes!

If you'd want to work as productive as possible, you have to eliminate all these non value-adding activities or at least cut them to the absolute minimum. This is a crucial step towards lean manufacturing. This is becoming more and more important in service companies too.

Now suppose you have a machine that has a setup and shutdown time before you can start to produce another part. What you will do to maximize productivity is you will cluster the same products together, in order to minimize the setup and shutdown time. In that way maybe you could do more changes at the same time before restarting the system.

The are many books written about the subject which will give you general advice of how to recognize all the "waste" in your company or specifically what you do but also how to get rid of it. The advice is general, so you should think of yourself how you could apply this to your specific programming situation.

Maybe this book is something for you. It specifically handles services. Also the wikipedia page about lean service management is relevant.

share|improve this answer
1  
If the server is down and the customer are complaining about it, I'm thinking they might pay well to start the server. My point (below) is that someone has to do it and all tasks are ultimately billable. –  Michael Durrant Mar 19 '12 at 11:40
    
I was trying to use the example of the question, where I think he means a test server. Off course, if something has to happen, it must happen. If it's non-value adding, it still has to be done but people should think how it could be prevented in the future instead of doing it over and over again. At least that's my opinion. –  J. Maes Mar 19 '12 at 16:31
    
+1 for value adding or not. Value is different in each scenario. –  Adrian Schneider Jun 12 '12 at 4:37

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.