Software design at complex levels?

I am writing software that looks a lot more complicated than I understood before. It performs several subtasks, has many completely different tasks and integrates with other applications, modules and programming languages. There are hundreds of things I need to do, and everything seems too complicated to think directly. What are some good ways to develop your software besides just writing? I need to somehow organize my project, I need to know what to write without spending a single hour to figure out what to do next.

Has anyone been in a similar situation?

+7
design project-management writing
source share
5 answers

Break your project into small tasks (less than one day of work). Organize them in groups. Prioritize them (maybe you need to make function X to make Y). Start coding!


Any project, no matter how complex it may be, is just a sequence of small tasks. Once you realize this, it’s easier to focus and find a way to get closer to the project. Of course, breaking everything down into small tasks is work, not trivial. If you have no experience with this, try to get help from colleagues. But the best way to get experience is to try it!

Depending on your situation and personal preferences, you can use a flexible methodology such as Scrum or Kanban . You should also use the project management tool to keep track of what you need to do. It can be anything: from post its to the main tracker , just find the one that suits you.

+6
source share

I would suggest that most developers are faced with this "oh sh **" moment when you realize the fullness of what was offered to you :)

It looks like you are working as a team with one person, here are my tips:

  • Talk to the customer . You cannot stress this. You should have an open and honest conversation. If they asked the moon on a stick, and you get paid for the fact that no one will get the right result from this effort.

  • Switch the system to higher-level functions (for example, the application will export X to system Y), work with the client to determine sensitive vertical slices that can be introduced gradually and with priority.

  • Within the functions, sub-task priorities are organized and assigned.

  • As marcgg suggests, try breaking tasks down into manageable chunks, I usually use a maximum of 4 days, nothing more, and you don’t understand the details sufficient for an accurate assessment to refine it. However, it is not always necessary to evaluate all the detailed details. Agree to clarify things later, while you and the client understand where possible temporary misses may occur.

  • Get a decent task tracking tool like JIRA or something else. You want to unload a task from your brain so that you can use solutions.

  • Remember that delivery is a feature - do not disappear in the encoding with holes, like crazy for six months. Continue to regularly deliver prototypes (or much better working versions with a growing subset of features) and work with the client not only for the client.

+7
source share

Try using SCRUM and TDD.

Copy short iterations (1-2 weeks) with clear and short goals, try to create several end-to-end scenarios as soon as possible, and create the necessary infrastructure.

Use TDD - I found that it helps when confusing goals arise - by writing a test before entering the code, you focus on the objective one function at a time.

+3
source share

It sounds like you need to organize your software in several functions, rather than treating it as one plate of spaghetti code.

You can use some formalism to structure your thinking, such as UML for static architecture or MSC for dynamic architecture.

+1
source share

I have been in similar situations on a much smaller scale. However, I hope these tips can help.

  • have a design session (preferably with colleagues) to figure out the rough architecture for your software.
  • try to break complex stories into smaller subtasks that are managed one after another.
  • write unit tests - this will allow you to safely reorganize your code without fear of breaking something if you feel that your existing design is not quite right.
+1
source share

All Articles