Classic Hacking

Security

I’ve been involved with technology since the mid 90’s. During the late 90’s, I worked on Unix systems. It was those experiences that lead me to love Linux, taught me to program in C, and helped me learn to automate tasks using various scripting languages. But the 90’s were a much different time for security. Nobody really worried much about hackers or social engineering. And now, over 20 years later, I see people in the workforce that have been robbed of some of the fun I had in the past due to increased security on machines. Of course, increased security is good, I’m not going to argue otherwise. But it has also made a lot of the ‘fun’ from the past no longer possible.

Remote Display

When I was working on old Unix systems, one of my favorite hacks was to set my display to another computer. Since Unix display works as a client/server model, you can actually set your app to appear on any computer monitor you want. So, it was common where I worked to find the most horrible graphic you could and display it on someone else’s machine. Always a good laugh. Other tricks would allow you to play audio on their speakers (great when the individual has fallen asleep at their desk) or turn their keyboard buttons on and off.

Password Files

Long before the /etc/shadow file, passwords were stored in the /etc/password file. And, since the file was readable by anyone, you could easily grab the entire password list and run it through a tool like John the Ripper. Even more fun, commands like ‘ypcat’ would allow you to get the passwords of all users on the network even if they weren’t on the local machine.

Email Overflow

My sister’s first experience with the internet was through a device called “WebTV”. This device was a small terminal that would turn your TV into an internet terminal. It was a cheap, easy alternative to a computer. It also suffered from a pretty simple flaw – you could only have a limited number of emails. (200, I believe.) I found an unsecured email relay – pretty common in the 90’s – and spammed my sister with enough messages to flush out all her email. As you might guess, she was mad.

A New World

How things have changed. Unsecured email servers are much more difficult to find, and Unix is now much harder to hack out-of-the-box. While most of the hacks of twenty years ago were mischievous in nature, today’s hackers are far more sinister. And, thankfully, the world has adapted to become a safer place. Nonetheless, I still look back to the simpler days of computing and the fun we had.

Scheduling & Planning

Schedule

Last January, I made a decision that profoundly changed my life – I started scheduling and planning my time. Most people are subjected to schedules and plans at the workplace, but few take their life so seriously. As a consequence, we all end up in a place we never intended to be. We all have hopes and dreams, but we fail to plan the steps necessary to get there. During the last year, I started my business full time, completed 61 college credits in 6 months, read four books in Chinese, and accomplished more than I have in years. None of these things would have happened without planning and scheduling.

Pen & Paper

Many people may use electronic tools like Google Calendar or their iPad Reminders. While these are both great tools, they are way too easy to ignore. I have found that using a written planner is so much more effective. Every night, I plan out out the most important things I need to accomplish the following day. On Sunday, I plan the big items I need to accomplish throughout the week. I take notes of what happened in any given day so that I can reflect on my progress later and see where I can improve. I nearly always have my journal nearby so that I can capture anything important to me.

Electronic Tools

While I prefer to do my scheduling and task lists on paper, there are some things that simply work better via electronic scheduling. For instance, when I write a blog post, I schedule it to be published at a future date. That way, I can write several posts during one block of time and have them go out during the upcoming month. For my social media, I use HootSuite for the same purpose. I can schedule all my media for the week or the month and not worry about it during the week. This ensures that my blog and my social media are constantly fresh and updated without the necessary worry about posting every day.

The End Result

Through the use of scheduling tools, I have found that I am able to be substantially more productive than ever before. Tasks get accomplished on time, more gets done, and I have more free time to focus on the things I enjoy in life. Even more importantly, I know where my life is headed. I have a plan, and I know where I’m going. Do you?

Payment Terms

Money

Recently, a fellow small business owner asked me how I handle billing. For a small business, money is often one of the biggest concerns. Without a steady flow of cash, you can’t meet your business objectives or your personal financial requirements. As a small business, you have to determine when to bill and how to bill. Even worse, you have to define how you deal with delinquent payments – which can kill your business.

