So I’ve come to the point where I’ve wanted some to see some features on the software I regularly use and I feel confident enough that I can pull it off. However, once I start getting into it, it all becomes so overwhelming that it’s hard to get anything done.

For instance, on more than one occasion I had trouble getting the projects to build on my machine (eg., unsupported OS, lack of documentation, etc.) and it left me unable to write a single line of code making the experience frustrating from all the time wasted that I had to move on.

Other times, I recognize some the patterns and get the general gist of some snippets, but the overall code seems so convoluted to me that I don’t even know where to start to analyze a solution, even though if it’d probably take ten lines to implement.

For context, I’ve been more of a hobbyist programmer for the great majority of my life with a bit of schooling. I do have various finished apps under my belt so I’m definitely not new. But I have no reference for how long a feature should take to implement in someone else’s code for the average Joe who does this for a living.

So I’m left wondering: What advice do you have that could make this all more accessible to someone like me? Do you have a general strategy to get started? How long does it take you from start to finish? And if you run into issues, where do you seek help without nagging the devs about their code who may take too long to respond to be of use?

Many thanks for the feedback in advance!

  • mox
    link
    fedilink
    13
    edit-2
    7 months ago

    Most of what comes to mind has already been said by others, but I want to add one thing…

    the overall code seems so convoluted to me that I don’t even know where to start to analyze a solution, even though if it’d probably take ten lines to implement.

    One of the most important things to understand about software development is that (outside of small hobby projects) the vast majority of the work is not writing code. Most of the hours will be spent on a combination of other tasks, including:

    • Understanding the desired behavior
    • Understanding what has been tried before
    • Understanding what has and hasn’t worked well in past attempts
    • Considering unexpected ways in which the software might legitimately be used
    • Imagining needs that might emerge in the future
    • Imagining problems/circumstances that might emerge in the future
    • Devising a solution that you think will work well
    • Predicting limitations of your design
    • Communicating the reasons and goals behind your design choices
    • Listening to feedback from others, and understanding it
    • Collaborating with others to find common ground
    • Conducting research to prove your assumptions or answer open questions
    • Learning the ins and outs of surrounding code that is only tangentially related to yours
    • Learning unfamiliar tools
    • Learning unfamiliar languages
    • Learning unfamiliar algorithms and data structures
    • Revising your design
    • Coming up with succinct and clear names for things
    • Testing your implementation (making sure it works now)
    • Devising and writing automated tests for your implementation (making sure it will keep working when someone else changes something)
    • Composing comments to explain why non-obvious things are done a certain way
    • Reformatting your code to fit the style of the project
    • Writing documentation, and rewriting it
    • Answering questions
    • Waiting for others to get back to you

    The time and effort required for all of this multiplies when modifying an existing codebase, and multiplies again when most of that code was written by other people. Shepherding a contribution from idea to final merge often requires not only technical skill, but also study, diplomacy, empathy, and immense patience.

    But I have no reference for how long a feature should take to implement in someone else’s code for the average Joe who does this for a living.

    It varies quite a lot. I have had dozen-line changes take months, and thousand-line changes take a day or two. Just know that if it’s taking much longer than you expected, that is completely normal. :)

    • @[email protected]
      link
      fedilink
      37 months ago

      Hear, hear! I would add that it multiplies again, again when other people are actually using the product. Engineers famously build tools for engineers which can leave something to be desired for the layman.