R&D and innovation-oriented software development company
arrow Request For Proposal Case Studies

12 Lessons Learned in Custom Software Development

Tuesday, 11 Jul 2017

Software Development

The most valuable experience in life is the one you can share with others. For 25 years in software development, Program-Ace, as any other company, has had its ups and downs. Today, drawn by an inspiration, we decided to compose a comprehensive list of rules every developer should follow, regardless of what he or she crafts - whether it’s an MVP or the next Facebook.

#1 Start Small

New systems and products are extremely hard to create. No matter what you craft – a new feature or an architecture of the whole system – you need to design a simple version of a feature with only very basic or almost none of the necessary functionality. It is needed because you actually cannot plan everything in detail in advance. In 90% of the cases, new additions and corrections will appear during the development stage, or you may even want to rebuild the entire system. So, it will be a wise decision to start small and then extend the feature, solution, or system step-by-step. Improve the functionality until the feature will be exactly what you designed it to be and do what it is supposed to. Eventually, any complex system that works well evolved from a simpler system that also worked well.

#2 Use Short Iterations

Short Iterations

It is much easier to find a bug or a problem in a feature that does not work when you only change one thing at the time and then commit. It often refers to the conditions when you have an advanced system that has been created by multiple people. This simple rule will help you avoid situations when you spend more time on finding and fixing bugs than developing new features. One more thing: if your code needs refactoring, commit this before adding a new feature.

#3 Better Done Than Perfect

To be honest, this is actually one of the first things you need to remember, even before you start your project. Perfectionism is good, but in software development, it is often a serious threat. Why? Well, because your product might never see the release if you will always try to make it perfect and make last-minute adjustments. Forget it. Remember the first rule - start small and then extend. Build an MVP (Minimum Viable Product) and release it so it can test the market and find its profitable spot. Then it will happen; you can extend the functionality to satisfy the needs of your target audience.

#4 Have an Estimated Project Length? Double it.

Everything in your life takes longer than you think it will, especially when it comes to programming. It is extremely hard (read: impossible) to make an accurate estimate of how much time a particular developer will spend on a specific feature because you literally cannot predict what may go wrong. In software development, unexpected problems are very common.

For example, a simple merge causes many bugs or makes the performance unstable or some functionality does not work as expected. Add some extra time to have a place to maneuver.

#5 Understand the Code Before Changing It

Most of the development tasks require changing existing lines of code in one way or another. Even new features need to fit into the original functionality. First, developers need to examine and understand the pros and cons of the current solution and only then build something new. Otherwise, there is a great possibility that you may break some of the existing functionality by accident. This leads us to a pretty logical inference - code reading is the skill you have to acquire. It is also a part of the reason why relatively small changes could take long - it is necessary to understand the context in which you make a change.

#6 Bugs are Unavoidable


We often see various approaches to software development that adhere to the "make it right the first time" paradigm. Let us tell you something. No matter how much effort you put into the development, your program will not be flawless. Sorry to tell you that, we know you wanted to do that right from the start. But, you see, it is physically impossible to think of everything in advance. A better approach is to deal with the thought that everything cannot be perfect, and developers should not panic when noticing a bug. Breathe out, quickly troubleshoot the problem, fix it, and then deploy the adjustments.

#7 Develop an Error Handling Landscape

It is not only important to develop the architecture beforehand, but it is also significant to think of the way how will you handle bugs and other problems. For all systems that are bigger than a few lines of code, it is necessary to develop a roadmap so you will know when and where to look for the problem and what exactly happens inside the program. You may understand this when everything is working the way it should; however, when it doesn't, you start to remember all this voodoo magic to make it right. Why bother if you can make the things right from the very beginning?

#8 Test the Parts Before the Whole

Testing is an inalienable part of software development, and developers are often faced with a necessity to combine different parts of the code to make the system work. In that case, well-tested parts can save developers' time. In particular, when integrating different modules, testing could cut the development efforts off and save you from mismatched interfaces between parts of the code. And when you know that all the parts work as expected, it is easier to find the bug or an error or the problem that causes a bunch of lines of code to fail to work.

