I love software, everything from using it to making it. Most of all I love designing it.
Software design
It’s not the UI which is what most people think of when they think about software. It’s not that I don’t enjoy designing a great user interface, because I do. I just don’t get as much joy from that as I do from the other things.
It’s the act of carving out a solution from a blank slate. Whether at the system architecture level or an individual function, you start with nothing. You have a problem that needs a solution and it’s up to you to find it on that empty screen.
There is no feeling like going from a problem definition to a good design.
A great system architecture is a thing of beauty. It has no more than the necessary parts, they work together in perfect harmony with well-defined borders. It’s as understandable, maintainable, and scaleable as it needs to be, and it’s complete.
A great function is also a thing of beauty. It also has no more than the necessary lines, they flow sensibly with clear purpose and effects. It’s as understandable and maintainable as it can be, and it’s complete.
At every level there is great satisfaction that comes from solving a problem in the best way you can.
Software architecture
My personal preference is to work at the system design level. I like the big picture - it matches how I think. If someone describes a problem I will be crafting a solution in my head before they’ve finished, which invariably results in me having to completely rethink my design when I’ve heard the whole thing. Sometimes I wish I could stop, but I really don’t.
I see potential software solutions everywhere. I have many notebooks full of everything from vague ideas to complete system sketches, and more unfinished projects in my Dropbox than I can remember without looking. And that’s one of my issues - I solve the problem, sketch out the solution, maybe build a prototype to test that it will work, then I get bored. I’m a problem junkie not a details finisher.
Oh the things I could accomplish if I could finish just one personal project.