brandontreb.com Tips And Resources For Software Consultants

Back To My Roots

I wrote my very first blog post back in July of 2008 when I start iCodeBlog.com.  I started the blog because I saw a huge need for iOS development tutorials on the web and really wanted to help others as I progressed in my development.

Well, quite a bit has changed since then.  I have written books, spoken at conferences, and built and shipped over 40 iOS applications.  Since selling iCodeblog in 2009, I have really let my passion for blogging fizzle.  For the first 2 years of the iCode sale, I wasn’t allowed to write tutorials on any other site.  This was very discouraging.

Over the years, I have guest blogged iOS tutorials on several sites including mobile.tutsplus.com and raywenderlich.com.  This has been pretty hit or miss for me.

As of recent, I have become an independent iOS developer and have been solving quite a few hard problems and coming up with some interesting solutions on projects that I have been a part of.  I now want to share some of those solutions with the iOS community in the form of tutorial blog posts.  These come in all shapes in sizes from cool UIKit hacks to building simple backend services.

So, when I say that I want to “get back to my roots”, I really want to start consistently blogging again and educating other developers using the knowledge I have gained over the years.  So stick around, subscribe, follow me, and please don’t hesitate to suggest tutorial ideas.

Happy hacking…

Tools of The Trade: What Tools I Use For iOS Consulting

Welcome Hacker News! There’s some discussion happening in the comments; but, as always, the better conversation is on the article page on Hacker News itself.

Since going Indie, I am constantly asked about what software tools I use to facilitate the process. People are always curious about invoicing, time tracking, ticket management, etc…

The purpose of this post is two fold. First, I want to educate others on some of the cool tools I have found that have helped me out tremndously. The other is, I would hope that veterans in the space could give their two cents as to some better tools (or better use of the current one’s). Either way, I’d love to hear from you.

1. Tools For Finding Contracts

This is perhaps the area where I am most asked about. Well, the secret is, looking for contracts isn’t that much different than looking for a job. You just need to know what to look for. Here are the few major sources where I have found sucess in finding good contracts.

  • Linked In Jobs I love Linked In. I have found it to be the most valuable tool for job searches and connecting to date. I love that it will suggest jobs/contracts to you based on your profile and experience. Another great thing about Linked In is contract search can become passive if you are actively connecting and posting. Once your name starts flowing out there (assuming you have the exp), people will just start offering you contracts.
  • Authentic Jobs I like this site a lot. Their interface is much cleaner than some of the other job search sites and while they had fewer contracts available, they were generally of a higher quality. In fact, I found the current contract that I’m working on here.
  • Simply Hired Although this site generally offlinks to other sites, I found it to be a good aggrigator of what’s out there.
  • Good Ol Google This seems like a job, but as I mentioned in my last post, it’s pretty easy to type “[:field_name] contract work” and come up with a pretty good list.

2. Tools For Managing Clients/Billing

As a new contractor, the concept of billing can seem a bit scary. You don’t want to look like a n00b, but you also don’t want to spend a lot of money. That’s where FreshBooks comes in.

I started using FreshBooks from day one and could not be happier with their service. Here are some of the pros:

  • Free for up to 3 clients. It says 30 day trial, but that’s just if you want more than 3 clients. So it’s perfect for when you are starting out.
  • Manage multiple projects for mulitiple clients with multiple tasks (‘nuff said)
  • Mobile app. You haven’t lived until you have sent an invoice from your smartphone. You feel super businessy. For an added bonus, send it from the gym, or your sailboat.
  • It handles sending invoices via mail or email automatically and reports back to you when the client has seen the invoice.

Again, FreshBooks is awesome! I can’t recommend it enough.

3. Tools For Ticket Management

This one is tricky, because every client is going to want to work differently. Here are the few I have expereinced thus far.

  • Pivotal Tracker This one is my favorite. It’s a very easy to use tool to help facilitate development in an agile environment. Even if you are not running the full scrum process, it’s still a valuable tool to simply track your progress. Your clients will appreciate it.
  • Basecamp You knew I was going to say this one. It’s an obvious choice because it’s obvioulsy a solid tool. I think it’s very valuable when you have a distributed team and need a central way to communicate.

