Matthew Lang avatar

Matthew Lang

Family guy and web developer

Dailymuse

Updates and thoughts on building Dailymuse, my micro-product.

Finding the balance with AI dev tools

As a relatively late adopter of AI tools, well, amongst software developers anyway, I am slowly coming round to the benefits of AI. Like most people, I started with the big-name AI tool, ChatGPT, but it didn’t take me long to discover Anthropic and their Claude and Claude Code tools.

Over the last six months, I’ve been a heavy user of Claude Code. It definitely provides serious productivity gains. Here are a few examples of where I have used Claude Code in the past few weeks.

  • Upgrading a couple of Rails applications from 7.0 through to the latest 8.1 - The Rails upgrade process is fairly straightforward, and I’ve done quite a few upgrades over the years, but the process has been
  • Re-starting development on Dailymuse - work on this has been slow over the last couple of years, but the last few months have seen some big changes in my micro-product.
  • Exploring Hugo and Jekyll themes - I had been working on a Hugo theme I planned to use on Micro.blog, but since moving to self-hosting, I have migrated this over to Jekyll.
  • Built supporting tools for my blog - Self-hosting with Jekyll is easy, but I wanted to still have the option of hosting images and posting on the go as I used to with Micro.blog. I managed to build a number of these features to support my Jekyll blog over the course of a week.

The accelerated pace of development is probably the first thing software developers notice when using AI tools like Claude Code. You can build features and even applications at such a rapid pace, which is good, but it’s also been a red flag for me since I started using these tools.

With increased production rates, I am concerned about retaining the knowledge of what I am building. Will I know enough about the code base to support it in the future? When my code breaks, how will I know how to fix it?

I am exploring a few ways of ensuring that I know the code that I am shipping, including:

  • Taking notes on code changes, especially in areas of the code base that are important and application or business-critical.
  • Adding more comments to my code - this might serve the AI tools more than me, but having comments throughout the code does give me a quicker understanding of the code I am adding and where I am adding it to.
  • Spending more time reviewing code — especially AI-generated code. What is this code doing? Do I understand it? Can I make this code better? Is this code even suitable?

There are other ways I can improve my retention of the codebase, and yes, AI tools can help with that. However, as good as the AI tools are, there still needs to be human understanding of the codebase to make the right decisions about future changes, and that begins with understanding the code and ensuring I retain enough knowledge about it.

A couple of web development projects for the winter

Now that the golf season is down to me and the boys only getting out at the weekend, I can start spending more time on a few side projects. There are so many things I would like to learn, but I figure just limiting myself to a couple won’t take up too much of my time.

So, from now to March, I’ll spend a few hours each week on the following.

  • Learning more about Rails 8 and KamalDailymuse and Writeabout will each get a bump to Rails 8. Only Writeabout, though, will get the Kamal) treatment to begin with. When I have gained enough knowledge about Kamal, I’ll also look to deploy Dailymuse with Kamal.
  • Learn TypeScript and ThreeJS — A work colleague showed me a hobby project he is working on using ThreeJS. It’s the perfect excuse to learn TypeScript and build something for the web that isn’t just another web application.

I have a couple of errands to run this morning, including holiday haircuts for myself and the boys. After that, it’s back home for some brunch. I’m also going to crack open the Dailymuse app to continue working on a new feature for it. Yeah, even on holiday, I’m still writing code.

I am almost ready to migrate Dailymuse from Heroku to Hatchbox. Once migrated, Dailymuse will start receiving some much-needed updates on both the front and back end. The core feature will remain the same, but I will add a few additional features.

I need to ship Rails app updates more often

On Sunday night, I migrated a couple of Rails apps to Ruby 2.7, including Writeabout. Last night, I did the same with another Rails app. By the end of the week, I hope to have Markcase moved over to Ruby 2.7 and Dailymuse upgraded to Ruby 2.7 and Rails 6.0.

Upgrading apps is a pain if they’re left alone for too long. I’ve left Dailymuse alone for such a long time that it’s still sitting on Rails 5. Markcase is on Rails 6 but requires a wee bit of maintenance regarding Webpack.

I’ve learned that leaving apps for such a long time between updates is not the best thing to do. Even upgrading an app regularly through its patch versions is better than just leaving them sitting gathering dust.

Adaptive product naming

A favourite saying of mine is Phil Karlton’s quote about hard things to do in computer science.

There are only two hard things in Computer Science: cache invalidation and naming things.

— Phil Karlton

I can’t say that cache invalidation has given me major issues in the past but naming things has always been a challenge. If I was to take this beyond the realms of programming though, I would say that naming anything is a difficult thing to do.

My portfolio of web applications include DailyMuse, Markcase and WriteAbout. I find it hard to get away from the compound naming theme. It’s just a way of naming things that I stick with. It’s easy to do, but it feels like it lacks imagination. I would love to come up wth alternatives that don’t follow this convention but everything I have come up with didn’t feel like a good fit.