When To Start Billing?

The first question to answer is when do you start billing? This is particularly true if you’re billing by the hour. Does the clock start ticking at your first meeting? After the project requirements are defined? After the project is complete? For my business, anything after the initial project meeting is billed to the customer. I think it’s important for a customer to understand that project planning, requirements gathering, and any other tasks completed before any actual code is developed is an integral part of the development lifecycle. I typically bill the first of the month after any billable hours have accrued. I’ve found that the longer you wait, the more the bill increases. Then, you risk the customer suffering from sticker shock when you finally send the bill after months of work.

Late Payments?

When I started my business, I was so pleased to have customers that I didn’t worry about late payments. I assumed that my customers respected me enough to pay me on time. I was incredibly wrong. What I’ve found instead is that many companies will put me at the bottom of the list of payees. Why is that? Well, I think it’s pretty simple. The customer knows they have to pay their lease on time or risk eviction. They know when they fail to pay their internet bill, they won’t be able to perform their mission. What happens when they don’t pay you? Likely nothing. Additionally, they know you don’t have a collections branch and are unlikely to use a collections agent. Thus, they have absolutely no reason to worry about when they pay you. I have learned to include verbiage in my contracts defining payment terms. I give customers a 5 day grace period, and after that the customer is charged a late fee. Additionally, all the customer’s projects are paused until payment is received. If you continue to work, you end up months behind on payment and continuing to work for free.

What About Equity?

I’ve had many ‘customers’ offer to pay me in equity. I do the work and they will give me a percentage of the revenue generated by the software. I have a very simple answer for this kind of relationship. No. While an individual may think that their idea will generate millions, they rarely do. Even worse, you’ve now wasted time developing software that you will never be paid for. The original ‘customer’ lost nothing. You lost countless billable hours to a project that will never be profitable.

Conclusion

Money is the lifeblood of any business. What I’ve learned is that it’s imperative to have clearly defined payment terms and procedures for your business. When you fail to make those terms clear to customers, you will quickly find that your business struggles to get by and that you are spending more time nagging customers to pay than you do performing your business’s objectives.

Surface Pro 6

As a developer, I tend to need a lot of hard drive space for projects and tools. As such, my MacBook Pro was starting to run out of drive space. This was only exacerbated by the fact that I was also running Windows 10 on the same machine for .NET projects. I decided it was time to replace my MacBook Pro, and looked at the newest product line. Unfortunately, I was very disappointed by the lack of ports on the new MacBook Pro. With a sticker price of nearly $4,000 for a machine with all the bells and whistles, the lack of ports is simply unacceptable.

What to Do?

After much deliberation, I decided to get a separate Windows machine and reclaim the space on my MacBook Pro for MacOS. I had been looking at the Surface Pro for a while as it looks like a great machine. So I went to the store and purchased the computer, a keyboard, and the pen for around $1000. Given a price tag one fourth that of a new MacBook Pro, how does it compare? So far, I am very impressed. The Surface Pro includes numerous features that the MacBook Pro can’t touch including: facial recognition for login, touch screen, functionality as both a tablet and a laptop, and he use of an optional pen for drawing.

Conclusion

While the Surface Pro does not compete with a top-of-the-line MacBook Pro in terms of raw horsepower, it is lightweight, multipurpose, and more than adequate for the occasional .NET project I need to support. Even more exciting, it will work far better than my MacBook Pro for taking onsite to gather customer requirements or take quick notes.

Note to Apple

Apple, your decision to remove standard USB from your laptop cost you $4,000 I would have gladly paid. Instead, I paid $1,000 to buy a laptop from your competitor. While you may think you’re a trendsetter, a large number of developers I’ve spoken with are less excited by your choice. For us, computers are a tool to solve a problem – not a trendy accessory. You managed to capture a growing portion of developers, but focusing on trends instead of solutions will negatively impact that growth in the future.

Lessons Learned

