// writing.craft

5 Key Lessons You Learn After Building a Software Development Project

Having developed a few full-stack web applications, using Flask, Django, and Express, I have gained a few insights into the development process that you may find helpful. In this article, I will outline five key lessons that I have picked up along the way.

Lesson #1: Design is paramount

Proper planning and design are crucial and you should never start a project with just the idea in your head. You might think you might have everything covered, but more often than not, you will have to update your database with new models, add new routes, and include new features. These changes may result in increased complexity and derail the progress through continuous refactoring of the existing codebase. To avoid this, it is crucial to properly plan out the project through extensive design. You’ll cross the implementation bridge when you get there but at least chart the route to the bridge first. To design a full-stack project you can use: Figma, to design web pages, sqlDBM for SQL database design, and Lucidchart for UML diagramming. The design requirements vary for each project so make sure to find out the tools relevant for your project.

Lesson #2: Document your code

You’ve heard them say, “Good code is its own documentation”. While this is just an excuse for lazy developers who want to sound like god-tier developers, failure to document your code is a disservice not only to other developers but to yourself as well. Truth is, you might forget why you implemented a certain fix and wonder why that block of code is necessary. You’ll then have to read through the entire block of code, just to say, “Oh, that’s why” after thirty minutes. Do your future self a favor by writing a few lines of documentation after implementing the fix.

Lesson #3: Test! Test! Test!

Unit tests and integration tests should always be at the forefront when you’re developing. Unit tests ensure the functionality of the basic components of your project (units). Unit tests are crucial since they ensure early detection of issues, allow you to refactor your code while maintaining existing functionalities, and ease the inclusion of new features. To test the interaction between various units, you should also create integration tests. Depending on your preferred language, the tools you use for unit testing will vary. The options available include the unittest unit testing framework for Python, Mocha testing suite for Node JS, JUnit testing framework for Java, and many more. Be sure to find out the tools applicable to your project. Selenium and Postman can be used for integration tests but there are many other tools available.

Lesson #4: AI will greatly boost your productivity

With the recent developments in generative AI and the advent and popularity of ChatGPT, AI is inescapable. AI-powered tools significantly reduce developers' workload, allowing them to focus on more creative and complex problem-solving aspects. AI can assist you in code formatting, test case generation, and documentation generation. By using AI, you will accelerate your learning process, become more productive, and AI tools may even improve your code quality. AI tools available for software developers include Github Copilot, Visual Studio Intellicode, and ChatGPT Plus[link]. However, overreliance on AI may lead to inaccurate and non-functional code, therefore be sure to evaluate and fully understand the code generated by AI to see if it meets your requirements.

Lesson #5: Be a bit more flexible with your rigid timelines.

Lastly, you should be open to adjusting your timelines. In a perfect world, the developers would meet all the milestones on time, every product would be pushed out on time, and developers would not have to push back deadlines. Developers and clients alike would be happy. However, that is often not the case, and programmers, project managers, or clients will often underestimate the time required for development. Software development often comes with unexpected setbacks. As a programmer you might find that the packages you wanted to use are now deprecated or are no longer maintained, you have to learn something new. While pushing yourself to meet your deadlines, you may suffer from ‘programmer burnout’. While pushing out a product is important, taking care of your mental health is more important. As such, you should understand that there will always be unexpected challenges and adjust your expectations accordingly when you encounter them.

Happy coding!

// back to all writing