Laravel Web App Development | Customer Page | Manufacturing Website

Unfortunately, my best client right now doesn’t let me identify them publicly. Luckily, they allow me to talk in general about the work, so here we go!

This project was truly full-stack including UX/UI, high fidelity wireframes, front-end (html, scss, JavaScript, etc.), api architecture, and database architecture.

The page addition is part of a super fun ongoing project built in Laravel 4. For this page addition, I was given an existing back-end and some admin pages built in frozen-node. Then, I was tasked to improve the user experience when someone needed to add a company, contacts, addresses, phone numbers, and emails.

The current data architecture was cumbersome and restrictive and they wanted it to be easier to use and update in the future. I modified the relationships between these objects (company, contacts, etc.) in the database model and then built endpoints for them.

On the front-end, I added Angular to the project and built the view (html, scss) to be super flexible. The front-end data mirrors the back-end which makes interacting with the data super quick and easy.

Some projects highlights include how I structured the api calls to reduce the amount of data that needs to be loaded at any one time. On page load, the page grabs a list of companies (probably never more than 200) with only the bare minimum data loaded. Because of the small size of the data, I’ll never need to paginate and can just use Angular to add sorting searching features in the future. Then, when a person clicks on a company it loads that companies data including addresses, contacts, phone numbers, etc.

Another project highlight is the use of Angular forms. I had to add a directive to keep the company, contacts, addresses, phone, and email forms separate so they could be repeated, updated, and removed intuitively. There are several nested forms in each company and each form knows if it has new data and if it has any errors on save. Super cool!

Git Commands I’ve Found Helpful

I’m creating this page mostly for me. I often find myself needing a git command I used one time a while back. The trouble with Git is it’s really hard to find a lot of the nuanced commands and there isn’t much written about them. When I find a command helpful, I’m going to record it here and attempt to describe when I’ve used it. I’ll start with one and add over time.

Branching

`git branch -rd origin/[branch name]`

We don’t clean up branches like we should! I’m including myself in this. Sometimes I’ll get on a new project, clone the repo, and type `git branch -v` to list all the branches and I get a 10 page list! That is where this command comes in. If you try to delete a local branch (`git branch -d origin/somebranch`) it won’t work. That is where the -r comes it. Use it to delete a local remote tracking branch that is cluttering up you branch list command.

Contractor VS. Employee: Who Dominates?

It seems like everyone is looking for web developers these days.

Being a developer, I get lots of questions in these 4 categories: (1) my development skills, (2) my contractor rate, (3) my work location (on site or remote), and (4) my willingness to be an employee again.

My skills usually start the conversation and I’ve tried to make it easy to review them by project, skill, or client. In addition, I’ve already addressed my contractor rate in a couple articles: good development isn’t cheap and the importance of good development.

In this article I want to talk about #3 and #4: why every company needs a contract developer like me, despite the fact that I only work remotely and don’t want to be an employee.

Here is a quick list:

  1. A contractor relationship produces high quality work
  2. A contractor can be cheaper than a full-time employee in several ways
  3. With a contractor, you only pay for billable hours
  4. A contractor can fill in employment gaps
  5. A contractor can offer help to meet deadlines
  6. Contractors are great on projects with short-term needs and uncertain futures
  7. Technology makes working remotely easy and transparent

Contractor Relationship Produces High Quality Work

Have you ever noticed how good the customer service is at the mom-and-pop restaurant near your house? Why is it so different than the drive-thru window at Taco Bell? For one, mom-and-pop know that keeping you happy keeps food in their bellies and a roof over their head. That ratty haired teenager at the window, however, couldn’t care less about your service, that is, unless his clip-board carrying boss is looking over his shoulder.

I’ve heard people say that you have to bring people “in house” to get them to really commit to your project/startup. Does commitment lead people to produce their best work? Our initial reaction is yes, but I’ve found an equally, if not more powerful motivator: mom-and-pop’s fear of not having someone to enjoy their sushi.

Or, in my case, my code.

If you’ve never worked for yourself, then you may not know the feeling that your work could end at any moment. This feeling is quite possibly the best motivator I’ve ever experienced.

This feeling leads me to constantly question if I’m providing enough and the right kind of value. To answer that question, I track my time religiously, meticulously, and at the end of the week I tally it all up (actually I use Toggl to do that) and review it. Then, I always ask myself, “Self, is this client going to be happy paying this?”

Luckily, the answer is yes most of the time. I absolutely hate the feeling of sending a bill when I wish I’d provided more value. I know that if this becomes the norm, I may not have food in my belly and a roof over my head.

I’ve experienced this feeling, to a certain degree, working for other people, but it wasn’t until I ventured out on my own that I experienced it deeply. I can tell you this, my work has never been so good.