A little over a year ago, I decided to start using a planner to keep track of my todo list, take notes, and keep track of progress on projects. Each week, I review what happened during the week and note any lessons learned during that week. At the end of the year, I compiled all the lessons into a PDF document that I can frequently review. This helps me to continuously improve myself both personally and professionally. Some of the things I’ve learned may be worth sharing.

Fall in Love with Customers

I’d like to say this one was mine, but I read it somewhere and it really resonated with me as an owner of a service company. Imagine if you treated every customer like you were as infatuated with them as you are with the man or woman of your dreams. Deliver that level of service! This is a hard one, but if you can do it you will never be without clients!

Be a Leader in Everything You Do

It’s easy to lay back and relax, and let someone else take charge. But your success will only be achieved when you make it happen! If you want to be successful, you need to be a leader in everything you do – in your home, your workplace, your place of worship, your social clubs, absolutely everywhere.

Focus on People

As a business owner, it’s easy to focus on money. We worry that we won’t have enough or that our sales pipeline is drying up. When we do that, we lose focus on people. But relationships are really what matters most. Every job I’ve ever had – whether as an employee or a contractor – started by having a relationship with someone.

Be Selective of How You Spend Time

Life is short, and you’re busy. Do you really have time to commit to a new project? Volunteer at the school? Take on additional responsibility? If the answer is no, don’t commit. It’s easy to become overcommitted – and burned out. If you don’t have the bandwidth or the desire to do something – don’t do it. Focus your time on the things that will aid in achieving your goals.

Set Goals

I have found that by setting goals – both annually, quarterly, and weekly, I am able to achieve substantially more than I could before. I heard it once said “plan the work and work the plan”.

Conclusion

While I have hundreds of other lessons learned, the above represent some of the most important. This year, I have been trying to do a better job at all of the above. I’ve got far to go, but I can see the fruit of my labor when I look at how far my business has come during the past year.

MacBook Pro?

I’ve been a Mac user for several years now. I have a MacBook Pro (2015) and a MacBook Air. I love them both. They are amazing machines. From battery live to performance and every aspect in between, Mac laptops are awesome. What makes the MacBook Pro so great for me is how well it’s positioned as a development machine. Lots of ram, high-quality graphics, fast, Linux compatible backend (BSD), and ports for everything I need. When I visit a client who wants to see what I’ve been working on, I connect a HDMI cable to my MacBook Pro and walk through the progress. If a customer asks me to add new photos to their website, I insert their SD card into my computer and grab the images. When I want to connect with a peripheral – such as a barcode scanner or a mouse – I use my USB. If I am working with Arduino, MicroBit, or a PyBoard, I connect a standard MicroUSB cable to my machine.

Time To Upgrade!

Now, after years on my current MacBook Pro, it’s time to upgrade. I need more hard drive space for all my projects, and I’d like more memory for using virtual machines. Of course, I want another MacBook Pro. Unfortunately the new machines seem far less developer friendly. Why? Because they ONLY have USB-C ports. No HDMI, no headphone jack, no Thunderbolt, no USB-A, no SD Card reader. If I want any of the above, I need to by a converter to connect to my USB-C port. So, when I go onsite, I will now need a laptop and a bag of spare cables to connect to what I need to use. What a horrible user experience! As a laptop user, my objective is to carry around as little as possible. Apple, why did you do this? Why did you destroy a machine that was excellent for development by removing all the ports that made it so useful?

What to Do?

I’ve been pondering for the last few weeks what to do. Do I buy the MacBook Pro along with all necessary accessories to achieve what I need, or do I buy a Windows laptop (for half the cost) that already contains all the things I want? Unfortunately, I like MacOS (specifically the command prompt and dev tools) too much to go back to Windows. So, I’m stuck paying top dollar for a machine that is severely lacking in its ability to perform many of the very things I buy a laptop to do.

Agile Pricing?

Today, agile software development is the standard project management model. In many ways, it’s an excellent model. It allows for rapid changes to meet business needs, helps ensure quality throughout the process, and ensures that stakeholders have maximum visibility. But there’s one big problem…

