Perhaps the one constant in becoming an expert in any particular craft is to do it regularly – preferably daily. For some disciplines e.g. skydiving and marathon running, this is prohibitive by being expensive or physically extreme. There are countless other more attainable skills, however, that demand only our time.
The purpose of this blog – for me at least – is to provide a place for thoughts on software development in practice and the implementation of ideas. So often it becomes the natural place to trial a new technology but at the heart of every technology is the idea that it was created to solve a problem. If my problem is, “I want to find a way to use technology X”, then I have failed before I have even begun.
Behind every implementation there should be a problem, and if we as coders aren’t solving genuine ones, we quickly become obsolete and left behind. More vital than the technology choices we make, are the problems we choose to solve. Therefore, it’s essential to make sure the muscle that comes up with ideas is getting some exercise every now and then.
With this in mind, a friend and I decided to embark on a joint training regime by coming up with one idea for a problem with a tech solution, every day for a month. Here’s how we got on.
The Next Paul Graham?
There’s quite a healthy startup scene in my town despite being 5,000 miles from Palo Alto. Since reading about startup culture and sharing a flat with a former colleague who left the world of work to start Jasper Apps, I love the idea of building an entire company yourself. I don’t see myself quitting work anytime soon to start a business, however, it’s a lot of fun to come up with ideas.
I’m also very conservative for a software developer when it comes to technology. It has to solve a real problem or I’m not interested. It also has to be an important problem too – I count a bigger penalty than simply the financial cost of an extra hardware device or software application. How much physical space does it take up? Will this be another device I have to backup? Do I have to grant extra privileges to my login on 3rd party sites? Is this another legal entity that needs to know my email and postal address? If the answer to any of those questions is yes then the problem had better be a big one because otherwise I’m going to continue solving it with a ye olde abacus and/or big wooden stick. This natural high bar will, I hope, help me reject many ‘non’ ideas.
It still doesn’t shield me from coming up with bad ideas, as you’re about to see.
My friend, Scott, and I will both describe an idea in a sentence or two every day recorded in a Google shared document. We allow for the occasional slack here and there – tomorrow’s idea can be written the evening before, or we can get a few days into the red if real life commitments take over. Meta-notes in the document are made about how we’ll decide what to do with the ideas at the end of the month but for the most part we don’t talk about them, just write them down.
The First Week – Ideas 1 to 7
The project and process is proving to be quite fun. There’s a variety of programming and programming related ideas as well as ideas for other developers and some for the general public on a few different platforms. As soon as you come up with an idea you start to think how you’d solve it; what you’d need to deliver a solution; how long it would take; what shortcomings you’d have to overcome to make it a success; who you’d market it to; how you’d make a profit from it.
Already though it’s becoming apparent just how long a month is. A couple of times when an idea hasn’t come naturally during the course of the day, I found myself sitting motionless staring at a computer screen, deep in fruitless thought.
1: 3D Bookmarks
The sites we go to nowadays are varied and ever expanding. It’s not enough to have a list of them all together or even classifications and sub-categories. They should be stored in a 3D space that we can visualise and organise in a way of our choosing.
Rather than going to a list of sites, we take a walk around a room that we’ve designed. In this room are cubes with favicon.ico images on each side. Go up to a cube representing a website we want to browse to, click on it and it opens up another tab in our browser.
2: Money as Time
Think about money in a completely different metric than how much you have in your wallet or bank account: think about it as a unit of time! Every penny you earn will eventually be spent, it’s just a matter of when. The more you save, the better you manage your money, the further into the future it becomes when you’ll spend that money. Conversely, if you’re bad with your money, or in debt, the day you spend the money you’ve earned could be in the past.
Our task is to create a mobile app. Enter how much money you have in the bank/wallet now, when you get paid and any direct debits or standing orders. Then you just update the app anytime you spend money (you don’t need to say what you bought, just how much you spent). It will give you a date in the future (or past) of when the money you have now will be spent. Unlike your salary or bank balance, this is a metric that you can feel comfortable enough to share with others and can help anyone to keep an eye on how their day-to-day spending measures up to their income without having to do any complicated budgeting.
3: Theory to Practice in 50 pages
Not a coding project per se, but rather an eBook. Most of the problems with mathematics and theory heavy computer science topics e.g. Group Theory, NP-Complete problems (obviously, subjects close to my heart) etc. are that they’re taught as complex university level subjects with little consideration of why they’re important.
In a similar offshoot to the massive online compsci courses, we take a honours degree level subject we were taught, sum up why it’s important with real world examples, and take the content through to a complex example with code samples throughout. In just 50 pages.
4: Running songs
An accelerometer phone app but hopefully a small enough one to be not too technically challenging. For joggers who listen to music while running: note the speed they’re running at when a song starts, the average speed during the song, and the final speed at the end of the song. We rank their songs from fastest to slowest allowing them to empirically gauge which songs work best for their workouts.
5: Red Amber Green
Whether walking, running or driving we have map applications that can get us from point A to point B. But for many routes that we take commonly we don’t need to know directions, we need to know if we’re going to be on time.
This mobile app would interact with, say, google maps and GPS to let the user know if they were on target for arriving at their destination in the required time.
6: Crude 3D map explorer
An existing idea of mine and one I’ve blogged about (a first step on the way to create a big immersive game). Create a website that takes Open Street Map data and displays a representation of the real world i.e. create a pseudo-random building based on a rough template for houses, roads, hospitals, shops etc.
7: First Class Function URL
The Second Week – Ideas 8 to 14
At this stage coming up with a new idea every day is becoming a bit of a chore. The main reason for this is that with the exception of one or two gems, most ideas are pretty bad ‘non’ ideas (the ones I had hoped to avoid). And those are the ones that were good enough to commit fingers to keyboard. I’m desperately trying to hold back from including existing ideas I had before the start of Idea A Day – ideas that have been kicking around for anywhere between a few months to several years. Formalising existing ideas isn’t the main purpose of this exercise so it’s something I hope to avoid or at least minimise.
8: Electronic Wallet
I’d be surprised if there wasn’t already something like this but… an encrypted folder for documents that can be stored anywhere. It takes sensitivity of documents out of the hands of cloud storage providers. We could offer some integration support with the OS and DropBox / SkyDrive / iCloud, e.g. preview files in a desktop application, sync with the cloud storage drive of your choice. Make the encryption process open source to convince others it works.
9: Jury of your peers
Similar to sketchswap.com where you draw a picture and get a picture, we create a website that acts as mini-courtroom for a dispute between parties who are prepared to allow the anonymous internet hordes to decide their fate. You and the other party submit an issue for resolution – each one gets to write the problem in their own words. Twelve people read both accounts of the case and vote in favour of one party or abstain. For each issue you ask to resolve, you get 6 votes in other people’s problems so there’s a constant equilibrium of 12 votes for every issue.
There is nothing new under the sun. We should write a plain old notepad app… for a new platform.
11: Development Environment Top Trumps
Invite the community to pick their favourite development environment variables, both tech-related and non-tech related. For instance, favourite: beverage, snack, monitor setup, OS, IDE (or text editor), development platform (server, desktop, browser, mobile etc.), test bed application (Firebug, IDE debugger), language, continuous integration framework (TeamCity, Jenkins), instant messenger, source control system or tool (Git or GitHub, BitBucket), two-hour window of the day to do coding, music to code to, view from desk, location of desk (home, office, open plan). Only allow one choice per category. Allow coders to have badges linking to their StackOverflow, TopCoder, Twitter pages etc. and ask them some questions regarding experience / responsibility. Let users query the data on various keys a la, “Show me distribution of StackOverflow score by beverage choice”, “Number of websites run by development platform”.
12: Location based reminders
Often we create reminders for ourselves via calendar items e.g. put thing in oven at 18:00. But also we need reminding to do things when we’re near something e.g. when you’re in the town centre, pick up a passport form from the post office. Make a location based reminder application.
13: More location shenanigans
Want to meet people who live parallel lives to you? Send messages to other users based on conditions you propose. For instance, send a message to people who go to your favourite bar, shop (location specific) and club night (time and location specific) within one month.
14: Personalised music creation
Really simple instrument set with a few beat, chord progression, melody creation rules. Tie this to a simple neural net, ask the user to listen to loads of 15 second samples and rank them. Back propagate and you have a crude AI module that creates music you specifically like. Once it’s trained, produce tracks ~3-4 minutes long.
The Third Week – Ideas 15 to 21
You will notice some censorship that seems at odds with previous statements I’ve made about ideas, more specifically, about the ownership and worth of an idea without an implementation. I thought long and hard though and despite there may well being nothing new under the sun, despite the fact it’s completely unlikely someone would see the idea and start it tomorrow, I can’t help but feel a powerful attachment to it. This is an idea I’ve had for a while now and one day I can see myself not just implementing it as a side project or something to help me learn a new technology but rather something with which I’ll try to change the world (oh yes, I’m using language that pretentious).
With regard to coming up with new ideas, this week is a collection of both the scraping of the bottom of the barrel in terms of quality or failing and writing down a few sentences about an already well formed idea. I struggle to see how I’m going to complete the month. And yet the penultimate idea of the week seems to me to be quite a good one. As a hobbyist musician who spends less and less spare time playing the guitar, increasing the barely existent music theory from my early self taught days generally feels dry and boring. I would love an application that turned identifying notes, harmonies and dissonances into a fun game. There is hope that I hold enough creative thought left to see out the month in style.
15: Football Manager
It has come to this. I am forced to use existing ideas because I can’t think of any others. Create a really simple football manager game for an 11-a-side recreation a la Championship Manager 1993. We can port a successful model to a mobile platform. I’ve previously tried to make something like this with friends that fell apart because we made it too complicated (this is probably a lesson for all our project ideas), so ideally we should have a minimal DB (ORM) design that will take at most a day to code up.
16: Gutenberg to e-book Converter
I know nothing about electronic books but would there be any merit in converting the html text from the Gutenberg project to something that plays nicely on a Kindle?
17: Financial Risk, Valuation and Reporting in the Cloud
The schlep idea that everyone ignores. Financial services are a weird cross between needing to be cutting edge to take advantage of ever increasing data collections and complex models, and yet they’re hammering against the door of quant modellers who can’t accept that the world has moved on from VBA at the back of an Excel spreadsheet.
We start small with some simple valuation routines for vanilla trade types but essentially we allow users to upload financial data and custom code to the cloud where we perform various calculations. We offer archiving, reports and graphs.
18: <Top Secret Idea>
I can see this revolutionising <idea subject matter>, nay, the world.
19: Decision Support Designer
There are two things wrong with the Constraint Programming community that lead to ludicrous cognitive dissonance. Firstly they love the Eugene C. Freuder quote from the seventies/eighties: “Constraint Programming rocks. You describe the problem and the computer solves it.” (I’m paraphrasing slightly). But it’s true and it is really cool, you don’t have to solve a problem, just describe it. And the description process in its simplest form is really straightforward.
The problem comes in two ways after this. The price of having a generic solver for all problems is that it isn’t an expert system. It is slower for pretty much every problem it tries to solve compared to a specialised algorithm designed solely for that problem. The constraint solving community address this by making their constraint solvers better but generally speaking, better and more complicated. More knowledge is required about how best to model your problem. Special purpose constraints can be used but only in certain cases and will require additional setup.
In the end, to make themselves more performant they’ve sacrificed the raison d’etre advantage of constraint programming: to make it easy to describe and solve a problem. And though the complexity may result in faster runtimes, they are still lower than the best specialised algorithm. So, in conclusion Constraint Programming is a way to get slow runtimes in a really complicated way.
After all that rambling, the idea: make an easy to use graphical toolkit for solving general purpose NP-complete problems. These could be timetabling, planning, scheduling, bin-packing problems, for example, travelling salesman. Convert the problem to a CSP and send it to a constraint solver in the cloud. To compensate for the reduced efficiency of the general purpose tool, the user can choose to pay for more parallel cores up to a practically unlimited amount if time is precious to them.
20: 1, 2, 3 Note Tester
Game to improve your musical ability. A note is played within a certain range and the user has to state what it is e.g. middle G#. Once the user is good enough at the one note version, they move on to ascertaining two notes at a time, then the full three note chord.
21: Geolocation Pictures
Another location base phone app. Scour public APIs for location tagged pictures. Show on the users device a list of pictures that were taken within, say, 100m of their current spot. Allow users to add pictures.
The Home Straight – Ideas 22 to 31
Now that barrel has been scraped and a low bar been set for what could constitute an idea, I eased effortlessly into increased creativity. Some of my ideas up to the end were bad but I was also coming up with less traditional concepts and more outlandish themes. The variation in quality was greater but the process of constantly being open to think about new ideas had set in and I was beginning to find it easier and, crucially, enjoyable again.
22: Rate my ‘X’
I’m only just now in my thirties learning how to make a decent cup of tea. There are too many variables and it’s not easy to know how each affects the process. Create an app that allows users to enter all the variables they care about (temp of water, full/half/rounded teaspoon, length of infusion) and provide a rating out of 10 for the finished product. Over time we can state the most important variable conditions for making a good cuppa/brioche/white russian/pot plant etc.
Another “give one, get one” style site. Each person wants a recommendation for a certain something: book, game, album, single, museum, film etc. As a recommender you are allowed to ask up to three questions to gauge the person and their interests. You score a point if the recommendation was well received.
24: WTF’s Wrong With This GUI?
While no-one in the world knows how to make a good user interface, every man and his dog can spot a bad one. Create a site where someone can upload a screenshot of a UI they’ve created and allow other devs to pour scorn on exactly what’s wrong with it and what they should do instead. StackOverflow style voting for answers/suggestions.
25: Food Miles View
Don’t know how we’d easily automate this. Put in what you eat/drink on a daily basis and get a global view about where everything came from. Cool stuff would be German beer then there’s the unexpected South African apples, South American baby corn, Greek olive oil and New Zealand lamb.
A website where we classify every conceivable software technology category. Within each category we list possible solutions (libraries, languages, platforms etc.) We allow users to upload reasons not why it’s good or bad, but why it simply won’t work. Other users of the site who are thinking about using a solution can read about potential showstoppers before they get started and come to a conclusion about whether the flaws will mean they can’t adopt that technology.
Some technologies will span several categories, but the flaws will only be listed in the relevant category e.g. .Net solves loads of problems and will be added as a potential solution in a lot of categories. However, if a comms expert notices that some TCP/IP packets lag in certain cases using .Net’s networking libraries, that showstopper is described only in the TCP/IP Networking category.
We allow users to vote up/down the showstopper to give a feel for reproducibility / confirmation.
27: Shopping List
There’s stuff you need to get on the way home and also lists of things you want e.g. Amazon wish list. How about a version that other people can add to (with your permission) so your spouse can request you pick up milk. Because they’re lazy and they hate you.
28: You suck
We compile a list of some of the most impressive achievements of men and women throughout the ages and the exact ages they were when they achieved them. Every day the application mocks you by telling you what they managed when they were your age. I think at the age of 32 and 38 respectively ;) we could have some real suicide inducers.
29: Local Best
Recommendation site. You’re allowed to only recommend local businesses (one per category) using some kind of post code / location verification. Good for visiting a foreign town and you just want somewhere decent where you won’t get tourist-shafted.
30: Morph and Age
Take a picture of yourself on a given date. We resize and centre your face and morph through the series so you can see yourself age. Sweet Zombie Jesus, my spirit has just about left this exercise if that’s the quality of idea I’m coming up with.
31: All jobs/companies suck
Similar to the “100 Reasons Not To Go To Graduate School” site. We allow anonymous submissions for why job <x> or company <y> sucks. It will allow people to vent about their frustrations. For example, my company is about to enact a no-web mail policy post network migration to our parent company. To finish with though there should be a yes/no opinion from the author about whether this is bad enough to make the whole thing unadvisable or whether it’s a pain you can live with.
After the month was over we patted ourselves on the back via email.
Iain: Finished… I certainly am. Thanks for pushing me to give this a go. I doubt either of us would have done the full month if we were trying it alone. I was struggling around week 2 but it’s amazing how inspiration comes to you when you’re continually thinking, “I have to come up with ideas!”
Scott: I’m finally done too. That was superb. I also would certainly have failed without the companionship. I look forward to the next phase.
Iain: Yes, the beer. We should put aside some time to have some alcohol and talk through the ideas in a conference call stylee.
We organised a night to speak about the ideas and prior to that we each categorised our thoughts about how good the ideas were, how realistic they were to implement in terms of difficulty and whether anyone would be interested in the output. From there we ranked our ideas as Impractical (could be either bad or potentially awesome but would be too difficult or pointless to implement alone), Boring (Bad), OK, Good, Cool. We would then concentrate on the Good and Cool ideas and suggest strategies or problems for the other that hadn’t been considered.
For example, Scott and I both liked one of his ideas which is a twist on the traditional educational ebook. I suggested that unless the visual execution was done to a near flawless degree like, say, something a professional designer could produce on an iPad, it may not capture the imagination as intended. Without some input from a PhotoShop/Gimp expert as well, time spent crafting situations and outcomes could be lost.
Yet more support was shown for the notion that there’s nothing new under the sun and that having a great idea is no guarantee to success – I discovered two of my ideas had already been implemented. Idea 7: First Class Function URL was superbly executed by the guys at Planet Rational in the site called webscript. They even had the business model in place – something I really like to see from startups as opposed to “get users, hope for buyout”. The other was the rather grander Idea 21: Geolocation Pictures. My description was a bit vague and only part of the functionality provided by colossal startup, Color, that managed to raise $41m of venture funding capital, turned down $200m from Google and then fizzled out.
The hour spent critiquing ideas worked less well than we expected because we’re friends who don’t speak often enough and were constantly distracted away from the agenda simply to catch up. Our suggestions helped give a sanity check to the possibilities available and we helped to confirm what our next side projects are likely to be in the short term and in the future beyond that.
Try “‘X’ A Day” Yourself
Following the process of coming up with an idea for a problem to solve every day was ultimately very rewarding. Like anything else, it’s easier once you have the structure of somewhere to put a unit of work – in this case, an idea. For years I used to look at all the potential new things I could learn and projects I could start without taking steps to do anything. And when I started Life Beyond Fife, I had a place for them all – more than that I had an obligation, if only to myself, to keep coming up with new projects and implementations.
Likewise, if you want to give “Idea A Day” a go, or anything similar like it, follow these tips.
- Put a structure in place for storing, recording or presenting your work
- Create a schedule and stick to it
- Use social hacks to help you stay the course e.g. do it with a friend, publicly proclaim what you intend to deliver ahead of time, and when
Don’t sit there and think, “There’s too much to do.” There always will be, just do a little bit of what you can!