Contractors Can Be Cheaper Than Employees

Most hiring managers realize that contractors don’t require benefits, employment taxes or payroll, on-boarding, or training.

Most managers, however, don’t realize that there are a couple other reasons why contractors are cheaper…

Think about it, you’re free to send me work (or not) at any moment. There are no string attached! There is no check that is automatically cut and put in my bank account.

My clients use my services only when they need them. This reason alone saves my clients thousands of dollars a year while not sacrificing the technology they need to drive their businesses forward. Quick bursts of work followed by pocket book silence.

Not only am I a resource for your team that can be engaged quickly, I also have my own equipment. I work with a state of the art workstation that I use with either a Mac or PC. I have an iPhone and iPad for testing and will soon be buying an Android. I sit in an ergonomic chair and have a standing desk. All stuff you don’t need to buy. 🙂

Just send me a link to your git repo and we’re running. Oh, and I don’t take up space in your office.

You Only Pay For Billable Hours

If you analyzed the number of hours an in-house developer is making you money, you’d probably find that even the best are only “on” 80% of the time. The other 20% is filled with pointless meetings, water cooler chatter, in office banter, and watching the latest cat video.

I’m not saying that these things are useless (except for maybe the cat video); I’m just pointing out something you probably already know: even though you’re paying for 40 hrs a week of work, you’re only getting 32 (if you’re lucky).

With me, you only pay for the portion of the 32 that you need.

Contractors Value Is More Transparent

Most employees balk at the idea of tracking their time. This makes it difficult to really understand which employees are effective and which are not. It also makes it difficult to understand how long features typically take.

Contractors, on the other hand, are typically very comfortable tracking there time (Buink is exemplary at being transparent with time tracked). This helps us weed out less effective developers and helps us drive progress more efficiently. Regardless of the type of project, the developer lead quickly gets a sense for how long things should take and who they should send them to.

Deadlines

Deadlines are often a function of business needs, not team resources. The truth is, companies live and die by deadlines.

That said, they aren’t always good for producing the best quality code. Sometimes, they cause us to make trade-offs that may not be desirable, like just making the code work rather than sculpting it into an eloquent piece of technology. That is not to say that deadlines are bad, they aren’t, but having a resource that can help you meet it effectively is valuable.

A good contract developer can be up and running on a project in hours, not weeks, and can provide you the extra man/woman power you need to meet the deadline and still produce quality, functional code.

If you could use some help from time to time, let’s do a small project together so when the deadline is looming, I can swoop in and help you dominate.

Employment Gaps

I remember when I got hired at one of my previous companies, they decided to add an employee because they were swamped. The problem is, they had too much work for three developers, but too little for four. It didn’t take long before the company had nothing for me to do. After a slow 3 months, things started to speed back up and then became overwhelming for a while before we hired again.

This cycle is a good example of the fact that, hiring is typically slow while business needs are urgent. So, companies go through periods of intense work before they hire and after they hire they go through a short period of too much labor.

Maintaining a good relationship with a contractor can help your team manage the periods of intense work longer. This means a happy team!

Short-term Needs With Uncertain Futures

One of the companies I’m working with right now, we’ll call them GameChanger, is bringing an old technology to an new industry. They’re in the beginning stages of their business and they have a limited budget. They could hire a full-time developer, but then they’d be burning cash every week even if their needs slow down temporarily. They’d also need to invest time making sure the employee had a full queue of projects.

Rather than hire, GameChanger reached out to me for some short-term help. I did a ton of work on their site over a two week period, creating a minimum viable product, and now they’re using it to pitch potential customers. They’ve already landed one. Nice work!

Contractors are ideal for this type of relationship. Rather than needing to manage a full-time developer they get quick bursts of work only when it is needed.

Technology Makes Remote Work Easy and Transparent

I’ve been doing contractor work since February of 2015. I’ve worked with about 18 clients so far and of those clients, I’ve met only a couple face-to-face. I laugh sometimes because I’ve never seen a couple of my best clients in person.

This type of work would not have been possible even 5 years ago, but the time has arrived. To make this work, I use all types of communication. Here are just a few (in order of frequency): email, phone, text, chat, hangout, skype. For managing projects, I use all types of software including trello, basecamp, jira, asana. I also use several code repositories: github, bitbucket, springloops. And finally, I use uxpin for wireframes.

These technologies increase the speed and accuracy of my communication.

Lastly, for transparency I use Toggl. I track every minute I work and send you a summary of my projects. This summary looks very similar to the requests sent and gives you a line by line breakdown of how your money was spent.

In my mind, over-communication is a good thing and I’ve received good feedback so far.

Conclusion