The other thing I don’t like about compounded product names is deciding whether to upper-case the second word or leave it as lower-case. GitHub’s branding is clear that they favour upper-casing the second word, but there are examples of other brand names that are made of two words that just user a lower-case word for the second word. Take Feedbin for example.

For my bookmarking service, Markcase, I choose to use the lower-cased form instead of MarkCase, and I have to say I prefer it.

I’m working on something that is bigger than anything I’ve worked on in the past. I’d like it to become my full-time gig eventually so it’s quite important to get the naming of it right. I do have a name for it, but I’m torn between whether to use the upper-case form or the lower-case for.

I am edging towards the lower-case form. It reads easier and looks better in the different styles that I have for it.

I find all aspects of branding and marketing quite a challenge. I’m creative to an extent, but I’m definitely not well-versed enough to launch a huge marketing campaign. To get my product off the ground though, I’m taking little steps in executing it and learning as I go. I might not always get it right to begin with, but adapting the product and the marketing as I go, is better than not doing anything at all.

Dealing with distractions

I’ve been trying to reduce my screen time on my phone. It hasn’t been easy and I’ve tried a number of different strategies to do this.

Copyblogger has a little gem of advice though when it comes to dealing with daily distractions.

Take some time away from the usual flood of news and notifications to think about your daily intentions. Document them somehow — any way that works for you — and make sure you see them through.

What’s Actually Stunting Your Productivity (It’s Not Multitasking)

I wonder if my daily intentions is something that I can include in my DailyMuse email each morning? Something along the lines of Mike Vardy’s themed days.

Staying productive with side projects

I’m in the process of moving back to full-time employment, but the step away from being self-employed doesn’t mean that I am abandoning any of the side projects that I have been working on. I’m putting a few ideas together for DailyMuse, and there’s another more significant project that is a work in progress. Working on these in my spare time can be difficult especially when I have to consider other important things in life.

In the last few weeks though, I’ve been making smaller sprints for my side project, and instead of scheduling big blocks of time, I’m picking up the work when I want to work on it.

Zach Holman’s post on staying productive as a solo founder puts it in a better way.

There’s something to be said for focus, of course, but life’s too short to constantly throw yourself at the wall day in and day out. If you really believe in your product and think that generally, it’s something that can get you stoked, then taking a break for a while is usually worth it, and is more productive in the long run. It’ll draw you back in again in the future; don’t worry about it too much.

Staying Productive as a Solo Founder by Zach Holman

As a programmer I know I’ll always have the itch to be building stuff on the side. From experience, I’ve learnt that working on side projects when I want to is a much more effective way of working on them than consistently plugging away at them and getting depressed about them.

App rot

Link rot is a problem on the Internet. When you find something great on the Internet, you bookmark the URL for later, and then you find out later that the URL no longer exists. It’s not so much of a problem if you have a copy of the web page you bookmarked, or you use something like Pinboard or Pocket’s premium plan or even the Wayback Machine. For many people though, I’ll bet that they have a few seconds of disappoint and then find alternatives to that same article.

This is what is called link rot. When a web page becomes permanently unavailable. The problem can stem from the web page’s URL being changed, whole websites being moved or closed down.

The same can be said for applications whether they are native or web-based.

The development of whole web applications that we use daily can stop. The application might still run and function correctly, but the ongoing development of the service has ground to a stop that it seems that the web application is no longer being worked on.

I’m guilty of this app rot as much as any web application owner.

While DailyMuse is still running, development on it has ground to a halt. I will resume work on it at some point, but to the careful observer, it might look like the application has stagnated and it isn’t clear if the web application is being worked on.

iOS apps have the advantage of including a version history in the App Store. I’m sure there’s a corresponding version history for Android apps as well.

What about web applications though? How do we see the version history for those?

Well, a version history page seems the obvious choice, however, not all web applications have such a page and there’s no standard for this either.

As a web app developer though, I am going to put more effort into making my web applications more transparent in when they are being updated and making it easy for others to see these changes. How I’ll do this I don’t know yet, but it will consist of a web page of some sort.

My Three Words for 2018

I've already written about how I use habits rather than resolutions for the year. Resolutions are doomed to fail, but practices can be iteratively built on over the year and eventually form a set of good habits.

How do you stay focused on these habits though?

Well, one way I've been able to build on these habits over the last couple of years is using Chris Brogan's three words. It's a simple idea.

You pick three words for that will guide your actions through the year. Through the course of the year, your efforts should align with these three words so that anything that you do is working towards them. The words themselves are goals, but not specific ones. Just parts of your life that you want to make better.