#9 First, Fix the Known Bugs, Then What's Left

In many cases, there are quite a few bugs or problems that a developer knows how to solve or where to find a solution. So deal with them first, because most of the bugs are usually connected, and changes with one affect the other. So, instead of dividing them into “less” and “more time-consuming to solve,” divide them into “known” and “unknown.” Then, fix the easiest one and see what symptoms they cause in the difficult ones.

#10 Get a Break with Difficult Tasks

In the harsh conditions, when the deadline is hovering around the corner and the developer is working under pressure, the last-minute problems always come up. And what does a developer usually do? Try to solve it immediately, even if it is long past midnight. This approach may work occasionally, but it is fundamentally wrong. Take a break, turn your attention to something that can distract you for a little while, for instance, play a game, listen to music, or watch some funny memes with cats. Your work after that little break will be much more productive. One more thing to notice – try not to work late on difficult tasks. When you can, take a night to sleep on the problem. Things always look brighter in the morning, after all.

#11 Seek Help When You Can't Cope on Your Own

Every developer can understand the system, what it does, and how it works. However, some tasks appear to be hard to solve, and if you have a possibility to consult with someone knowledgeable, do not hesitate to use this option. Ask as many questions as you can, work together, try to learn more about the problem and possible solutions to it. Do not be afraid to seem unaware — people don't judge those who aren't scared to ask.

#12 Keep on Learning

For our years in business, we figured out that it is never enough knowledge when it comes to software development. New technologies appear every day and programming languages significantly evolve over time. Stay abreast of the updates, since even the smallest improvement in your skill set can make a huge difference to you as a developer. Read a book, watch a video, take a course, be ready to learn new tools and languages.

Program-Ace's professionals composed the list in order to share our extensive experience with novice and advanced developers. The process of software development may indeed become easier and smoother when paying attention to these lessons learned. No wonder... people adhere to the proverb that implies that wise men learn by other men's mistakes, and only fools – by their own.

Need Help with Your Project?

Our proficiency on the topic allows our team to provide development services to many industries and businesses. The Program-Ace company is mainly focused on cross-platform development, virtual reality and augmented reality solutions, and training & simulations for military and education. If you feel like you can learn from our experience or you need a team extension to support your development needs, do not hesitate to contact the team at rfp@program-ace.com and request a quote for your project.

Request For Proposal
Find us on Facebook
Our Services

Augmented reality, virtual 3D trainings, Interactive architectural visualization, serious games, product configurators, and walkthroughs. More »
Our team provides full scope of game development services from art asset creation in 2D and 3D styles to programming and support. More »
We offer cross-platform app development services for all major platforms: iOS, Android, Windows Phone, Blackberry; and devices: web, mobile, PC, consoles. More »
Development of mobile apps and games, migration of applications to different platforms, cross-platform development. More »
Business automation systems, e-commerce solutions, community portals, corporate web-based systems, and websites with 3D. More »

Interested or have questions?


GSN Games is completely satisfied with Program-Ace's technical expertise and the quality of services they provide. We look forward to collaborating with Program-Ace again...

Stuart Lewis-Smith, Senior VP and General Manager, GSN Games

Program-Ace has completely dispelled my concerns. The online project management system is one of the best I have seen...

– Scott Zerby, Vice President at ValuSoft

If you're looking for a professional, dedicated, digital development partner, I highly recommend Program-Ace...

– Tim Ransom, President at Visual Thunder Media
Our Clients
Electronic Arts logo
Valusoft logo
Wargaming logo
Namco logo
Kuju logo
DTP Entertainment AG logo
About Program-Ace
Contact Us

USA +1 347 53 53 543
Ukraine +38 067 578 40 46

Email: rfp@program-ace.com

Skype: program.ace


56, Poltavsky Shlyah,
Kharkiv, Ukraine

Stay Connected