Home Blog Page 26

Client Communication Freelancing Tips


You’ve made it through the week, nice work! On Friday’s I cover various topics related to building a freelance developer business based on my own experiences and today I’m going to discuss how to have effective client communication.

When I was originally building up my freelance business I heard a common complaint from clients talking about previous developers that worked on their projects: poor communication and a lack of transparency.

As a developer I know how hard it is to fall into the trap of wanting to dive into the code and build a project, however without proper client communication you’ll run into the following issues:

  • Clients will think that no work is being performed. Regardless of reality, if you don’t tell a client what you did their first assumption is going to be that you didn’t do anything. This can get very messy when you send your bill and the hours that you charged don’t match what the client estimated based on your updates.
  • You may be building a feature in a way that the client didn’t expect. I’ve had it happen a number of times where I understood a requirement to mean one thing, but the client had a completely different expectation in mind.

While the immediate reaction to try and fix communication issues may be to be in constant communication with the client, this approach will waste your time and it will also give them the mindset that you’ll always be available, which will limit your freedom, which kills one of the main reasons you became a freelancer in the first place.

So with these issues in mind I’ve put together a system for client communication that is balanced, meaning that the client will feel informed about the project but it will not inhibit your personal freedom. If you can perfect this part of being a freelancing you’ll see that it leads to happy customers while also being a healthy environment for you as a freelancer.

System for maintaining proper client communication

  1. Create a project management dashboard, I’ll typically use Basecamp or Trello, however you can use anything that you prefer and is easy for the client to use.
  2. At the beginning of the day schedule when you’ll work on the project. Each morning I write down on a dry erase board all of the projects I’m going to work on, and I list what time slots I’m going to work on them. For example: I’m going to work on Rails project for XYZ client from 2pm-3:30pm.
  3. After the schedule is set I message the clients and I let them know when I’ll be working on their project so they can contact me during that time slot if they need something immediate and they will also know that work is going to be performed that day.
  4. After each project time slot that day I post on the project dashboard an update on the tasks that were worked on that day. Because I like being efficient with time I’ll usually copy and paste the GitHub commit comments as bullet points.

If you follow this system your clients will be happy because they will know what you’re doing each day, and it lets your stay in control of your schedule.

client communication

ActionCable Overview for Rails 5 Applications


On Thursdays I cover a technology topic that affects the developer community, and today I am going to given an ActionCable overview, which is a new feature in Rails 5.

I attended RailsConf 2015, where DHH gave a high level view of Rails 5 and discussed how it’s going to help bridge the gap between classic style Rails apps and the new client side MVCs. As no big surprise, being the founder of the Ruby on Rails framework, DHH is not a fan of SPA type apps.

If you’re new to web development, client side MVC or SPA applications are web apps that have a separate backend and front end. They usually use a JavaScript framework, such as AngularJS or React for the front end, and then a framework like Rails on the backend. I’ve personally never been a huge fan of client side MVCs when they’re built on top of a Rails application since I was not a fan of the extra work I had to do in order to get the two sides working together. However I’m not going to get into that debate, I have good developer friends who absolutely love client side MVCs and are very passionate about them and I have no issues with them, I just choose not to use them myself. However I think it’s important to discuss why client side MVCs have grown in popularity at the rate that they have over the past few years.

JavaScript frameworks such as AngularJS have powerful tools that allow applications to “magically” update. If you have ever had an application open and all of a sudden a message popped up, such as being on Facebook and having a friend send you a message, there’s a good chance that a client side MVC was used to accomplish this functionality. Up until now it was pretty difficult to build in features like this into a Rails application because they use standard, stateless RESTful requests.

However, in Rails 5, ActionCable looks to change this and bring real time data communication within reach for Rails developers without having to use an outside JavaScript framework.

ActionCable overview:

  • Who: it was developed by the Rails open source community.
  • What: it is a module in Rails 5 that leverages WebSockets to bring state to an application. This means that your users won’t have to change or refresh a page to get new data, it can be pushed to them from the application itself. Also note, it doesn’t require archaic forms of development, such as polling.
  • When: it is available now, and will be officially released when Rails 5 is considered the stable version.
  • Where: you can get it from the Rails github repository
  • Why: this is important since users are now expecting to have the ability for applications to be more dynamic, having stateless apps aren’t good enough anymore, and a tool like ActionCable will let you deliver real time data and updates to users while still within the Rails framework ecosystem.
  • How: ActionCable creates the concepts of Channels, where you can perform asynchronous data transfers, both requests and responses from within the application files.