Last year my words were habit, health and hustle. I'm chuffed to say that at the end of 2017 I had lost a bit of weight and I'm now more active through the work week to stop myself getting any more back pain.

This year's words are less of a focus on health and work and more about content and delivery.

Bootstrap - For too long I've had a little email product running that has been running quietly in the background. It's time to bring it to the masses and bootstrap it from being merely just a product that people use to one that people rave about. Of course, I'm talking about DailyMuse. I want to expand this product so that it becomes more of a featured revenue stream than something I merely allow to run. DailyMuse isn't the only product in the pipeline though. I'm intrigued about a numberless analytics idea, and I'm interested in exploring a niche market for my web development skills that could help end the feast and famine cycle that is always at the back of my mind as a freelancer.

Blog - I remember the great days of blogging every day. It didn't matter what day it was. I punted something out anyway. This single word over the last two weeks has prompted me to write and publish more often already this month and look set to complete one week with a post a day.

Budget - When it comes to time, we only have so much of it. For 2018 I want to budget my time and energy through the week so that I'm not idling away my time in front of the television or on my phone. This isn't a call to budget every minute of every day. Scheduling my day in this way doesn't work for me. The plan is to spread my time, focus and energy over the week, rather than blitz everything in the one day. One way of doing this is to theme each day around a particular product or project.

I wouldn't say that 2017 was a significant success using this technique, but I did make some gains. I'm aiming to do better with my three words for 2018.

Hello PenMuse

I'm always on the lookout for something different to write about, but some days the nudge just isn't there. I started using my daily themes as writing topics but this can be somewhat repetitive, and it still falls on me to narrow down the theme to a topic that I can write about.

I started looking for writing prompts that fell into the category of my daily themes, but this was another challenge in itself. Frequently it involved digging through the thousands of writing prompts available online across different websites. What the problem with these is that they not usually organised in a way that makes them easy to search through.

I needed a daily random writing prompt but one that was geared towards my daily themes for the day. So I started making one. Here's how it looks so far.

Screenshot of the PenMuse website

The idea is simple. It displays a random writing prompt. If you don't like it, you can generate another one. As a nice tie-in with DailyMuse and my preference towards analogue writing tools, I've called it PenMuse.

Product playground

PenMuse serves a dual-purpose for me. While it does take the guesswork out of what you are going to write about, it also helps a much more significant purpose. It's a product playground.

The idea of this that you have a small service or product that you can use to flex your development skills. While this application doesn't have the complexity of a more significant Rails application, it does allow me to try things out on a smaller scale and it's proved to be helpful already. I'm going to re-design the DailyMuse website with a similar theme.

Plans for the future

There are a few things still missing that I hope to add shortly.

  • Allow people to suggest a writing prompt and give them accreditation when it is displayed.
  • Document the API for other developers to use.
  • Allow people to link to individual writing prompts.
  • Create a weekly PenMuse email that emails you the week's writing prompts ahead of schedule.

One thing that I could do with help on though is writing prompts. There are thousands of writing prompts online, but I don't want to copy these into PenMuse without thought. I want to curate these prompts so that they are easy to find and share.

What do you like to write about? What prompts would you like to see on PenMuse?

Contact me with your suggestions.

The death of web analytics?

It's been a long time since I stopped using Google Analytics to track the activity on my websites. In its place, I went with a product called Gauges.

On its own Gauges is fine but there hasn't been any new major features for a while now. Sure I pay money for the serivce to continue but it would be nice to see something new in the way of features. It's got me questioning though whether Gauges or even web analytics is still necessary.

Do I need web analytics?

I honestly think the answer to this question is no. Well, let me expand on that answer. I don't need web analytics. I can't speak for others, but let me explain using each of my different websites as examples.

Personal blog

For my personal blog, web analytics is nothing more than a vanity feature. I don't need to see what people are reading on my blog, I don't need to tailor content based on what people like or searching for.

My blog is an outlet for my writing, the topics that I am interested in writing about.

Whether people read it or not is not my main concern.

I write because I want to write. I don't need web analytics here.

DigitalBothy blog

For my freelancing blog things get a bit trickier.

Sure it would be nice to see what people are reading and what is proving to be most popular but my freelancing blog isn't just about giving people something to read. It's about advertising my knowledge of web development.

My blog is also the first step in acquiring potential clients. If a potential client likes what I am writing about and they have a need for a web developer like myself, then what next?

At the moment they can contact me through a form but there needs to be more than just a contact form. I need to be able to contact them back on a regular basis and let them know what's changing in the world of web development. This is where an email list comes in to play.

Despite listening to podcasts and reading many newsletters telling me for years that I need an emailing list for my business, I don't have an emailing list for my business. Crazy I know.

With an email list though I can start to build a way of contacting potential clients and convert them to paying clients through a funnel of more specialised content that is only available through that email list.

