With one year experience in developing commercial working software, I am writing this article probably for the folks who’re new to software development. The first thing I’d like to enlighten is that maintaining an existing product is not as bad as people, especially new-comers think. Second, is a nice idea that would make everyone comfortable when you dig your feet into an existing product.
While aiming to be a software developer, you might have a big dream of building a product. It’s considered the luxury for learning and everything. Hold on, I’m not going to shatter your dream of building a product or something. I just wanted to give some points to make a common myth clear. Among those who are yet to start their career with software development, it’s a very common thought that working with a preexisting product is not the wisest of things to do. It’s often treated as “merely bug fixing” or “just maintenance” kind of phrases. But often things are not the way they look the way they are.
If you’re working with an existing product at the very beginning of your career, it might be the best thing that can happen to you. Just remove the thought that there are things like “merely bug fixing” or “just maintenance”. Working with a product and enhancing it is a beautiful feeling. There are plenty of advantages with that. Most of them are very very good, if you’re a fresher to this thing. First and foremost thing is that it’s a brilliant learning curve for any new technology stack, new programming language or even the concept as a whole. Being a good software developer means that you’ve to be highly adaptive and flexible in technology. You can’t be just stuck with a certain language and reject any work in anything else. In this fast moving era, as I emphasize always, just don’t make technology a barrier to growth. There is always something new coming up. Anyway, point being, even if you’re completely new to a programming language or technology, an existing project will give you beautiful opportunity to learn it. Just trying to understand the control flow, will give a plenty of idea about the language and in fact even the comparison with the language you know. So ever want to learn say PHP, working directly with a PHP based product is an amazing way to dig in.
Another beautiful thing you’ll learn is the coding style. Writing code is a beautiful art. And watching and trying to understand someone’s code is a blissful experience to say the least. Imagine an art lover looking at the paintings of another artist, and trying to understand what he is trying to convey. It works the similar way. A collaborated product will give you a blend, a pattern of different styles of coding. I’ve experienced those patterns and those are too good to feel. It would give you a plenty of experience to figure out stuff with the code.
Enhancing an existing product would give you plenty of chances to give your implementations to something you feel can be done in a better way. Refactoring is underrated and it sometimes gives a feeling of pleasure. Enhancing also tests the robustness and orthogonality of the code. How nicely you can develop one feature independently so that the application doesn’t fall off the cards, often decides your efficiency in longer term as well. Even if the application falls, how well you can handle such situations, would also add good experience up your sleeves.
Over all, working with an existing product is often a good thing for you in a broader picture. I’ve realized lately that there’s no such thing as good or bad code, when it comes to working with such projects. It’s simply someone else’s creation and now your job and opportunity.
If ever started with some project that is pre-built, this one thing, if done first really helps understanding the code: DRAW. Yes, a class diagram or some representation of the application on paper would be a wonderful reflection of your take on that project. If it’s a web application, just track down all the control flow or all the GET, POST requests, hard-links and everything. Create some schematic diagram, by which you’ll at least look at all the code and understand it. If there is someone more experienced with that project, you can show the result to him. In the end, it’s all for your clarity. For all use cases, you must be able to spot in the diagram, how control would flow. It’s just a great practice to begin with, while working on an application.
So in conclusion I’d say, when given an opportunity to work for an existing project, take that as a golden learning curve to make the most out of it. Understand the system, make the diagram, and just see how beautiful is the feeling of having it all understood.
Do post your query or feedback in comments.