Creating software is easy, creating good software is not
Creating software is actually the easiest part of software development.
Creating a good software product on the other hand is more difficult.
Let me explain.
There are a vast array of choices on how to build a software application. Languages, platforms, design patterns and so on.
The key component however is you build an application in some language or combination of languages…..only that’s just the start.
From there, you have end-users that will actually use your application, these can be in the form of an application that a user directly interacts with, such as a mobile app, or web application, or even a process that runs in an automated fashion.
Now, it’s common knowledge that software has bugs. anything except the most simplest form will contain things that don’t work as expected, or produce unintended side-effects. Now this is big, why?….. because often when people develop software, they don’t account for the time it will take to fix these bugs, work with other people to resolve issues and so on. more on this later..
Producing a software application generally consists of
- Writing the code that forms the software - “coding” it. - now multiple people may work on this codebase, or it could be a solo effort.
- packaging or deploying the software.
- People testing the software, could be one or two people, qa teams or more.
- People using the software.
- Other developers brought in later to extend or work on the software.
- Other stakeholders such as those funding development of the software.
People will find that the software does not work the way visioned it to work in their mind, not bugs as such, now this could be due to lack of clarity in articulating what they wanted in the first place, misunderstandings between developers and product owners, end-users.
Component: Clarity, and understanding of requirements
People will likely find bugs that the developers never intended, edge cases that get reported, feedback on what could be improved, what sucked…. (yes things will suck, expect it).
Component: Feedback is super important from the end-users.
People may like the product, it may even work according to requirements, however there will always be some new things that could be added, new features, perhaps changing of existing features.
Component: Changes are most likely, account for them.
The software may be developed in an isolated fashion with one person, though it’s more likely to be a team development effort. This requires collaboration and co-ordination of a development team, which could consist of architects, developers, designers. Along with communication with end-users.
Component: Communication, Collaboration are essential.