Even if your client doesn’t use a tracker, I’d suggest you use one. It helps you to keep organized and get a better feel for how long certain tasks take (which you will need to know in future scoping).

I dont’ have a very long list here because I hate most tracking software. If you have some to add here, I would love to hear about them in the comments.

4. Tools For Software Development

I am an iOS and rails developer, so this section may or may not be applicable to you. Again, I put this out there to let you know what I am using and would love to hear what you are using.

iOS

  • XCode (duh)
  • CocoaPods – If you don’t use CocoaPods, you are doing it wrong. They are what gems are to rails and really help you manage 3rd party libraries.
  • GitHub – For verison control and code distribution amoung the team. (again, you know this already).

Rails

  • Sublime Text I was big on TextMate for a while, but now I use Sublime Text full time. It has some solid plugins and can do a smart autocomplete for any file type.
  • Heroku Deploying rails to production sucks. Heroku makes this process easy.

5. Tools For Communication

Working in a distributed team can be hard at first. Especially staying connected. Here are the major forms of communication that I use.

  • Skype Although Skype has totally gone down hill since the MS takeover, it’s still a free service that most clients will use. I’d suggest if you don’t have a Skype account, you get one before job searching.
  • Google Voice This service allows you to forward a number directly on your cell phone. It also has some nicities like screening your calls, voicemail, free calls, etc… It’s good to give out your Google voice number instead of your cell to clients as well as possible girl/boyfriends in case things go sour.
  • Google Hangout Skype falls short in one area (which happens to be their business model). If you have more than 2 people on a call, they must all have a premium account to do video chat or screenshare. Google Hangout gives you all of these features for free with up to 10 people as of this writing.
  • Standard social networks (Twitter, Linked In, G+) (duh)

Conclusion

Well, this post is already getting a bit out of control. I could go on and on. If I have obviously omitted a large section, please feel free to troll me in the comments and I will certainly add it.

I hope this has been able to provide you with some value, and I would love to hear your thoughts.

What I Learned In My First Month Being A Contract iOS Developer

tl;dr Present yourself to potential clients as if you have already made it. Don’t be scared, the work it out there. Freelancing FTW!1!

In the first week of December, I got a rather unfortunate (and unexpected) call from the CEO of the company I was working for. The gist of it was “we are reorganizing, and have decided to cut your position. Effective Immediately”. At this point, I was the Director Of Mobile Engineering and was making a very decent salary. While I was planning on leaving to go freelance at some point, I hadn’t dreamed it would be this sudden.

Well, it turns out that CEO did me one of the biggest favors of my life. He forced me to go indie. I probably would have flailed there for at least another year before even considering moving on.

I want to share a few things (good and bad) about what I have learned in the past month and how I will never (willingly) work for a company again.

Panic Sets In

I had been working at the aforementioned company for the past 4 years. In fact, it was my first job out of college. So, you can imagine how scary and stressful it was going from a steady paycheck to nothing in the blink of an eye. What’s ironic about this is, many people I have talked to since going indie have told me that they wish they could do it too, but really like the “security” of their corporate job.

At first, I freaked out a little and took the day off (I was “let go” in the morning). But, the very next day I hit the ground running in search of a contract.

Contracts, Contracts Everywhere

Much to my surprise, there are contracting opportunities everywhere. Again, I had to leave the company so soon, I hadn’t had time to research this myself beforehand. A simple Google search of “[your field] contract work” should reveal plenty (assuming your field is some sort of software. I can’t speak for other industries). I even started applying for salaried jobs as a contractor. You would be surprised how many companies are open to it.

This was immediately comforting.

Talk The Talk