How Do You Price Agile Projects?

Since Agile projects requirements are continually refined during the project, how do we know the amount of work to be done? How can we define a timeframe for development if we don’t have a clear picture of requirements? How can I tell you the cost when I don’t even know exactly what you want to do? Certainly I can provide an estimate based on the high-level definition of the project. But agile makes scope creep easy. New requirements can be added or old requirements removed. This means my best estimate may be wildly inaccurate.

How Can Developers Learn to Estimate Projects?

Making things more difficult, developers who have only ever worked in an agile environment will have difficulty estimating project workload. Why? Because they have never had to. Agile is so focused on the now that no attention is ever paid to the larger work of the project.

Future of Agile

The more agile work I do, the more I have mixed feelings about the process. While it allows greater management input throughout development, it suffers from a variety of problems. Sometimes, I even refer to it as (Fr)agile Development. This is just another issue to add to the list. My hope is that the software industry finds a better way to manage development that solves the problems with Agile while still providing all the positive aspects.

Small Business Struggles

Becoming a small business owner is an incredibly rewarding experience. You have complete control over your schedule as well as how much money you can make, you can take time off whenever you choose, and you get to make every decision for your business. However, small business ownership is not without its struggles. Here are some of the things I’ve found out.

Don’t Expect a High Credit Limit

As a technology company, I need to be able to buy hardware such as computers online. And, writing software means that the $500 computer at the local store isn’t going to cut it. I want a high-end laptop. A laptop that will last for several years, run fast, and meet all of my high-tech needs. Of course, along with that comes a high price tag. That’s not a problem with my personal credit card. Years of solid payment history has yielded a good credit score, and a high credit limit. My business credit card, on the other hand, barely has enough to buy the accessories I need for my computer.

Everyone Wants a Job

Now that I own my own business, it seems that everyone wants a job. Somehow, as a small business struggling to find enough work for myself, I am expected to hire other people too and find work for them. Own a tech business? Now you can expect every teenage boy in your social circles to ask to be an intern for you this summer.

Human Resource Problems

Just hired your friend? Have fun with that! There’s nothing quite as awkward as dealing with performance issues or other HR issues when the individual is someone you’ve known for a long time. Now, you get to walk the fine line between running a successful business and protecting a relationship.

Hate Spam? Expect More!

As a business owner, everyone wants to sell me something. Whether it’s email, social media, or written correspondence, expect to receive even more junk mail. My favorite is when people connect on LinkedIn to grow their social network. Then, within minutes of accepting, you receive both a private message and an email to buy their services. Ignore that message? No problem – you’ll get another one tomorrow. Then, a week later, you’ll get a third message asking if you saw the first two.

Time is Valuable

As a business owner, you quickly learn how much it costs to perform tasks that are not billable. Marketing, social media, accounting, human resource management, website updates, and so many other tasks will require your attention – and none of them generate revenue. I’ve quickly learned to cut out the unessential so I can focus on what pays the bills.

Lots of Hats

I’ve learned just how many hats a small business owner must wear. Plan to be successful? You’ll need to know marketing, social media, accounting, human resource management, contract law, negotiations, and so much more. Oh, and that doesn’t even mention being an expert in the service you sell. Get a large hat rack – you’ll need it!

Final Thoughts

The last year of running my own business has been amazing. I’ve had financial freedom like never before and enjoyed the freedom to do what I want when I want. But that freedom hasn’t been without struggles. Business ownership is lots of work, and navigating the struggles has been part of the fun.

Social Media Etiquette

Social Media

Today, social media is increasingly being used as a tool for marketing and advertising. However, if done poorly, you run the risk of tarnishing your brand and being viewed as a spammer. Here are a few simple etiquette rules for social media.

Avoid Follow/Unfollow

