Over the past several years I've released many applications. Some have been reasonably successful, some haven't been. Some I've been passionate about, some I've lost my passion for. But I've kept going with them all. Recently I decided to start doing contract work, to increase my income and to expand my skill set. I barely had enough time to manage all my applications before, but now it has come time to make some important decisions about them. In this post I'm going to explain what is happening with each app and why.
Lighthouse Keeper is a fantastic app. Version 2 is easily the best software release I've ever produced. It's also one of my most used apps. So Lighthouse Keeper is the easiest to deal with: everything is staying the same.
I acquired Syllabus over a year ago, but haven't really done anything with it yet. That will be changing over the coming months as I'll be working on Syllabus 2. Version 2 will be a major overhaul of the app that will hopefully provide a platform for all future versions.
We are in exciting times when it comes to technology and education. More students than ever have digital devices, yet they still have to organise their student lives across many apps, or even in paper planners. Add to that the fact that most software designed for education is bland and uninspiring, something that students use because they have to, not because they want to. I want to try and change that.
Storyboards is a bit of an odd mix. It's a fairly successful app and I can see huge amounts of potential for it. But I don't believe I'm the right person to develop it. My current skill set doesn't really fit in well with the type of app it is, plus my knowledge of the subject of storyboarding is rather limited.
Thankfully, there is someone who is the right sort of person to develop it and realise its full potential. My good friend Steve Troughton-Smith has acquired Storyboards. He's very excited about the prospects for it and it fits in nicely with his current set of applications. I've stopped selling Storyboards through the App Store, but I'll be leaving the product page up for a while to explain what has happened.
Another simple one. I'm discontinuing Minim. It hardly makes any money and never really has. It's a good app that I use myself, but very few other people have a use for it. However, I will be open sourcing it in time (see the end of the post for more), so that others can contribute to its development if they so wish, but I will not be actively developing it myself.
In the next few weeks I will be releasing Minim 2.0.1 which will remove all trial limitations from the app.
And so we end up with the trickiest app to deal with. I have a great love for Code Collector Pro. It was my first decently successful app. I also use it quite a bit and have lots of ideas for how to improve it. All this sounds very promising.
Unfortunately, Apple has caused me some serious problems. Ever since the Mac App Store was released, sales through the M Cubed website have dropped off. Most of my sales now come through the App Store. This sounds good until you realise that in
November March June Apple will be requiring all applications use the new sandboxing functionality in Lion. While Lighthouse Keeper was quite easy to fit in the sandbox, Code Collector Pro is impossible to.
I did have various options available to me. I could have removed core features to fit the app within the confines of the app store, but that didn't seem very appealing. I could have taken the Pro version off the store to just sell through the website and created a non-Pro version for the store. That seemed like an awful lot of work, plus sales through the website would be minimal. So I've opted for a third option.
I'm discontinuing selling Code Collector Pro. I will be releasing version 1.5.3 in the next few weeks which will remove all trial limitations from the app. However, unlike Minim I'm not going to be completely discontinuing it. I will be open sourcing the app, but will continue to develop it. It won't get the same attention as my other projects, but it will see updates from time to time. I'm also hoping that as a tool targeted at developers, it might see others helping to improve it.
I'm hoping to split my time between contracting and developing Lighthouse Keeper and Syllabus in the future. This will let me focus on working on those things I'm passionate about and improving them at a faster pace. There are also various other non-coding projects I've been wanting to work on so hopefully I'll find time for those now.
This has been an incredibly hard decision to make, but it is a necessary one for my users and for me personally. Worrying about how to handle everything has caused me a lot of stress. If you are one of my users I hope you understand, and I want to thank you all for your support for each of these apps.
The timeline for all this is not set in stone. It all really depends on Syllabus 2's release. At that point I'm hoping to have a single "re-launch" day, where I open source Minim and Code Collector Pro and update my website to focus more on contracting, Lighthouse Keeper and Syllabus.
For the first time in a long time I feel relieved, calm and incredibly excited about the future. I can't wait to see what it brings.
The last year seems to have zoomed by. It only just occurred to me a few days ago that it is going to be 6 years since I started M Cubed. That makes it a quarter of my life. So what exactly did I do with myself the past year and what do I plan to do with M Cubed's 6th year?
The past few months I've constantly had doubts about M Cubed and myself as a software developer. I've been feeling like I've achieved nothing the past few years since I went full time with M Cubed. Sales that were initially heading in a positive direction have somewhat stagnated. They're enough for me to live off, but only because I moved back with my parents after university.
I've felt like progress has been slow. This year has been dominated by Lighthouse Keeper 2. It has taken 9 months to create, but probably should have been more like 6 or 7. I wanted to be so much further along with various applications and be getting releases out more frequently. But that hasn't happened.
And on top of all that has been the crisis of confidence in myself as a software developer. I've been programming for 8 years now, but recently I've had many moments where I feel like I know absolutely nothing about anything to do with software development. I've felt like I don't know how to design software, to write good code, to even solve trivial problems. I've also felt like I work incredibly slowly, at least compared to the speed of some other developers I know.
Given all this context, when I looked back at last year's post I chucked when I saw what I said I'd like to achieve. I wanted to get Code Collector Pro 1.5, Storyboards 1.1 and Lighthouse Keeper 1.2 out. "What a ridiculous and naive goal," I thought, "I haven't done any of that". After a bit more thought though, it dawned on me that I did actually do all of that (well, almost). Code Collector Pro 1.5 and Storyboards 1.1 were both released this year. Lighthouse Keeper 1.2 ended up morphing into 2.0 and will hopefully be released in early december.
Whenever I've looked back at the past 2 years I've focused so much on what I haven't done and where I'm not. It was only the past few days, when I've been wondering what to write for this year's post, that I've thought about what I have actually achieved.
First and foremost, I'm writing software full time and am able to make some sort of living off that. Now granted it's a somewhat cheap living, without my own place or any exotic holidays, but I can afford the occasional game or gadget to keep me happy. But the thing is, many people never even get to this stage, so I have a lot to be thankful for. I may have technically been doing this 6 years, but 4 of those were part time, as more of a hobby than anything. In reality I'm still getting started.
Lighthouse Keeper 2 is also a great example of how much I've improved the past 12-18 months. It is by no means perfect (is any software?) but it is by far the best piece of software I've written to date. It is powerful, it is well designed, it looks great. On top of this the code is pretty good too. I spent a lot of time figuring out how things should work early on, which led to slow progress. But in the latter stages of development I was constantly surprising myself with how easy I was finding it to add features. I'd add something and it would just work with everything else. I'm incredibly proud of myself for that.
I've also learned a LOT this past year. I've gone much deeper into how my tools work. I've pushed myself to learn more and more about Xcode, which has not only helped me develop software more easily, but also let me write my reviews whenever each new version comes out. I know more about how to effectively debug my software which has helped find bugs much faster.
Testing has always been a thorn in my side. I've always done it manually. There have been a few bits of code I've automated the testing for, but those tests were rarely run. I've always put off automating it all, partly due to laziness, partly due to "more urgent" matters, partly due to Xcode 3 being rather crap in this regard. Mostly though it was because I found it such a pain.
So the past few years I've been finding ways to reduce the pain to a point where I write more tests. Improving the quality of my code has helped a lot, but I've also learned the value of pragmatism. I found a lot of stuff I needed for testing I didn't need for shipping code and so it was just make my code messier and harder to read. So I found ways to allow a class to be easily testable while maintaining clean, elegant code for shipping (while also having the benefit of points of extensibility down the line if I ever need it). And while its benefits may be questionable, tracking my test coverage has helped spur me on by giving me some measurable sign of progress.
I've also finally set up a continuous integration system. I've dabbled with it before but given my aforementioned aversion to writing automated tests I didn't see the use. Now granted the majority of errors the CI system has caught so far have been build issues that only affected itself, but the few times it has caught a failed test has helped. And being tied into my source control system means that it always runs.
Another area I've looked to improve is documentation. I've always been fairly reasonable about commenting my code, but I'm trying to take this a step further, but extensively commenting everything, while also writing higher level documentation to help me see how the various components fit together.
And I've become much more proficient at scripting, letting me automate various other parts of my system or extend my tools with additional functionality.
So what will the future bring? Well the immediate future is to get Lighthouse Keeper 2 out. I'll also be spending all of December on those jobs I've kept putting off. The M Cubed website needs a complete re-write, which is also a good opportunity to finally sit down and properly learn Rails. I've got a HUGE amount of code I'd like to finally open source, including many internal frameworks and utility apps I use. I also started work on improving the Appledoc documentation generator, as well as writing a UI testing system for Mac apps, so I'd like to get those finished. I've always felt guilty working on such projects instead of apps, even though I know they'll help me long term, so I'm glad to just dedicate a month to them.
For 2012 I want to get major new versions of Syllabus, Storyboards and CCP out. These will, like Lighthouse Keeper 2, allow me to prepare for the future. They will finally allow me to reach the fabled land of "smaller, more frequent releases" that I talked about last year by cleaning up the source based and structuring it in a way that lets me add features and fix bugs faster. Hopefully I'll also be able to get some of these smaller releases out as well, but I suspect that a lot of my time will be taken up by these 3 big releases.
I also want to continue with my learning. I'd like to explore further into Instruments, which is seen as a mystical land by many, as well as give JetBrains' AppCode a try for a month (and write a review for it like my Xcode reviews). I've also reached the point where I'm confident in doing a lot of design work by myself, but I don't have enough knowledge of the theory behind it, so I'll be spending time doing research there.
A friend has convinced me that I should try to adopt agile development practices. So in 2012 I'm planning to take a proper stab at learning them and see what can apply to my situation. One of my big problems at the moment is a lack of structure in how I develop software, so hopefully a bit more structure will help me get releases out quicker, while also making sure I don't forget many of the ancillary things.
And finally, I'm going to commit to doing some contracting over the next year. I'm hoping to dedicate 10-15 hours a week to it, so it is a significant part of my week without taking it over. Part of the reason for this is simply to get some more money coming in so I can invest it in improving my apps further. But I've also had little experience with working with others the past 2 years. I haven't worked in a team, nor written software where the requirements weren't set by myself since I left university. I've been getting very rusty in this regard and it has been impacting my apps somewhat.
That's a rather long and detailed description of my goals for the next year compared to what I've written in previous years. But the thing I've realised most the past few days is that I can't just measure myself by how well I'm doing financially or how many software releases I have. There are other areas such as what I learn, that are just as important and where I've made a lot of progress. Whether I achieve all I've set out to do, we'll see in 12 months time. All I know is that for most of 2011 I've been in a slump, with little confidence in myself and no idea what the future will hold. Writing this post though, has given me new life and a similar eagerness to what I felt when I first started in this industry. Here's to year 7 of M Cubed Software!
Update: It seems the folks over at ENTP have fixed the SSL certificate, you should be ok to revert your settings.
You may be noticing connection issues with Lighthouse Keeper today, with it not downloading updates or letting you edit anything. It seems Lighthouse's SSL certificate has expired. This will likely be fixed some time soon, but in the mean time you probably want to keep using Lighthouse Keeper. Here's a step-by-step guide to getting around the issue.
1. Visit your Lighthouse account in the browser.
2. You should be presented with a dialogue like the one below. Click the "Show Certificate" button
3. In the bottom panel there should be a heading called "Trust" with a disclosure triangle next to it. Click on this
4. There will be 3 pop up buttons appear. Change the one labelled "Secure Sockets Layer (SSL)" to "Always Trust".
5. Click continue. When prompted, enter your keychain password.
You should now be able to use Lighthouse Keeper without any issues as these changes work across the whole of your OS, not just your browser. You may want to change this value back after Lighthouse have fixed it. In order to do that, open Keychain Access, click on the Certificates category on the left, search for a certificate called *.lighthouseapp.com (it should have + next to its icon). Once found click the i button and perform steps 3 and 4 in the window that pops up, except change the pop up back to "no value specified". Close the window, enter your keychain password and everything should be back to normal.
It has taken a while (I'd hoped to have this out last year), but Code Collector Pro 1.5 is now out. The main focus of 1.5 has been improving existing features rather than adding new ones. The two big improvements are to syntax colouring and to import/export.
The syntax colouring was actually added in CCP 1.4.4 as a hidden feature, but it is now enabled by default. You can find out about the improvements here.
The import and export functionality is a massive improvement. Previously you could import or export snippets or export your library as plain text. You can still do these but there are some major improvements. For starters, you can now import your library from Coda, Snippet, Snippets or TextExpander if you have been using one of those apps. You can also export your library to XML, which unlike the plain text format can be re-imported, making it highly useful for backups.
When importing and exporting snippets, Code Collector Pro 1.5 uses a new format. It has the same .snippet extension as previous versions of Code Collector Pro, but it is designed to be a universal format for transferring snippets. The format has been developed with the developers of both Snippets and CodeBox. Code Collector Pro is the first to implement the format, but hopefully over the coming months you'll also see support in both Snippets and CodeBox.
We really want to push this as a universal format, and to help with that I've published the source for the parsing framework to Github so that others can easily add it to their Cocoa apps. The format is simply XML so could also potentially be used by web APIs for sending snippet data. I'll be posting full information about the spec online as and when I find the time.
There are also some extra improvements that have been added. The first is that the line number size now grows and shrinks with the text size. It is a minor improvement, but one that has been requested by quite a few people.
The other improvement is one that has been asked for by a lot of people, but it isn't recommended so is a bit hidden. You can now change the location CCP looks for your library file. By using the following command in the terminal you can change it to anywhere on your system (change the path at the end as appropriate):
defaults write com.mcubedsw.codecollectorpro M3DatabasePath -string /path/to/database.sql
CCP won't transfer the library file to the new location, and only loads the path on launch, so if you want to move an existing library I recommend quitting CCP, moving the file using the finder, running the above command and then launching CCP again.
Lastly, Code Collector Pro 1.5 will be the first M Cubed app in the App Store. It hasn't yet been submitted as I wanted to get 1.5 finalised out to existing customers before focusing on readying it for the App Store. I'm hoping I can get it submitted sometime next week, after which it is in Apple's hands as to when it will be approved.