I hope this was a helpful ActionCable overview for understanding what it is and how it can be helpful for your Rails applications, I’ll also include links to tutorials so you can try it out for yourself, and good luck with the coding!


ActionCable overview

How to Study and Understand Complex Topics


On Wednesday’s I cover a random topic related to development and today I’m going to discuss how to study and comprehend complex topics.

When I was younger I used to struggle learning a new or difficult subject, and through the years and about a decade of university and grad school have helped me put together a strategy for how to study and understand complex topics. Typically I apply this learning system to subjects such as algorithms and software engineering, however it can be applied to any topic.

While there are a near infinite set of study straggles out there, I like this approach because it utilizes a divide and conquer strategy, focusing on breaking a complex topic into easy to understand components, and putting the pieces back together at the end to see how they all work together.

System for How to Study

Let’s take a case study example: Understanding how logarithms work. Logarithms are used throughout the fields of mathematics and computer science, however unless you use them regularly it’s easy to get rusty on them.

1. The first task that I will do is take a piece of paper and write Logarithm in the center and circle it.

2. Next I’ll go to a comprehensive post on the topic, such as one on Wikipedia. In reading the first sentence I come across a few terms that are a bit fuzzy:

Inverse operation


I will stop reading the logarithm article and go and read those two articles until I feel comfortable with what they represent. After I feel good about those two items I write them as their own circles that connect to the Logarithm circle. I will also add any examples that will help me understand what the terms mean if necessary.

3. Next I’ll go back to the original Logarithm post and keep going through the article repeating this process until the entire page is filled with a mind map that explains each component that makes up logarithms and how they work together. This may include base case examples, such as:

64 = 2^6 is the same as log 2 (64) = 6

If this seems like a dead simple approach to study… it is. The goal of studying is to learn a topic, and one of the easiest ways to understand a complex subject is to break it into easy to comprehend components.

For example, if you’re trying to understand an advanced algorithm in computer science from scratch you may feel a little intimidated. However if you break the algorithm down into small enough components you’ll see that it’s essentially a process of steps made up of connecting simple modules such as loops, manipulating variables, and using conditionals.

A problem is only hard when you try to think of it as a whole, however any concept can be understood if you simplify it down to easy to comprehend pieces. Obviously the more complex the topic, the longer it will take to deconstruct, however I am a firm believer that anyone can understand any topic assuming they dedicate themselves and put the work in.

I hope that you can leverage this mind mapping process to understand complex topics and that it will help you learn how to study properly and truly learn.

how to study

Greatest Weakness Answers for Coding Interviews


On Tuesday’s I cover various strategies for preparing for a coding interview job, and today I’m going to discuss how to answer the question of: what’s your greatest weakness?

To be 100% honest I’m not a huge fan of this question since it’s a lose/lose question: if the individual being interviewed is completely honest they probably won’t get the job, and if they give a flat out lie it will be evident very quickly. However throughout the years I have had several managers ask me this question, so it’s important to have a well thought out answer ready.

Since I’ve been on both sides of the interview chair, I have put together a list of the worst ways to answer this question and then some of the best answers.

Bad answers to your greatest weakness

Hard time saying no – this will say that you are weak and will take on too many projects, typically resulting in poor performance.

Can have a hard time staying on a single task – this means you should probably either learn how to focus or that you are supposed to be an entrepreneur, working for a company usually means long hours on long, repetitive tasks, and if someone is bouncing from project to project they’re not going to be a good asset to the team.

Can be arrogant – I had a professor in grad school, Dr. Richard Gelfond, who is one of the most brilliant computer scientists I’ve ever known, who said this about arrogance: “Being arrogant occasionally doesn’t matter, but it’s never good”. An arrogant employee won’t be able to work well with others and will have a hard time taking correction or learning anything new… because they already know it all.

Good answers to your greatest weakness

Can be slow to take action – this is an interesting answer because it could be a bad answer if you leave it at this since it might tell the interviewer that you are timid, which would be a poor character trait. However if you follow it up by saying that you are very detailed and that before you start a task you want to have a clear strategy for how to move forward, that is an employee I want to have on my team!