Instead of using web analytics and learning nothing about my potential clients, I can use an email list to contact them directly and see what interests them in terms of clicked content within each email campaign.

My freelancing blog is the first step in acquiring a client. While it might be helpful to see which content is proving popular at this step, I don't think that it warrants having web analytics. I'd rather see metrics of what people are clicking through to in the email campaigns that I send out.

DailyMuse

For DailyMuse, web analytics is not something that I want to measure.

Sure it's nice that people visit DailyMuse and perhaps even sign up for an account, but the key metric here is whether people use DailyMuse on a daily basis and that means measuring when people login, how many people are signing up for the paid plan and how many people are receiving emails per day or week.

I've already got a minimal dashboard for this cobbled together from user data in DailyMuse, so again, web analytics isn't necessary here.

There are also other plugins and solutions that offer user analytics for products like DailyMuse. This is more interesting because I get to see what user's are doing in my product. I'm not at that level yet and so what I have at the moment will suffice for the time being.

Do I need web analytics then?

So perhaps I don't need web analytics then.

Others might make the case that regardless of the type of website I am running, web analytics is better to have than not at all, but I think I can live without it.

I've justified in each case why I don't need web analytics and what I would use instead. I think in each case it's fair to say that I have alternatives in place that work for me and my own needs.

Web analytics isn't dead then, but I think it has been superseded by other analytic products that offer customers more. It's probably good to have in place if the content of your website is the only way of measuring activity on your website, but even then I would recommend that such a website have an email list as well.

I've used web analytics for a number of years but I think I've used it for so long that I've become complacent with it. It's not the type of activity I need to be looking at. I need to be looking at different forms of activity for different sites and that perhaps is the most important lesson in all this.

There's also the fact that Twitter already offers a sizeable amount of analytics that makes social media interaction much easier to see. If you share your website's content on Twitter, then it's worth looking at your account's analytics dashboard on to see the traffic through your account's recent tweets.

For me though, I'm going to stop using web analytics over the course of this week and instead focus on getting my analytics from elsewhere.

Client work lined up for today and some product work on DailyMuse. It’s been neglected in the last few weeks but I’m hoping to give it more time over the next few months.

The DailyMuse Facelift

Development of my DailyMuse service has been lagging in the last year. Sure I've shipped a few features for users, but other than that I've just not had the urge to develop it further.

It's still a valuable service to me and is to others as well. People are paying good money for it so why not improve it in any way I can?

In the last three months, I've been silently shipping little improvements and updates to DailyMuse in preparation for a big application update. Last night I shipped the latest update for DailyMuse which includes migration to Rails 5 and the use of Bootstrap 4 for the front end.

These two big updates have been on the DailyMuse backlog for a long time. In the last few weeks I've been chipping away at both of them to get them production ready.

A More Welcome Landing Page

The final result is a much more professional and welcome landing page.

Gone is the stark landing page, replaced with an interesting background and a better description of the DailyMuse service.

There's still room for improvement here though. I still think it's looks basic and could do with an illustration or graphic to accompany the description of the service. Also the form sits on the right hand side of the page as more of an afterthought. Would it flow better if the form naturally followed the product description?

Lots of to think of here and it will change over the next few weeks.

Application Foundations

Within DailyMuse itself there's be a big update to the look and feel of the service.

Instead of the two column layout I had before, it's now three columns with greater scope for adding contextual information in the far right column. It was always a problem trying to fit everything into two columns, but after looking at a number of other web applications, three columns proved to provide more space when needed.

Bootstrap 4 now includes the card component which I thought was a great way to highlight cards in DailyMuse. Not only does it offer a great way to encompass the card, but it also allows me to add extra information to each particular card.

There's still a number of changes to make to the front end though.

  • Gradually migrate away from the obvious Bootstrap 4 look with my own look for DailyMuse.
  • Make better use of the three columns with widgets for today's card, upcoming cards, and cards sent on this day in the past.

Let's Not Forget Features!

There's also a number of features due to be shipped in the next few months.

  • Card delivery by RSS. Email isn't everyone's cup of tea. RSS was the next obvious choice to receiving DailyMuse card.
  • Promote cards in the queue so that you can decide what to send in the foreseeable future.
  • Better randomising of cards to reduce the possibility of a card being repeatedly sent over a few days.
  • Collections being an idea where you can add cards to a collection of cards. These can be added to your DailyMuse email so that receive multiple cards at a time.

I'm not worried if DailyMuse doesn't make it as a service that has millions of users, but it would be nice to make it to the thousand user goal. It's a great service for me to exercise my Ruby knowledge and also hone a few other skills and certainly helps with it's daily email. I’m certainly looking to expand it into a better service over the next few months.

What is Trello?

Trello is a great tool for managing projects and products. Before we dig deep into Trello though I'm going to do a quick overview of what Trello is and how it works.

