I started my professional career eight years ago. My first decision was the selection of the CMS we would use. This ended up being the foundation for dozens of client websites. At the time, Drupal seemed overly complicated and Wordpress didn’t have the flexibility we were looking for. Joomla! ended up splitting the difference nicely. This decision lasted for about three years and about 40-50 websites. As we evaluated Joomla! 2, we realized that it wasn’t really scratching the itch that we had identified: allowing users to easily work with customized content entry pages and giving us the tools to manipulate and display that content. Drupal’s amazing custom content types won me over. A simple demonstration website later, and we were racing up the Drupal learning curve.
Three years ago I made my next big change. I quit my job and started freelancing. Work started slow, but built up over time. I still did a lot of Drupal but I also started working with Rails and Node.js. This work was always interesting. I used to have a stack of Word files and a PSD handed to me and I needed to make it come alive. Now I got to interact with clients to figure out what they needed and what their customers needed. For them to be successful they needed me to innovate and solve their problems. Before this I was being paid to do work; now I’m being paid to create! Once you get in the habit of creating, it’s hard to do anything else. It’s also hard to look at the world and not see a million things that needed to be better.
Measuring your business’s finances is hard. Where am I at for income and expenses? How much of my savings are mine, and how much is the government’s? What am I on track to make this year? Am I saving enough? Have I hit my goals? I built Bottom Line for the iPhone to answer these questions. I use this app everyday to get a fast answer to the questions above. Does it do double entry book keeping? Absolutely not, you are welcome! As my first product, I am so excited by the prospect of what this looks like in the future. Expanding the types of work I can do to include iOS apps really completes the circle. If someone is looking to create a website, have a public or private API, and a native iOS application I can do the work they need but also, give them advice that considers every step and every piece of the entire picture.
My wife and sons were at a friends house and Zackary asked where the husband was. Zackary was told that he was out at work, which was confusing for him. Zackary asked “why does he have to go out to work, he has a basement”. I’m constantly reminded how fortunate I am to work from home in my basement office. There are so many moments that I’ve been able to catch of the boys’ lives that would have been impossible any other way. I cannot imagine what it would take for me to desire going back to a non-remote job.
After freelancing for three years, I can tell you what I miss: I miss the comradery of co-workers; I miss the fresh eye balls and the new perspectives; I occasionally miss the dedicate space, with no children running and screaming; I miss the shared experiences and skills. It’s days like today, where I am looking at the schedule for the coming months and realize it’s time to start hustling, that I especially miss someone who loves sales. I am working on these skills, but I don’t expect to grow love.
Fortunately, I might not need to. Toptal helps good businesses get the contract or full-time help they need. They help contractors like me connect with these high value, motivated businesses. I’ve begun the application process and look forward to seeing how we can work together to do awesome work.
To work in technology is to work in change. I love seeing the new and interesting and am so motivated by the impact we can have on this world, as a single person working from their basement, but especially as a network of professionals.
I’m excited for what comes next. I’m excited for where my business is going and what that is going to mean for my family. I cannot wait to see what big problems I am going to help solve and the impact that is going to make in people’s lives.
I guess one of the best ways to get started with 2015 is to launch a new app. Bottom Line went live today. It’s an easy to use income tracker to help you get a 10,000 foot view of your small business’ financial state, especially income tax owed and sales tax collected.
A few of the tech details of the app are:
- written in Swift
- uses two embedded frameworks, one for core logic, one for UI elements
- has most of the hooks needed for a Today widget and an ᴡᴀᴛᴄʜ extension
- includes about 4,500 lines of code
I’m currently looking at ideas for version 1.0.2: bug fixes, Touch ID and datasets.
So my new app is “done”; well version 1.0.0 is. And by that I mean I just committed version 1.0.1 and fixed a minor edge case issue.
It’s odd being the person to have an idea, vet the idea to other people, build out an app and then decide that it’s something that should be out in the world. But here I am doing just that, warts and all.
I really hope this is a tool other small business owners and even general people use I hope it’s something that gets enough usage that I can afford to do ongoing development because it is something that I have lots of ideas for (TouchID, I am looking at you).
Just got the word from Apple and Podium is now on the AppStore! I need to go to bed, but I just wanted to start sharing this with the world.
I guess this means I am officially an independent software developer.
Search engine optimization or SEO is the process of making your site more relevant to search engines like Google or Microsoft’s Bing. The goal is for your web site to appear as soon as possible in the search results to direct more people to your website. SEO can be broken down into two categories, organic SEO and inorganic SEO.
Organic SEO is called organic because it is the natural SEO that is inherent to all websites. Organic SEO is made up of three elements, content, the website itself and the website reputation.
When a search engine looks at your website, it is trying to understand what it is about. The content of your site is the biggest determinant of this understanding. Having relevant, high quality content allows the search engine to effectively map what your website says, to what people are looking for. Having good content is critical because it has a direct and indirect effect on your ranking. If you have content that is clear and concise, a search engine will be able to understand your site well, providing a direct benefit. As an example of an indirect benefit, if you and your competitor both appear in a search result and a user only needs to go to your website, search engines assume that the user found the information they were looking for and as such, your website increase in rank because a user has indicated that your site was relevant.
The technical elements of your site greatly affect your search ranking. For example, having a website that loads slow, uses images instead of text or uses code which is not up to standards, are all technical issues which are penalized by search engines.
Reputation is received usually by having a long standing history of ranking well and by being linked to from many other websites. Maintaining a high ranking with a search engine means that you are doing many other things right and provides positive feed back for a search engine Having many other websites linking to your websites shows that many other people find your site relevant. This helps build a network of trust where the reputation of others can positively affect your reputation.
When your site is technically sound, has good content, and has a good reputation you will naturally rise in the ranks on search engines.
Inorganic SEO is usually generated by relying on third party paid services. Examples of this include purchased advertisements and paid articles on other sites. One general characteristics of inorganic SEO is that it is not permanent. Once an ad expires, whatever benefit you derived from it is gone.
One inorganic SEO practice I don’t recommend is modifying the content of your site just for search engines. This is something that should never be done. Focusing solely on your keywords may be beneficial for search engines and allow you to rank higher, this will not be beneficial for users. This will typically make the site harder to ready and comprehend which is clearly not a good thing. Search engines are constantly improving their ability to detect content that is tailored for robots instead of users and to correctly compensate for this content.
I highly recommend focusing on organic SEO as your primary SEO tool. It is an investment into the success of your website which will continue to have value. It also carries the benefit of improving the users experience.
My first public iOS app is finally under review. Lets hope that this goes smoothly!
Over the next few posts I’m going to walk you through the basics of setting up a Drupal 7 website. I’ll be covering the information architecture, organizing the display of content, creating a basic theme and deploying to multiple environments.
Noah Stokes recently posted a tutorial on how to access your development websites using MAMP Pro and Tyler Hall showed how to access multiple sites using VirtualHostX. Tyler’s suggestion certainly comes highly recommended, however, with a little elbow grease, you can do the same with MAMP Pro.
After your site is setup and accessable locally (http://website.dev for example), open MAMP Pro and go to the hosts page. Select the site you want to work with and in the aliases section enter “WHATEVER.IPADDRESS.xip.io”, replacing IPADDRESS with the IP address of your machine and WHATEVER with whatever you want. For example you can have website.192.168.2.10.xip.io. Click on apply, enter your password if needed and you should be able to access the site with the full (verbose) alias you created.
Clearly, especially with the companion iOS app, VirtualHostX makes this easier, but with a little elbow grease you can acheive the same results.
Now, a little background on what that xip.io thing is doing for you. This is a simple service that runs a DNS server mapping *.IP.xip.io to the ip address provided in the domain name. What this means is that when you type that address into your browser, you ask xip.io where we should go to load the page and xip.io replies with your local IP address. This is the magic glue that allows you to access multiple sites on a single port on a single machine from remote machines.
So I have started looking at hosting some of our client’s website in the cloud. I’ve used Heroku a ton for our internal rails apps, but never for PHP apps. So far I’ve really only struggled with setting up the server config in a reliable way without exposing sensitive server settings globally. Listed below are the settings I use for pulling the DB connection string from the heroku environment variables.
$databases = array(); $dbstring = $_ENV['HEROKU_POSTGRESQL_IVORY_URL']; $regex = "/(.*?):\/\/(.*?):(.*?)@(.*?):(.*?)\/(.*?)$/"; preg_match($regex, $dbstring, $matches); array_shift($matches); // $type, $user, $password, $host, $port, $db $databases['default']['default'] = array( 'driver' => 'pgsql', 'database' => $matches, 'username' => $matches, 'password' => $matches, 'host' => $matches, 'port' => $matches, 'prefix' => '', );
I still need to get the Amazon S3 module working for file storage, thats next!