Things I Wish I Had Known 10 Years Ago
If there's one thing most people agree upon about me, it's that I'm passionate about what I do. Whether that be my current day job or my hobbies, when I start something, I like to get it finished, and then figure out how I can do it better. That latter thought is a kicker though. How to do things better. There are thousands of self-help books, coaches and seminars you could participate in that are geared to helping people do everything better. But, what are some things that won't help you get better?
Over the past 10 years, I've helped start and run the business I'm in today, and I'm currently starting to branch out and try something new completely on my own. During that time, I've come across a few pieces of information, either from others or by failing at something, that I'd like to share.
Verbal agreements are worse than no agreement.
If there is anything that working with other businesses and people has taught me, it's that verbal agreements are designed to be broken somehow. Not that agreeing with others is a bad thing, its that they are not reliable. Trying to save your business by agreeing with another party that they will or will not do something is like trying to weather a flood by hanging onto an inflated party balloon. If an agreement is important enough for you, you need to make it enticing for the other party, and then write the agreement down, so both parties know that there will be consequences if it is broken.
Self employment means spending 3 days out of the week collecting the money you made the other 2 days of the week.
It means just that. For every day you spend working on what you love, you will probably spend 150% of that time trying to get your clients to pay you. Going along with #1, this means that any contracts must be written, agreed upon, and signed to signify that both parties agree. Contracts should have limits as to how long payments can be deferred until they become past due, and there should be a defined penalty for late payments.
The 150% rule is not exact though, as you can be working on other projects during that time. It still doesn't take away from the fact that finishing a job means that you will get to eat that week. It means you'll get to eat, sometime in the near future
Learn how to stay organized.
Being unorganized is messy. It also means you will miss appointments, forget a client's project, and most importantly, make you look bad. Set up a system that not only reminds you of the things that you need to do, but can actually penalize you for failing to do them. Tough love towards yourself. If you master this, you will look like a superhero to others.
This is an area that many people suffer. Especially Programmers and Engineers. Most of the time, we just want to sit back and write great code and create cool things, but when it comes down to being reliable, we suck. This is probably the best area to master, as being reliable and dependable is the most important feature a client can look for.
Waste less time.
Similar to #3, step back and take a look at how you work. When I first started working, I used to take every job sequentially. At first, this was a great idea to stay organized and not mix up jobs, but there would be times where I would be waiting for a machine or automated system to finish and I wouldn't actually be working. Now, I have a fairly simple routine where I start working on other parts of the job during those periods, and actually have enough time to get the next project well underway well before the first project is finished. Repeat, and I never have points where I'm just sitting there, waiting for other people or machines to do their things.
In regards to programming, compile time, or running unit tests can take a long time. In compiling the Chromium project, my average computer that needs a bit more ram takes 14 minutes to do a "clean" compile (where no code has changed between each Make session). That's a lot of time to waste. So don't just sit there on Twitter or Facebook, or play lightsaber battles with your co-workers. Read through the TODO's in the code, or scour the bug reports for something relevant for the area of code you are working on.
Own up to your mistakes.
Fucking up is fun. We all do it, we all don't want to do it, and we all ask ourselves "what if..." afterwards. Instead of dwelling on what you could have done differently, admit to yourself that whatever you did was wrong, and figure out exactly what happened, and why. But don't take it any further than that. As soon as you know why everything exploded in your face, figure out how to avoid it next time, not last time.
It takes real courage to be the one to stand in front of a crowd an admit that yes, you are the reason the web app went offline for 5 hours yesterday, because you deployed directly to production instead of testing your commit, or that you weren't really paying attention and accidentally broke a part on a client's watch. Owning up to your mistakes is interesting. It will get you attention, but everyone fears it will label you as a "breaker of stuff" when actually it shows that you are aware of what happened, have already assessed the situation yourself, and are prepared to fix what you did wrong.
Whatever you do, don't be the one that never breaks things.
You don't learn anything that way
Make it clear that estimates are non-binding.
Ah, estimates. Both a lifesaver, and the worst thing invented. When I give a client an estimate, I be sure to state that all estimates are non-binding, and any agreed price is subject to change, as well as give them a 15% or $50.00 margin of error, where if the price is to rise to the lowest of the two points, I'll give them a call and confirm the new number. This covers any job up to about $450.00.
Long story short, you need to ensure your client knows this. Last thing you want is someone agreeing on a job for a few hundred, not realizing that your few is actually 700. Estimates should also be written and signed for as much as a dedicated price, like contracts are described in #2.
This certainly is not an exhaustive list, but it is a start. There are plenty of things I wish I would have known, but most are corner cases. These at least let me vent a little bit of my frustration from the past few weeks, and why I want to start a new business doing something entirely different.
I'll keep you informed, and we'll see how it goes.