Trello revolves around three concepts. Boards, lists and cards. Before we move on further we need to understand what a board is. If we think of a board as a physical object then it's best to think of a Trello board as a drawing pin board. You know those boards you see in schools and universities that display announcements? That's exactly what a Trello board is. It's a place for a collection of related information. This sounds a bit vague but Trello isn't a tool used for a specific purpose.

The DailyMuse Trello board

On the board we can create lists that span the board. You can create as many lists as you need but it helps to keep the number of lists to a handful. By doing this you can fit the whole board in most of the screen sizes you use. Too many lists results in some lists being off-screen and you need to scroll to get to these. Call me lazy but that just seems like such a chore.

Finally there are cards.

Screen capture of a Trello card

These represent individual items of work. It could be a task, a feature, a todo list or a prompt of some kind. The card themselves contain a title and a description. They can also contain checklists, attachments and comments.

This is the basics of the Trello board. We didn't touch on features like calendars, email settings and labels, that's for tomorrow. It helps to have an understanding of the basic building blocks of Trello. It's just three concepts but it helps to understand these before going deeper into Trello.

Grass Roots Productivity - Regular Reviewing

We’ve looked at capturing and scheduling already in my little productivity process. The next step (not in order though) is the review.

For hundreds of years travellers have used different navigation techniques. The stars, maps, compasses and now the trusty smartphone can even help us get to our destination.

How do you get to the goals that you are working towards though?
Completing the items on your master list is one thing, but it’s all for nothing if there isn’t a goal to work towards. Most of us can remember to do the little things without the aid of an ongoing list to help us. If you’re keeping a track of your master list though, then you are most likely working towards a goal. How will you know though if you’re working towards that goal and making progress?

If the goal is the destination then the review step is our compass that steers us towards that goal. A regular review will help you ensure that you’re making progress towards an that goal.

My review process involves three stages.

1. Clearing the decks

In this stage I work through each of my various inboxes and convert any items into actionable tasks. It might be emails in my inbox, tasks on my CRM, or items I’ve captured in my notebook. I use this stage to bring everything together into my master list.

2. Review projects

I use the term project to review any amount of work that involves ongoing work. It might be generating content for my blogs, client work, or work for DailyMuse. This is where I review the progress of each project and ensure that I’m making progress towards it.

3. Planning ahead

Now that I know the progress made in the previous week or month, I can look ahead and plan for a similar timeframe. This involves scheduling actions into my calendar and setting reminders for the important ones.

Only my freelance work gets reminders as this is more important than most of my other projects.


And that’s all there is to it. I find it best to block off an hour a week to do my weekly review and three hours a month to do my monthly review. Done on a regular basis, the review step will help ensure that I'm working towards my goals.

Perpetual devotion to what a man calls his business, is only to be sustained by perpetual neglect of many other things.

— Robert Louis Stevenson

Love this quote that Shawn Blanc highlighted as part of his Focus Course and he follows it up nicely with his own take on it:

May devotion to our business not be sustained by neglect of our health, relationships, values, and even our own happiness.

Family Balance by Shawn Blanc

Both worthy additions to DailyMuse.

Some Ideas for DailyMuse

It’s been a while since I updated my daily email service, DailyMuse. It’s a year old now and I’m finding it to be a great start to the day. If you’re unfamiliar with it, then here’s the gist.

DailyMuse emails you single snippet of text from your own collection of snippets. Think of it as your nudge for the day. In the past year I’ve collected a number of quotes, lists and nudges that I keep here. Every day I get an email from DailyMuse with one of these snippets.

For the last year thought the service hasn’t unchanged. It’s not through lack of work on my part. I’ve built three different features and trashed them on the basis that they’re not suitable or too complicated for DailyMuse. The last thing I want to do is complicate DailyMuse but I do want it to be a more powerful nudge in the morning, and not just for me.

Here’s a few ideas I’ve been pondering on for DailyMuse.

The Daily Mantra

I recently read Paul Graham’s Top of Your Todo List post in which he talks about 5 commands that sit at the top of his todo list. It’s a nice idea but I don’t have space at the top of my todo list, but getting something like this in all my DailyMuse emails would be a nice idea.

Rather than having the commands at the top though, I thought about including it in the footer of the email. That way once you’ve read through your nudge for the day, the last thing you’ll read will be your commands.

Call it commands, a daily mantra, a motto. It could be anything, but lots of people live by this in some form and a daily reminder of it couldn’t hurt.

Categories

One of the trashed ideas for DailyMuse was adding the ability to organise snippets using tags. The daily email from DailyMuse could then send a snippet from a specific tag on different days. After testing the idea though I realised that tags allowed for a huge number of ways of organising your snippets. It was overkill.