Can be overly critical on myself – this will tell the interviewer that you care about your work and that doing it well is very important to you. Make sure to follow up with how you’re working on yourself so that you still are working on being a craftsman at your work but to not get on yourself for irrelevant reasons.

Can be quiet – this is one of my favorite things to hear, assuming that the individual follows it up by saying that they can be quiet because he or she thinks that it’s important to listen to all of the details of a project or challenge before giving an answer. This tells me that the individual is going to be detail oriented and won’t miss key items because they were too busy thinking what they were going to say next.

I hope that these strategies help you answer the question of: What’s your greatest weakness? And good luck with the interview!

greatest weakness

How HTTP Works for Developers and APIs


Mondays have a tendency to be stressful, so on Mondays I like to cover a challenging development topic and give a dead simple explanation of how it works in the real world. Today I’m going to discuss how HTTP works, especially as it relates to developers working on building API and service based applications.

HTTP is an acronym that stands for Hypertext Transfer Protocol, and at a high level it’s the protocol that the Internet uses to connect users and servers throughout the world. You could probably spend your career learning all of the intricacies of how HTTP works, so I want to focus on the components that are important from a developer perspective.

The first key term is the HTTP request. This is what happens every time you go to a new page on a website. If you have made a search on Google you’ve made an HTTP request, it simply means that you’re sending information to a server. Once the server receives the information it has to decide on how to handle the request, which leads to the second key term: the response.

An HTTP response is what the server sends back to the client. The client can be a web browser, a mobile phone, or anything connected to the Internet.

For a basic workflow, when I search for cute puppies on Google, the term cute puppies is sent as the HTTP request, the Google servers take in the request, and then send back a list of cute puppy links as the response.

So how does that help you as a developer? Well, when you’re building service based applications you’ll be sending HTTP requests and receiving responses to fill your application with data.

Some development case studies would be:

In a mapping application you would send your API keys to Google, along with geo coordinates and be sent back a response containing mapping data so your users can see their location on an iPhone app.

For a shopping application you would send billing information to the Stripe API and receive a response back that lets your app know if the payment was made successfully or not.

Hopefully this gives you a high level understanding of how HTTP works and how you work with it in development, in the resources section of the post I’ve included links where you can deepen your knowledge of HTTP and how responses and requests are processed.

Resources for How HTTP Works

How HTTP Works

Outsource Web Developers Properly with System Based Processes


It’s end of the week, which means it’s time for Freelancer Friday. When it comes to working on client projects I’ve worked on applications ranging from apps that I could build in a few days to applications that have taken over a year of development time and involved over a dozen different developers. So what the best way to work with outsource web developers? Whenever I have a large project that requires a development team that I need to bring onboard it presents a series of challenges, such as: do the programmers specialize in the features that need to be built out, will bringing on other developers allow the project to stay on budget, how can I make sure that the code quality meets the client expectations?

I could pretend that the outsource web developers I’ve worked with were managed properly for every project, but that would be a horrible lie. In fact I got the idea for this post based on the many times that I’ve had poor experiences managing development teams.

Based on my mixed experiences in managing outsource web developers, I’ve built the following system for ensuring that I have picked the right set of developers and that they are producing code that will help make clients happy.

System for Managing Outsource Web Developers

  • Automated testing – whether you working by yourself or with outsourced developers it’s vital that you use automated testing. This can include behavior driven development or unit testing. However this process will help to ensure that all of the features of an application are working and also that new features do not break pre-existing functionality.
  • Daily Reports – depending on the situation that you have with your clients, it’s important that you receive daily reports on the development work performed for that day. If you’re not getting daily updates there is a good chance that no work was performed.
  • Access to applications – If you happen to only be managing the application and not actually developing, make sure that you have proper access. This includes: command line database access, your public keys on the server that the application is being deployed on, and any error logging system such as HoneyBadger or AppSignal.

If you’re bringing on an outsourced development team it typically means that your time is limited, however if you follow these three steps it should help your project to be successful.

Some of the tools that I use to manage development teams are:

outsource web developers

GetHuman Launches to Do Our Customer Service Dirty Work


On Thursdays I like to cover technology news and talk about how it relates to developers. Today I’m going to discuss a company called GetHuman and their launch into an industry I didn’t even know existed, the secondary customer service space.