Today, I was notified that I had a new follower on Instagram. After seeing that it was a local business, I decided to follow back. Trying to develop relationships with local businesses is an important aspect of my social media efforts. It wasn’t until a few hours later that I had an opportunity to visit their Instagram page. But when I did, I noticed that they had already unfollowed me. They had no actual interest in my content or in developing a relationship – they simply wanted to show me their products. This isn’t much different from spamming and does not present a positive view of your organization.

Create Content Not Advertisements

People are unlikely to follow you on social media to see what you have on sale this week. People want to see your personality, what your business stands for, and who you are. Of course, all businesses will occasionally create content that advertises their goods and services, but if that’s all you do, expect to be unfollowed. Social media is for growing communities – not a new tool to spam me with ads.

Stop Nagging Me About Services

On LinkedIn, in particular, this is common. Someone friends you and – wanting to grow your own circle of connections – you accept. Then, you get a private message about the services they offer. Viewing it for what it is – spam – you ignore the message. A week later, another message. Then a month later, a message asking if you got the previous message. Yes, I got them all. I chose to ignore them because I wasn’t interested in your product at this time. Additionally, I now am distrustful of you as I see you too are a spammer.

Like/Know/Trust

Want to develop your social media the right way? Use the like/know/trust model. First, users like you. They see your posts, enjoy your photos, laugh at your jokes. After a while, users feel that they know you. The’ve seen your stuff, they know what you stand for, and they feel that they understand you and your company. Finally, users trust you. They have seen you in action and know you’re knot a spammer. They recognize that you provide valuable content they want. They know you’re someone they could reach out to if they need your services. That’s the formula for success. You develop community and relationships, and people see you as a valuable asset instead of a spammer.

Do Unto Others

The golden rule applies to social media just as it does anywhere else. When you’re engaging in social media efforts, ask yourself how you would view another business if they used the same tactics. If it’s not favorable, don’t do it.

Return on Investment

During the past year, it has become increasingly obvious to me that many people don’t understand Return on Investment (ROI). Looking back, I realize this was not something I learned about until a businessman explained it to me. At its simplest, return on investment is exactly what it sounds like – the amount of return that an organization receives on their investment. However, this will be viewed differently based on the type of organization an individual works for – government, non-profit, or for profit entity.

Government Organizations

Government is the simplest to define as they have no ROI nor are they interested in ROI. This is not intended to be cynical, it’s just true. Regardless of your political affiliation, you can point to government programs that are riddled with waste. Why? Because government entities are not required to prove their programs work. We, the taxpayers, are forced to pay taxes regardless of the success of the programs we are asked to support. Deep inside, this is how we all want to work – we don’t really want management to access the value we bring to an organization, we simply want to be paid more.

Non-Profit Organizations

Non-profit organizations are a little more focused on ROI. However, their definition is far less stringent than a for-profit organization. For the non-profit, ROI is simply the appearance of value. Since non-profit organizations receive donations from individuals and entities, they only need to convince donors that their programs work. Even if they don’t, many will still give money to support the cause even when there is no ROI. Just like broken government programs, we can all point to non-profit organizations that continue to operate even though they are having no positive impact on the mission they support.

For Profit Organizations

Finally, we have for-profit organizations. In these organizations, everything is measured based on cost and benefits. ROI is simply the value something generates beyond the cost. This is absolutely critical for corporations. If money is continually invested in ways that generate less revenue than they cost, the business will quickly go bankrupt. If you want something, present your request based on the return on investment. Feelings and preferences have no place here. Can you directly tie your request to a financial reward? If not, don’t bother asking!

Why should you care?

The type of organization you work for will determine the ROI model used. Understanding that model will help you know how to argue for a raise, get a new computer, purchase additional tools, etc. If you work for a for-profit organization, decisions will be guided by how much money the business will get back from what they spent. If you can argue that your suggestion will yield more than it costs, you will be far more likely to see your request granted. However, if you argue based on your preference or feelings, you will likely find that your request is denied. Likewise, arguing that you bring substantially more to the organization than you are paid is the single best way to argue for a raise.