Doubt many will follow this but sometimes I have observations about the world, software, and sometimes stuff only I think is funny or cool and I want to share those with some who may also enjoy it.
Niall, Bailey, both of y’all said I should start a blog when I mentioned it so here I go:
I have been paralyzing myself when writing larger than trivial software for a long time, since I first started reading about good design. How you should modularize everything and abstract it so when one part changes another doesn’t have to. This fundamental part of programming is easy to comprehend, even non-techie friends can understand the basic premise of why writing code so that you only have to change it in one place rather than dozens when adding/removing features is a good thing.
I am in fact rather good at partitioning applications into managable parts. Where my flaw becomes very evident is the over-engineering of those individual parts. I have a hard time letting go of a module and calling it good enough for now. I finally break out of a module, get a good portion of work done on others, feel like I am on a roll then see a flaw in the design of a central module that may change its interface to other modules, therefor calling for a redesign of a lot of the code and pushing everything back.
Currently that application that is killing me is synput my application that will make todoist available to me offline as well as creating a command line interface for it so I can quickly add things to it without disrupting what I am currently doing. All too often I think of things I would like to develop then when it comes time for me to choose a project to do, I draw a blank. This will hopefully fix that.
In an effort to thwart this behavior I am trying out different mind mapping applications and deciding on some rules to get myself to a version 0.1.0 (first testing release) from which I can work on, change, and otherwise iterate over the application and not have the same guilt or problems I am running into, since as long as the application is usable and hasn’t lost functionality I can just release a new version.
The first application I tried was FreeMind it has a very nice keyboard layout, allowing one to add ideas without having to really stop. I was loving it until I tried to drill down on one part of the thought process and just focus on it. Turns out this is not a needed feature by lots of people and I had to explain why I would even want it with detail on IRC. So I will also explain here.
Drilling down is to take a part and focus on it removing all parts that aren’t stemming from it. This way you get an uncluttered view where you can put notes about the part, add lots of detail and generally flesh it out without the distraction of the whole map being there. I need this because of the same reason why I am using this, I am easily distracted and if it is there for me to think about I will.
Kdissart was recommended to me, as I was asking in a linux channel, first problem is it is linux only, second is that it still didn’t have the drilling down that I needed. So I immediately scrapped it.
XMind was then mentioned in another IRC channel that I had asked. This piece of software is amazing. It has the intuitive key bindings like FreeMind had, a cleaner interface, the feature I needed, the ability to drill down on a idea and flesh it out.
I have now begun mapping the software out so I have set goals for each part to do, once that part satisfies those goals, I will move on not to touch it until the next iteration over the software. I plan on taking notes during whenever I think of how I could improve other sections and just dumping them into a list to be fleshed out and sorted later.
This is much in the GTD way, which I hadn’t thought of applying to software development but it seems to be what I need so I am going to give it a go.