Tags was too granular for organising snippets. I needed something broader, something simpler. Rather than organising snippets into tags, how about organising them into categories? One category per snippet is much simpler and with a limited set of categories to play with it means that people have a simpler way of organising their snippets.

Cards, Not Snippets

There’s one thing that has irked me since I built DailyMuse and that’s the use of the word snippets. I don’t like the word snippets, but it seemed like the best way to describe the information you collect for your DailyMuse emails. Maybe it’s my developer background that swayed towards this, but it isn’t the right word to describe what these snippets are. I had to get away from the programmer influence for this.

If DailyMuse was a paper-based service that didn’t rely on computers then how would it work in the real world? Well, every day you receive your snippet in the post, but it wouldn’t be on a letter because that’s for long form writing. DailyMuse is all about getting a short burst of information every day. It would need to be on something smaller. A card. An index card.

What wasn’t obvious in the past when I built DailyMuse now is. Rather than using the term snippets, I should have used cards.

This is one change to DailyMuse that is happening. A change in the terminology should simplify what DailyMuse is and encourage more people to sign up for it.

Find the Right Features

DailyMuse is still a side-project. While it does have a number of paying customers, it’s just enough to cover the hosting costs for most of the year. I’m taking my time with it and allowing it to a grow at a steady pace.

Not everything I build for DailyMuse get shipped. I’ve trashed more features for DailyMuse than I’ve added. I’m trying to keep it simple and easy to use. Burdening it with features isn’t going to make it anymore useful but it does have some space for improvement. I just need to find the right features that fit that space.

I'm a freelance Web Developer from the UK.

I build high quality web application solutions using Ruby on Rails and Sinatra.

In my time I've built web applications with the following tools and libraries: Cucumber, Rspec, Minitest, jQuery, Postgres, MySQL, RabbitMQ, Heroku, Cloud66, Engine Yard and AWS.

