Why I develop software
I love building software. It’s difficult, frustrating, sometimes tedious and often exhausting. Why do I do it? Because software can conquer the mundane and allow us to put our minds to a better purpose: imagination, creativity and inspiration. Oh, yeah, and having a good time. Ever see a computer at a party? Nope – they’re back at the office spitting out the quarterly reports.
I have built systems for decades. I don’t build software by thinking like a computer. I think like someone trying to solve a problem.
“Try this, no, that didn’t work, try that, oops, no try something else, I think I got it – wrong, still broken. Let’s jump on a call and brainstorm. Is there an easier way, a faster way?” And finally the most satisifying feeling of all, “Yes, I got it – that’s the answer.”
That feeling is why I put up with the frustration, head scratching, anxiety and long hours. Something about finding a solution is wonderful – all of the questions and facts floating around in my mind find a place, the puzzle completes itself, and I know I solved it.
Processes are important – gathering data, organizing, creating plans, collecting requirements. Communication, even more so. What are we building, why are we building it, who will this help, who will it not, how long do we have, how much time and money is available? All of those things need to be captured, analyzed, organized and prioritized, but in the end, it is a team’s collective creativity that delivers a solution. There are lot of processes out there: agile, waterfall, iterative, extreme, pair programming, and tools to go along with them. But in the end, they all serve the same purpose, a scaffold for information and a protocol for coordination and communication. All processes work – no one process is better than another. A process makes you think not just about the work, but about how the work get’s done. When people pair the work with the how, then you get a team.
Successfull software teams are authentic, honest and direct – they grow together through a shared goal, communication and the small successes and failures that come with every software project. Good teams listen more than they talk, are quick to acknowledge mistakes, give credit to each other’s contributions and take responsiblity for their commitments. They stay focused on a goal and adapt as they progress. These teams deliver lasting results and their work is a legacy to their co-workers and companies.