At a high level the company started as a directory based application that gave consumers guides to connect with the customer service departments for various companies. This past week they launched a new service that takes it to a new level and you can actually hire them to do everything for you.

I recently moved to Arizona and I’m currently researching which internet provider I want for the condo so I went through the steps they have on their site and it’s pretty intuitive and easy to use. After answering a few questions it gave me an estimate that setting up Internet with CenturyLink would take 10 minutes over 3 steps. They give an option to go through the steps manually or pay them $14 to let them handle the process for me.

This is a great example of a development team finding a problem spot in the market and building an easy to use solution for fixing it. I’m constantly talking with developers and entrepreneurs who are building a business that’s simply a slightly different version of another successful business, such as “this is an Uber for XYZ industry”. But I like companies like GetHuman because they’re not trying to copy someone else, they’ve seen an issue and they built an elegant application to help make people’s lives easier.

Even though you may have not hear of them yet, GetHuman has been around since 2005 and was founded by Paul English, the former CTO of Kayak.com, as a way for his Father, who was battling Alzheimer’s, to have step by step guides for contacting businesses and it has evolved into the service it is today.

I’m very interested in seeing how GetHuman grows and especially how they solve the problem of handling issues such as answering confidential questions. However I’m a huge of any service that aims to improve an issue as messy as customer service.

GetHuman Customer Service Support Resources

GetHuman Customer Service Support

Top Developer Books for Learning Programming


On Wednesdays I cover a random topic related to development and today I want to discuss some of the top developer books that have helped me grow as a programmer over the years.

Considering that there are thousands of programming languages and frameworks, along with near countless design patterns it wouldn’t make sense to list off the top developer books related to a specific programming language. For example, I loved going through “The Well-Grounded Rubyist” by David Black, but that wouldn’t help you much if you’re a C# programmer.

With that in mind this is a list of books I’ve gone through that you can go through regardless of what language or framework you use, the goal of these books is how you can become the best developer that you can be with a focus on the best ways to become a true coding craftsman.

Top Developer Books

The first in the list of top developer books is “So Good They Can’t Ignore You: Why Skills Trump Passion in the Quest for Work You Love” by Cal Newport. Newport is one of my favorite writers, with his experience as a computer scientist, he does a great job of combining research with real world application. In this book he discusses how the true path to fulfillment is not following your passion, but instead focusing on becoming the very best at whatever you do, and he gives practical recommendations and examples of how you can you can accomplish it.

The next book is the “Originals: How Non-Conformists Move the World” by Adam Grant. The COO of Facebook wrote the forward for this book and walks through examples of people who challenged the status quo and changed the face of the technology world. Grant uses practical examples to illustrate the character traits of tech leaders great and small. He also does a great job of picking out details of people’s lives that I hadn’t noticed before.

Another Cal Newport book, “Deep Work” is the next one on the list. Newport is a computer science professor at Georgetown University, and his experience as a teacher really shines through in this book. Throughout the book he gives practical advice on how to become an expert at any task that you’re willing to be diligent with. He also backs up his strategies with real world examples and research.

Next on the list is “The Innovators: How a Group of Hackers, Geniuses, and Geeks Created the Digital Revolution” by Walter Isaacson. I think I went through this book in about three days, it was absolutely riveting. Starting a few hundred years ago with Ada Lovelace and going through modern technology times, Isaacson gives a mini biography on the individuals involved in ushering in the technological revolution. As a developer it was inspiring and insightful to hear all of the stories about the people who built the systems that I work on each day.

Last on this list is “Sprint: How to Solve Big Problems and Test New Ideas in Just Five Days” by Googler Jake Knapp. There are countless times when I get stuck on a big feature for an application, this book does a great job in giving a practical system for building significant features in a very short period of time. The strategies revolve around a high level of focus on a single task and having a structured product development plan.

As you may have noticed there is a common theme among the books, which is having real world strategies and examples of how to become successful as a developer. The task of learning how to code is never over, each day there is something new to learn, and with the strategies outlined in these books you can put together a structured path to continuous improvement.

top developer books

Enterprise Software Job Strategy and Guide


On Tuesdays I cover topics related to getting job in the tech industry, and today I’ll be discussing strategies for interviewing for an enterprise software job.

If you’re a developer and have worked with startups or freelance clients you’ll find that the world of enterprise software jobs is quite different, in both good and challenging ways.