When I'm not working I'm spending time with my family, cycling, golfing and the odd spot of gaming (yes, I've still got the skills).

If you're interested in working with me, you can send your details to me and I'll get back in touch as soon as possible.

Some of My Work

DailyMuse

DailyMuse is a daily email that you curate using your own quotes, lists, links and anything else you find interesting. One of these items is sent to you at random everyday. DailyMuse is built with Ruby on Rails and uses Stripe for payment processing.

Journalong

Journalong (retired) was a free service that takes your journal entries and saves them to your Dropbox. Journal entries are written in plain text with a preference for Markdown. It was initially built using Ruby on Rails. Since retiring this product I've put together a smaller Sinatra version that is designed to be run from your own computer.

Searching for a Worthy Successor to Backpack

Do you remember Backpack? If you don't, it was a knowledge base web application where you could store notes, images, drafts, attachments and other gubbins. Since 37signals changed their name and focus to Basecamp, Backpack has been left to quietly sit on the sidelines. There was a time that I loved using Backpack but after a while I tried a few others. Overtime though nothing compared to the functionality that Backpack offered.

Frustrated, I've been looking for alternatives to Backpack. Here's a few I've tried in the last few days.

Trello

I use Trello mainly for managing clients projects but I do have a couple of other boards here that I use. I tried to create a board that would serve my needs as a knowledge base board but there's two dislikes I have about Trello. Sharing individual cards isn't possible unless you share the board the card belongs to and viewing a card on it's own has too much clutter.

FAQT

I signed up to FAQT when I first seen it on Hacker News a few weeks ago and initial impressions are good. Markdown based 'cards' that can be categorised and shared. Fulfills most of my needs as a knowledge base and there is a few features I would like to see but my biggest bugbear is that FAQT is currently free and therefore there's a chance the service won't be around forever.

DailyMuse

Lastly there's my own DailyMuse application. It's comprises of a collection of snippets with a single snippet being sent to you daily. It's nice for things like quotes and lists that I like to review periodically but as a knowledge base application it lacks a few features that FAQT has. For a while though DailyMuse has been trundling along as a micro-service with a very focused aim, but maybe it's time to turn that on it's head and make it into some more that appeals to more people. It would offer the same functionality that it offers today but would also include the ability to create and share information in the form of pages. It's an idea I've been thinking about but reluctant to act on.

There's probably more in terms of knowledge base applications out there that do the same thing, but to be honest I would rather be using an existing service for this rather than using another service and having more of my data spread out on the Internet.

Finding that a lot of the code I’m writing for DailyMuse is to support the product rather than being code for new features.

Supporting Features in DailyMuse

In the time it's taken me to get DailyMuse up and running, I've noticed that a lot of the code that I have written for this product is code that supports the product. The amount of features that I've added or expect to add is rather minimal. Yes, there's new features arriving soon for DailyMuse like scheduling snippets on particular days and tagging snippets, but in the past few weeks I've been writing code to support the product.

This idea of supporting the product with code could be thought of as a feature, but I see features as something that directly benefits the user. As an owner of the product I also need my own features. It's these supporting features that I see as being code that supports the product.

Commmunication with users of DailyMuse is important. They could be getting their daily email every day or almost every day of the week depending on their needs. Bombarding them with additional emails on top of this to notify them of features or changes in DailyMuse isn't in their best interests.

I wanted to notify users of changes to DailyMuse, so I added the ability to add one or two lines of text after their snippet that they receive on a particular day. I've used this short messaging idea only a couple of times so far, but it's value to me by being able to bring something to the users attention is without bombarding them with more emails is important.

I've got a number of other supporting features planned for DailyMuse in the future. They'll help me to administer DailyMuse, communicate with users and help maintain DailyMuse as a product and service. New features are nice, but having a stable product that improves gradually for its users is better.

GitHub is not My Resume

I've been searching through various contract opportunities over the last few weeks. Client work is slowing down and I have some availability over the next few months. Might be a good idea to look around then! One common feature of each ad is that most of them have included is this:

Include a link to your GitHub profile.

For the non-developers amongst you, GitHub is a web based source code repository service where developers and organisations can keep copies of the code they are working on and have worked on. To this end, it's often referred to as a resume for developers. Not every developer has a GitHub account though (there are alternatives like BitBucket) and certainly not every developer has an active GitHub account.

Are recruiters (both agencies and companies) basing their candidate search on developers who have active GitHub accounts?

Does my GitHub account reflect the capabilities of myself as a developer?

I certainly hope not.

In the past I moved my repositories over to BitBucket to give it a try. I left my GitHub account open but there was little on it. Now, I'm back to using GitHub and I make use of it by keeping some projects I'm working on there. Most of them are private. They're ideas that I would rather keep to myself. For little projects and other stuff, I throw them up on my GitHub account as public. Not as bragging rights to my capabilities as a developer but to share my code with other developers.

If most agencies were to look at my GitHub profile at the moment and make a decision based on that alone, they would skip right over my application. The problem is though that my GitHub profile is one facet of my career as a developer. I have a good history as a developer and a variety of experience. I have a couple of recommendations on LinkedIn and an up to date CV there. I'm running my second attempt at a product with DailyMuse after I killed the failed Journalong product.

I'm certainly not a developer that lives and breathes code. Once the work day is over, I might hit the trails on the mountain bike, take my son to the golf so he can practice, or just go for a walk with the family. And that's just the tip of the iceberg. There's so many other things I do outside of work that doesn't involve writing code. Yes, I have a number of little side projects on the go. Most developers do, but they're low on my priority list.

While my career is important, it's also important to get the balance right between what you do for your career and what you do elsewhere. I do write code outside of work, but most of the time I'm doing other things like spending time with my family, riding one of my bikes or something else that isn't writing code.

GitHub isn't my resume though. It's one aspect of my resume. It's something to consider yes, but the real value in a software developer isn't the amount of code they write. It's in the way they approach problems, present solutions and communicate with others. And I think I do that rather well.

Time to Explore

I've been working with Ruby on Rails full-time now for close to 4 years. Two years as a full-time employee and two years as a freelancer. In that time I've worked with and built all manner of Rails applications. Content management systems, business support applications, healthcare service portals and my own little product, DailyMuse. It's still my choice of web framework for new projects, but I feel that lately I've become too settled with Rails. Yes it's a fine framework to work with and who could argue. It has a thriving community that offers great support and ensures the ongoing development of the framework, but there's more than one web framework out there.

In the last few months I've been trying out the Rust systems programming language. It's been a hit and a miss getting my head round the syntax but largely I feel that I am wasting my time with it. Why? Well Rust is still fairly new and at the time of writing this it's just about to emerge from its 1.0 beta phase. Despite the immeninent release of the stable version of the language, I still think I arrived at the Rust party too early. I've never been an early adopter of technology. I like to sit on the fence longer than normal before making any decisions about investing in a language or a framework. I might re-visit Rust in six months time or even a year to see how popular it is and whether it's worth investing my time in. So, putting Rust to the side has left a space for me to look at another language or framework.

Looking at the market today, there's such a variety in the demand for different languages and frameworks. I've done .NET in the past and while I think there's going to be a steady demand for it in the future, I do want to try something completely new. A language I've never used before. Enter Python.

Okay, it's not completely different to Ruby. It has duck typing and It's dynamic but it is also an established programming language. If I was going to learn a new language then it was going to be something that I could use in my career. Getting a Python contract with no experience might be tricky, but I'm prepared to tart up my Github page with a couple of projects done in Python that could add weight to my cause.

Also, if I'm going to pick a language that gives me extra tools to use then I want something that sits alongside it just like Ruby on Rails sits alongside Ruby. I not only want to learn a new programming language but a new web framework that is made with that programming language. Enter Django.

In the past I've tried to learn different programming languages and failed spectacularly but this feels different. Rather than picking an new cutting edge technology, I've picked an established programming language and an established web framework to go with it. They're not completely different from Ruby and Rails, but that's the idea. I'm a web developer, therefore it makes sense to learn another web framework. This might be a low risk investment, but that's okay. There's enough developers chasing the bleeding edge technology. How many are chasing established technology?

DailyMuse: The Today View

Email is great. It's a reliable form of content delivery that can reach a multitude of devices and it's platform independent. Who cares if it's Windows, Linux, OS X, iOS or Android you're running? Email is the cornerstone of any platform, which is why it's the preferred delivery method for DailyMuse.

As great as email is though, I also like having alternatives to email, something as flexible as email but also accessible. I would open my DailyMuse email a couple of times a day, but quickly it became lost amongst other emails. I needed a way of seeing my DailyMuse message for the day without opening my email.

For a few weeks now there's been a Today view in the DailyMuse application. If logged in and you visited it you would see the last snippet that DailyMuse sent you. Fine and good, but it was rendered within the context of the application and I quickly realised that it became lost amongst the rest of the elements of the application. I needed a view of my snippet that was free of the context of the rest of the application.

This morning I added a link in the DailyMuse sidebar that will address this issue. At the top of the sidebar is a Today link that will render a colourful view of your snippet for the day that is free from the rest of the application so that you can have your snippet front and center on your web browser.

Here's my snippet for today:

A screenshot of the today view from DailyMuse

Rather than sticking with default font sizes for all snippets, I've also tweaked the font size for snippets that vary in length. If your snippet is small in length the font size for it will increase so that it becomes easier to read.

This has been a planned feature for a while, but viewing the snippet within DailyMuse has never felt right. With this in place now, I'm happy with being able to view my snippet for the day in both email and in my browser.

Interesting in using DailyMuse? It's free for 30 days after which it becomes a budget friendly $2 per month to use.

Uses for DailyMuse

Great to see DailyMuse making a positive change.

Those are the two things I’m using it for so far but I can think of many others — daily exercise ideas, healthy snacks and recipes, writing prompts, study of scripture or philosophy, etc. Basically, anything that would be good to have a daily reminder for would be a good fit for this.

How I Use DailyMuse by Patrick Rhone

Interested in trying it out?

Say Hi to DailyMuse

It's been quiet of late on my blog and for a good reason. While my daily posts have ground to an almost complete stop, I do have a good reason for it.

Today I'm officially (and nervously) announcing a micro-service of mine, DailyMuse. So what is DailyMuse? Well, let me first take you back to a post that Patrick Rhone made on App.net.

Maybe something like this exists but, if not, someone should build it: I want to type a bunch of things into a place and then have that place pick a thing at random and email it to me once a day.

I made a note of this post with the intention of building something, but I never got round to it. Patrick's tweet in October was finally the nudge that I needed.

"Making cool stuff for our friends that they would like" sounds like a solid, successful, business plan to me.

on App.net by Patrick Rhone

Now while I don't know Patrick personally, having not met him in person, he is someone who is a great influencer on how I work. His books are great source of reflection and I've long been a fan and user of his Dash/Plus system. So having established that I'm not friends with Patrick in the traditional sense, I still wanted to make this "thing" for him.

Having toyed with a few ideas before the end of last year, I started putting something more concrete together that Patrick could use. After a couple of weeks I had the basics of the service working. After a brief introduction by email, Patrick became the first user of DailyMuse.

That's the story behind the idea, but what is it? I think it can be best summed up as this:

DailyMuse is your own personal email subscription. You're the curator and audience.

Using DailyMuse you can collect quotes, phrases, lists and links in your own collection of snippets. DailyMuse then sends you one of these snippets at random, once a day.

Snippets are written in plain text or using Markdown. You can tell DailyMuse to pick a snippet at random or to pick from a queue of previously unsent snippets.

Receving the same snippet on consecutive days doesn't offer much value, so I added the ability to pick from snippets that hadn't previously been sent. There is still a lot to be done with it, but with the it's core value in place and working, it didn't make sense to hold on to it and never ship it.

So if getting the right start to the day sounds like your thing, and you don't mind curating your own collection of content to start the day with, then why not give DailyMuse a try? It's free for 30 days after which you can subscribe for $2 per month or £20 per year.

The trick, of course, is to choose the small tasks which Vilfredo Pareto - he of the 80/20 Rule - would designate as among the vital few; i.e. the ones which will produce the greatest beneficial results. If you don't set such priorities, then your time may be squandered by the successful completion of work which produces relatively little progress or which merely restores the status-quo.

Small Tasks by Michael Wade

That one is going in my DailyMuse collection.