I guess I should answer the original question I asked. Who dominates, employee or contractor? Both. 🙂

As you go about building your team of stellar in-house developers, don’t forget that contractors can be a valuable part of your secret sauce.

Laravel Website Maintenance | Manufacturing Application

I got a new client about a month ago that wants to remain anonymous. I don’t like that, but they insisted. I’ve already had one other client ask for this as well, so it must be pretty common. I think it is mostly for competitive reasons.

One reason I love this project is it is built in Laravel 4, and although I have a lot of experience with PHP and some experience with Laravel, I’m still learning a lot. It has been fun to do everything from designing routes and setting up controllers to migrating the database and modifying models. Yay for Laravel and MVC, I love it!

Not only am I getting to do a lot of back-end work, I also get to apply my Angular skills to adding new features and functionality to the front-end.

Up to this point in the project I’ve been killing a lot of bugs, but one highlight for me is a new page I added to edit company data. I’ve owned this page from the ground up. I created the wireframe, added the migrations, modified the models and used Angular to add the functionality. What used to take a user 3 page loads, editing company data can now be done in one, and for any company. Thank you Angular.

I’m sure I’ll talk about this project again in the future, but I’m writing over the Christmas holiday and I need to go get some hot chocolate. 🙂

 

Website Maintenance | Squarespace Development | Real Estate Website

I’ve done a little work with Hearthfire Creative in the past couple months that I thought I’d mention. Lexi, the founder, is uses an affordable combination of some cool technologies to improve the usability of real-estate sites.

Lexi did most of the work, but reached out to me for some technical help when needed. Both sites were built in SquareSpace using iHomefinder. I did some html/css modifications to style the iHomefinder iframes correctly as well as integrating iframe widgets into the SquareSpace site.

They were fun projects and I thought I’d mention them in case anyone reading is interested in an upgrade to a real-estate site.

PHP Development | API with Oauth 2.0 | Space Web Application

Lots of technologists are moving towards separating the front-end and back-end of their web assets. The front-end of a site becomes a stand-alone application that consumes endpoints (http accessible URLs) for business purposes. The back-end becomes an API, or a group of endpoints. There are lots of reasons for doing this; one is that it makes it easy to add another client (not a client in the business sense, but in the web sense, like Android, IOS, web app, Facebook app, etc.) in the future because all resources are just endpoints that can be accessed from any internet connection.

Separating the front-end and the back-end of SpaceNav was one of my first recommendations and it is fun to finally move towards it.

The big problem with allowing anyone online to access a resource is that you want to make sure it can only be accessed by authorized parties. A common and trusted way to authenticate an API is Oauth 2.0. There are easier ways, but Oauth sets a good foundation for future growth no matter what new client you want to add.

Oauth isn’t complicated to understand, but it is a little more complicated to implement.

After I got a firm understanding of Oauth and its different grant types, I found a helpful package and wired it all up. It took surprisingly little effort to get it working. Most of the time was spent figuring out the best way to integrate it with our current authorization.

WordPress Consulting | Website Maintenance | Boulder Bike Tours

I hired a handyman to do some work on my house and it turned out he needed a website. Like many small businesses, he had a very small budget, so small that I typically can’t help much. I gave him some options and we came up with a plan that worked for him.

Herschel, my new handyman, picked my brain about ways he could keep the budget down and he decided to open an account at wpEngine because they help manage server security (he had lots of issues with Bluehost). He watched several YouTube videos and found a highly recommended theme, installed it himself and learned how to use it. When he hit a wall, he reached out for help. Sometimes I could walk him through the issue and other times I just made the changes for him.

In the end, he got a nice looking site that allows him to update content and make changes without the help of a developer.

PHP Development | Website Maintenance | Space Web Application

I’ve posted about working with SpaceNav before, but I just finished building a cool page that I wanted to share. I’m really excited about this project because I got to do everything for the page, including the PHP endpoints.

We’re in the process of migrating the whole site over to be an Angular front-end and an API back-end. I’m not 100% sure what the back-end will be built in, I’m leaning towards Node.js because of my JavaScript background, but it may end up being Laravel because the company already has some PHP experience.

With the whole site architecture in transition, I’m building everything as if it is on the new architecture. That adds a little overhead, but it will be well worth it when we finally rip the band-aid off and migrate.

This project was fun because I got to dig into the databases and queries. I also got to use the data to show the charts using Google Charts. The page turned out really well. The queries are blazing fast compared to other parts of the site, and the charts animate giving you the data in a beautiful way.

I also enjoyed learning to give a table a fixed header. The table on the right scrolls while the header stays in place. I built an angular directive that uses jQuery to wait till the table is created and then clone the header. It works surprisingly well and is easy to add to any table now.