Some of the pros to working in the enterprise software industry is that large organizations typically are stable, have systems in place for development, and allow you to specialize on a specific piece of functionality instead of having to cover the full range of software features.

Some of the challenges that are unique to enterprise development are that there is typically quite a bit of red tape for developers, if you’re used to being able to grab any code library and stick it in your application you’ll find that enterprises are pretty picky about what outside libraries you bring in. For example, I was just talking with a enterprise software developer a few days ago who expressed how frustrating it was that it took two months for his company to give him permission to use the jQuery library, which is one of the most commonly used user interface libraries in the application space.

So what types of questions should be prepared for when applying for an enterprise software job?

  1. Questions about how well you work with formal processes. Depending on the company’s level of formality you’ll most likely need to explain how you have worked with different project management processes such as Scrum, Extreme Programming, and processes such as that.
  2. At large enterprises software bugs can cause millions of dollars in damages, so the testing systems are typically quite thorough. With that in mind make sure that you are prepared to answer questions related to unit testing and behavior driven development.
  3. Considering that we’re living in a Microsoft based enterprise world, having a solid knowledge of how well you understand ways to integrate with Windows servers, ActiveDirectory, and tools such as SharePoint will be very important. I’ve personally been asked how I would integrate ActiveDirectory single sign on into a Ruby on Rails application, along with how to run Rails on a Windows server during various interviews. And if you know the Rails development system you’ll know that these are not standard requirements at all.
  4. As with most development positions you’ll also need to have a solid understanding of the technical skills of the position, this usually includes being able to give accurate answers to questions related to object oriented principles and a walk through of popular algorithms. The technical portion of interviews will most likely be specific to the job. For example, if you’re applying for a front end enterprise software job they probably won’t ask you about Quicksort, but they will ask you about how to properly manage JavaScript callbacks.

Hopefully these four areas of questions will help you prepare and feel confident about applying for an enterprise software job, and good luck with the interview!

Enterprise Software Job Additional Resources:

Enterprise Software Job

Model View Controller Design Pattern


On Mondays I like to take a challenging development topic and give a dead simple explanation of how it works in the real world. Today I’m going to discuss the Model View Controller Design Pattern, also known as MVC architecture.

While the Model View Controller design pattern is used by some of the most popular application frameworks, it’s still a concept that can be confusing, especially to new developers.

At its core, the Model View Controller design pattern is a workflow that gives a structure to application frameworks. MVC lets you, as a developer, organize your code in a way that is logical and can also be understood by other developers.

Practical Implementation of MVC

Like other topics, I think the best way to understand the Model View Controller design pattern is to break it down into individual pieces, and then putting them together to see how they all work with each other.

Model – Starting off with the model component, this is where the application data resides. For example, if you have an invoicing application, the model files will store items such as the attributes for invoices, custom methods such as how an invoice relates to the rest of the application, along with other features such as database query scopes. The model should only be called by the controller and shouldn’t have any interaction with the view.

Controller – Controller files manage data flow for the application, they take in requests from the routing engine and coordinates how the rest of the application processes that request. For example, in a sample invoicing application if you go to a page where you can create a new invoice. The controller would register that request, pick out what view should be rendered, and call the model for any data that is needed for the page. In a well written application controller files should not contain very much complex logic.

View – Views should be the most straightforward component in an application. The view should simply render the template and display any data passed to it by the controller, it should not have any direct communication with the model, instead it should only communicate with the controller.

A Real World Example of MVC

In one of my teaching roles I worked created Rails curriculum for Learn.co, and they had a great analogy for understanding the Model View Controller design pattern:

Imagine the the MVC architecture is a restaurant. The model is the chef, the chef’s role is to get orders from the waiter and make the meals. The waiter is the controller, they take requests from the customer, informs the chef, and brings the meal back to the customer. Lastly the view is the table, it simply holds the meal, it doesn’t have to do any type of complex task besides simply being there.

So why is the Model View Controller design pattern important? Imagine if everyone built applications the way that they personally felt code should be created, if new developers started to work on a project, they would have no idea where to even find features, much less how to extend the functionality or fix bugs. With the Model View Controller design pattern a new developer can quickly find where the data files are, how the data flow works, and where to update the view pages.

I hope that you now have a more clear idea of how the Model View Controller design pattern works and how you can implement it in your applications.

Model View Controller Design Pattern Resources

Model View Controller Design Pattern