DEV Community

Ben Halpern
Ben Halpern Subscriber

Posted on

How do you take the first steps in a daunting and complicated software project?

How do you break ground and start making progress on a big coding task?

Top comments (9)

Collapse
 
tqwhite profile image
TQ White II

The first thing is I do not fool myself into thinking that I am going to be coding anytime soon. Having started coding too soon many times in my youth, it always led to a great deal of pain later. When I have taken the time to fully understand the problem and develop a comprehensive implementation strategy, it not only turns out better, it is a much better experience for both me (my team) and my client.

For me, the most important thing is understanding the problem. I spend a fair amount of unstructured time thinking with sporadic efforts to write a statement, a few paragraphs, that say what I am trying to do. If there is someone who cares, I show it to them and discuss it. It is never going to be exactly right or final but I keep going until I feel like I have written something profound.

Eventually, I want to get to work... still no coding. Long ago, I found that it is tremendously useful to document the components of the problem. Since I almost always am working on web tools, I start with a list of people who will use the system and then what each of them will want to accomplish. As much as I can, I try to actually find one or two people to represent each user and work with them to fully understand each user story that concerns them.

Having a comprehensive list of users and user stories, I like to focus on what information is being managed for each of them. This becomes very granular and lots of user stories will want to refer to the same information. I have found that it is important to include the redundant information. Eventually, though, after having worked with any users I can find to confirm completeness, I extract a list of unique facts the system needs other than manage.

At this point I do stupid pencil sketches of possible UI tools for each user, never, at this point, trying to make them consistent or efficient or combined. Just a visual expression of what the user story might look like on screen.

While doing that, I also start thinking through the database schema. I sort the data elements into categories and think about relationships. I like to do this in pencil on paper. This forces me to rewrite each element's name every time and that encourages evolution in the naming scheme that is very helpful. It is also easier to draw a long relationship like around the edge of the page when you realize that should happen than to use a computer tool. I am never satisfied until the diagrams are fairly pretty. I find that attractive, well organized entity diagrams make much better databases.

Of course, all of this should be shown to/collaborated with anyone else who will listen. If you can get your bosses/colleagues to listen to you, make a formal presentation with slides and stuff. Creating this explanation will improve your understanding of the task tremendously. It will also give you way to inform others so that they can help you out. Never be defensive. Always seek criticism. Be very flexible.

After that comes choosing the tech and organizing the programming effort. I sort of do what I just described but about the technical details instead. I am a big fan of thinking before coding. Make a prototype if you are doing anything unusual.

I have had a few occasions in my career to start a green field project that was expected to take a year or two before production. Being very thorough and patient up front will improve your life infinitely.

Collapse
 
dansilcox profile image
Dan Silcox

I typically try and break it down into smaller chunks wherever possible, first of all in a bullet list and/or diagram. Once I start to see the components involved, I then try and further break each of those down, just to the point where I know enough to start spotting obvious 'gotchas'.

I like to build little POC (proof of concept) versions for the more complex parts as well, since it can really speed things up when you come to do the 'real thing' later on. The danger is of course that the POC ends up in production πŸ˜….

Collapse
 
bntstr profile image
Bntstr

It helps when I can see some progress, so early on I try and get to a point where something works and is demonstrably part of the way there.

So basically start with some high-level part that changes, even if the inner-works still have lots of work to do. I find this better than starting with some underlying logic which doesn't feel as close to finish.

Collapse
 
pengeszikra profile image
Peter Vivo • Edited

In a ideal world, I start writing ::

<!doctype html><html lang="en"><head><script src="https://cdn.tailwindcss.com"><.......
Enter fullscreen mode Exit fullscreen mode

.... until

......></body><script>/* ... bunch of code ... */const qs = q => document.querySelector(p);q('pre').innerText = JSON.stringify(result, null, 2);</script></html>
Enter fullscreen mode Exit fullscreen mode

like this (dev.to/pengeszikra/wannabe-js-fram...)

Collapse
 
tymzap profile image
Tymek ZapaΕ‚a • Edited

If we talk about whole project, tackle the hardest pain point FIRST. Do NOT work on authentication, infra etc until you solve this one problem.

Collapse
 
prodevstaff profile image
ProDev. Staff

Hope you are well. I have made this comment to you because for many days the problem is that whenever I try to comment someone on this account, it is displayed

Image description
and the comment is not submitted. Can you help me in this matter.
My account where this problem occur:-

Collapse
 
martinbaun profile image
Martin Baun

Start with a prototype of the Minimum Viable Product. Break it down, build it up piece by piece. Just get started :)

Collapse
 
pgangwani profile image
pgangwani

Avengers, Assemble!

Collapse
 
jjokah profile image
John Johnson Okah

I have a cold beer 🍻 with an LLM