Let’s get one important thing out of the way immediately – there is no real how-to guide on building a new product with good architecture. Setting up strict procedures, writing out a detailed plan – it won’t really do much. At best, it will make your work too forced, it will make it lack flexibility and feeling. On the other hand, the most likely answer is that you will need to throw it out rather quickly once you see how things are changing. However, that doesn’t mean there aren’t things you can use and utilize.
While we can’t give you a clear guide, there are many tips, tricks, and pieces of advice you may find useful. Depending on your experience level and general work history, some of these may be obvious. However, some might just be the thing you need to break the plateau you have in your work. Whatever the case may be, read on to find out the best structure designing software tips and tricks.
Concepts First, Deployment Diagrams Second
It is completely natural to have things like Databases, Web Servers, Cloud computing platforms and the like spring up when you start thinking first about software architecture. The technical buildings blocks are important for any developer, and they are, obviously, a very important, core part of your plans. However, this type of thinking is distracting, and simply not efficient, at the beginning.
What we advise instead is to use something abstract as your architectural building blocks. So, let’s say you’re thinking about setting up a payment processor in your system. Before you choose the right technical building blocks, the first thing on whether you want it to work asynchronously or not. Do you want to implement a persistent state, or not? Only after you have figured out what you want to do with your architecture should you invest some time on more concrete things.
Perfect Is the Enemy of Good
Always strive for perfection, but understand and accept that you will never reach it. This is a rather general piece of advice that can be applied to any part of your life, but it seems to be rather valuable for software design. This is a line of work that by its very nature attracts perfectionists, and you yourself must know someone (or are guilty of it yourself) who don’t really give out their best work exactly because of their perfectionism. Spending hours and hours on the first version, on some basic starting points of the job, and then rushing the rest of the project due to time constraints.
Namely, if you want to get this under control, we suggest you accept that the first shot is always wrong. The first iteration of your work will not be of sufficient and satisfactory quality, and you need to make peace with this. Let the entire architecture grow with you, let it advance as your knowledge about the given advances as well.
Prioritize Functional Requirements
Getting the best possible software, the most useful buildings blocks, there are all of course important. For example, getting high-quality software like Autodesk inventor professional will help you out immensely, but, take a moment and think - is it the right choice for your work at the moment? Namely, when you are doing this kind of work, you always need to place the functions the system is going to provide first. Everything else needs to follow this single concept.
We suggest you start by making a top-level view of the necessary functional requirements. Marketing experts and the owner of the product you are making should provide some assistance here. They should share user stories, needs, preconditions, ideas about possible flows… After you get some kind of idea on what the system is supposed to provide, you should then create a kind of a mind map. In this mind map, cluster all the relevant actions and verbs around the topics and nouns that are relevant to the product. This can give you an idea on the complexity of the entire system, how it is supposed to be driven, as well as helping you understand what should take priority, and what can be thrown out.
Stay away from Patterns (at the Beginning)
Patterns are very useful for this sort of work. However, if you have them set as your start point, you will end up with over-engineered systems that lack flexibility and life. We understand how useful Pipes and Filters, CQRS, MVC and the rest can be, but they should not be the first thing you go to. As far as your top-level approach is concerned, you should start with an overall view of what is on top. In other words, don’t miss out on the forest because of the trees. Thinking about the colour scheme of the website or the software you are making is important, but you first need to figure out what your priorities are. Always keep the big picture in mind, and try not to get married to any one system, any one pattern.
Conclusion
And there you have it folks, some quick tips and advice. In order to maximize your efficiency, you should keep most of these things in mind. Always prioritize functional requirements, the core function of the system should never leave your mind. Then, understand that perfectionism will make your product actually farther away from perfection, not closer to it. Don’t obsess and focus on patterns at the beginning, but rather, think about concepts. Figure out what you want, what your goal with this project is, and only then think about the tools you want to use.
Related Posts
Nick is a blogger and a marketing expert currently engaged on projects for Media Gurus, an Australian business, and marketing resource. He is an aspiring street artist and does Audio/Video editing as a hobby.