I'm a new software developer, and in my internship my boss asked me to develop an application that allows him to manage his inventory. Something small but, for me, very enriching.

The application is running, he found some bugs and problems but I fixed them. This is not the problem. My problem is that when I was working on the application, I didn't know what I was doing, so everything was in disorder. The project took me 2 months and another developer said that he could do it in a month or less. This surprised me, so I want to know:

How does a professional developer plan a project before starting development?

closed as too broad by Robert Harvey, Telastyn, Ampt, JeffO, Eric King Aug 7 '14 at 22:22

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 4
    It's not a simple list of items; it's a lifetime of learning. It's a profession. Your software developer friend can do it in one month instead of two because he has more experience. – Robert Harvey Aug 7 '14 at 19:21
  • 1
    How did he learn to do such planning? At age 5? No. He learned either through theory or practical experience (or both). He may not recognize or acknowledge his own experience but that doesn't necessarily mean that he doesn't have it. – Michael Durrant Aug 7 '14 at 19:31
  • 1
    There are thousands of books. The answer to your question - which is quite general - is that you need to learn and continue learning. Determine if that is what you want and then you'll find the books that match your needs. You can post questions about which book but you would need to be very specific and what you need to learn. – Michael Durrant Aug 7 '14 at 19:32
  • 1
    Learning new programming languages (including academic ones) and studying existing source code of free software will teach you a lot. – Basile Starynkevitch Aug 7 '14 at 19:52
  • 1
    Hmmmm...if he said he could do it in 1 month then taking into account the typical sw developer's optimism, we need to multiply that number by at least 3. So your friend would really take 3 months to get it done. You have them beat. Good for you. – Dunk Aug 7 '14 at 20:22

So you want to know, how to become an efficient developer?

1) You have to develop communication skills

Before you start any project, you have to talk to you customer (in your case your boss) about what he wants. The difficulty here is not only to understand, what your customer says, but what he really means - these are most of the time two different things. It helps if you get your requirements in plain sentences. The simpler the better. You could do this formalized with "user stories" or "story cards", but a simple ticket-system will do.

2) You have to develop a toolbelt and a skillset

Like every good craftsman, you have tools and skills. One part of the Tools are Frameworks in the language you work in. The more you know (whether hearsay or in depth doesn't matter) the better for you. Another part are real tools: buildtools, monitoring tools etc.

And then there are skills. At first: stay sharp in your language. The more you know about the language you are working in, the better you get at solving problems in this language. Knowing the syntax is not enough: you have to know how to express yourself in the language you are working in - like an author writing prose or poetry, you have to know your language. This includes a major part - which I find often neglected by novices: knowledge of the datastructures, your language offers: what kind of structures are there? how do they work internally? how efficient are they?

Then you need to have a working knowledge of problems others solved already (Algorithms and Design Patterns). The better you understand, what others have already done, the faster you are going to develop your solution. Sometimes programming is like plumbing existing pipes together and the problem is solved.

3) Think about your problem

Analyze your problem from different perspectives: GUI, Backend, Database, Client, Server, whatever perspective you could take.

4) Write your specifications down into acceptance-tests

Only when your solution passes all acceptance-tests, you are sure, that you build the right product.

5) Begin writing small Units and testing those units

Whether you write tests first, as apologets of TDD say or write code and than test doesn't matter, as long as you have tests at all. You are your worst enemy and nothing happens more often than breaking your code. Writing tests helps detecting sloppiness.

6) Get early and frequent feedback.

After you've written small chunks of code and testing those bits and pieces show the result to your customer. Talk about the results frequently and in depth. So you get a better feeling, for what the customer wants and an immediate feedback for what you are doing.

The project took me 2 months and another developer said that he could do it in a month or less.

So, when a fellow developer said this, that only means, that he has more experience (more problems already solved) and better knowledge, how to plumb such a solution.

Programming is a skill like every other. You have to train and soon get better.

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