My first few days of looking for a contract were pretty interesting. Being that I had just been let go, I felt this intense pressure to land a contract right away. This definitely came through in how I related to the recruiters and people I spoke with. My good friend Scott Caruso sat down with me and gave me some of the most important advice I would hear for dealing with potential clients.

  1. You are looking for the “right opportunity”. If you are considering freelance, you obviously feel you are an expert (or close to) in your field and that definitely has value. Don’t settle for crappy contracts at crappy rates just because you need the money. You will hate life.

  2. Spam! During my first week, I would contact one or two people and they said they would get back to me. Well, I didn’t want to possibly have to tell them no later, so I would politely not communicate with anyone else until I heard back. That was dumb.
    Finding contracts is like shopping at Goodwill. It’s mostly crap, but if you go through enough of the crap, you will find a gem.

  3. Leverage your existing contacts. This should be obvious. I was holding off on this early on as I didn’t want to sound lame. However, these are the people you can show a little desperation to as they are (or should be) your friends. That being said, someone always knows someone else that needs some work done. If I hadn’t done this, I for sure would have violated #1.

  4. You are a scarce resource (at least present yourself that way): Once I started telling recruiters that I was talking to tons of others and am planning on making a deal this week, I started getting a flood of them calling me back.

The Bad

  1. Everything you do starts to get a price tag. The other day, I asked my wife to make me a sandwichh. She told me to make it myself, and I politely informed her that the 15 minutes spent doing that would cost us $25 so it had better be the best sandwhich I have ever made.
I am not sure if this feeling ever goes away (if you are a veteran freelance, I’d love to hear your thoughts).
  1. It’s a little scary knowing you don’t have a paycheck in X months (X being your current contract length). This was the most frightening thing at first. Now, it seems like an exciting challenge.

  2. Tendency to overwork: Since you now have money++ and can make more just by adding hours, you will be drawn to work more. I have talked to many others who end up leaving freelance because of burnout from working too much. Sure you made $30K in 2 weeks, but you are hating life.

Summary

So far my journey as an independent iOS developer has been incredible. I am loving every minute of it and I encourage anyone interested in it to do the same. I don’t think it’s for the n00b or the non-self starter. This post I found on Hacker News has a brilliant step by step tutorial on moving in this direction.

I hope you have enjoyed yet another post on freelancing.

Thanks for reading!

5 Third Party iOS Libraries I Have Found Useful Lately

As I mature as a developer, I try to rely on other people’s code more an more. Why build something from scratch when a solution already exists that you can fit in your project. In Pocket MUD Pro, I used 13 3rd party libraries and am using quite a bit more in the project that I’m currently working on. I figured that I would share some of the libraries that I have been using so that it might save you some time in the future.

1. CocoaAsyncSocket

Link: https://github.com/robbiehanson/CocoaAsyncSocket

Many of my applications involve TCP or UDP networking. There is a lot of boiler plate code involved in every networked application, and CocoaAsyncSocket solves much of that for you.

2. Appirater

Link: http://github.com/arashpayan/appirater/

Screenshot

Hopefully, you have heard of this one or a similar library by now. It’s very challenging to get users to want to review your applications, let alone give you a positive review. AppiRater allows you to prompt a user to rate your application based on either number of launches or “significant events” which you specify.

3. Zip Archive

Link: http://code.google.com/p/ziparchive/

I try to ship small applications that download assets upon launch. A good way to send these assets over the wire is to zip them up and stick them on your server. I have written an article about this on iCodeBlog.

4. Quick Dialog

**Link: ** https://github.com/escoz/QuickDialog

Creating forms in iOS is pretty painful. It usually involves custom table cells and a lot of delegate nonsense. QuickDialog takes away some of this pain and allows you to easily create iOS forms. You can even design them using JSON.

QuickDialog Screenshot

5. TSMiniWebBrowser

Link: https://github.com/tonisalae/TSMiniWebBrowser

Often times, you want a quick and dirty browser in your application. I generally use it to point to in-app documentation or take the user to a page after tapping on a link. It’s quick and easy.

Screenshot

I hope you find some value in this list. I’d love to hear about the libraries you use frequently.

Happy Coding!

How To Become An Indie Game Developer

What programmer doesn’t want to be an indie game developer? A great article with tons of tips to help you on your way.

[Article Link]