Home Blog Page 26

Outsource Web Developers Properly with System Based Processes

0

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

0

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

0

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

0

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

5

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

How to create accurate freelance bids

0

I like to call today Freelancer Friday because each Friday I cover different tips for freelance developers and today I’m going to discuss how to create accurate freelance bids.

Being able to give good estimates is one of the most critical tasks you can do as a freelancer, if you quote too low you’ll end up with an angry customer because, even if you did great work, he’s having to pay more than he budgeted. And if you bid too high there’s a good chance you won’t get the job and the potential client will go to a competitor who gave a lower bid.

Through the years I’ve been guilty of erring on both sides of the spectrum and I’ve had to deal with the consequences, and they were not fun, which is why I’ve put together a formula that I follow for building bids.

  • Get a detailed drill down of the project requirements, without this you won’t be able to create an accurate bid no matter what else you do. Imagine if an architect had to give an estimate to a client who said, “I want a nice house with a cool fence”, he wouldn’t be able to accurately estimate how much the house would cost to build. An architect will get a detailed breakdown on: square footage, number of bedrooms, along with a list of all of the bells and whistles. In the same way you need a detailed breakdown of every feature that the application needs to have.
  • After you have the list of features, break them into categories, such as: database setup, front end design, user permission configurations, etc. and then put each of the features into one of the category ‘buckets’
  • Put all of the data into a spreadsheet segmented by the categories you created in step two.
  • Give a conservative estimate on each feature in the spreadsheet
  • Have the spreadsheet tally up the total hours or cost and that is the project estimate

Does that seem like common sense? Good, because creating accurate freelance bids should be a simple process. If you came up and asked me how long it would take to build a payroll system I wouldn’t have a clue what the bid should be. However I do know how long building a user database will take, and I know how long it will take to implement the design, etc. And by breaking down the project into small, specific chunks I’m now able to feel more confident about how long the individual features will take to build.

I also update the spreadsheet as I progress through the project. That way I’ll actually have a guide for future projects, for example if I originally estimated that building a video upload feature would take 8 hours but it ended up taking 14 hours I will be able to more accurately estimate that feature in future projects.

I hope that this has been a helpful guide for learning how to systematize your process for creating estimates as a freelancer. I’ve also attached a sample spreadsheet to the resource section of this post that you can use as a template for your own projects.

Freelancer Resources for Accurate Freelance Bids

Accurate Freelance Bids

Paper Piracy in Academia

0

On Thursdays I like to discuss an item in the tech industry and today I’m going to cover something near and dear to my heart: academic literature piracy. The magazine, Science, published a long post this past week that showed that not only is academic paper piracy a growing fad, but it’s reached some significant milestones. In the month of February alone the popular piracy site Sci-hub had over 6.2 million pirated paper downloads.

First and foremost, I’m not ever going to ever promote the theft of anything, be it scientific research journals or Taylor Swift MP3s, in my mind you can rationalize it all you want but theft is theft and I don’t see very much grey area in the matter.

With that being said, I’d rather discuss if the entire industry of academic publications is set for significant changes. As a computer science grad student I can tell you from personal experience how difficult it is to research scientific papers. The current process is:

  • Search for a paper on a search engine, such as Google Scholar
  • Read the abstract to see if the paper is a good fit for whatever paper or project I’m working on
  • Then go find the journal or conference that the paper was published in
  • Sign into my University account so I can go through their publication portal since all of the journals and conferences store the papers behind very expensive paywalls
  • Cross my fingers and hope that the paper I found is available through one of the channels that my university has paid for

If all of the items go smoothly above I can download and read the paper

Does that seem like a process that needs to be disrupted? I definitely think so. There are countless ways that the industry could be modified to make the research process more seamless, some of my recommendations would be:

  • A practical membership program, aka Netflix for academic papers.
  • Making all journals ad supported to users with verified ‘edu’ email addresses
  • Making all papers free and placing them in an ad supported search engine, aka Google, where the publishers share the revenue based on usage

Just like the movie and music industry, academia isn’t going to be able to continue charging outrageous fees for access to content that should be freely available and they’ll have to adjust or the rampant piracy is simply going to continue to grow and they’ll eventually be left with nothing.

Resources

System for Learning a New Programming Language

2

On Wednesdays I like to cover a random topic for developers and today I’m going to talk about how to learn a new programming language. I’ll walk you through the five steps that I use whenever I’m learning a new language or framework.

Over the years I’ve been hired by organizations such as Learn.co and AppDev to write programming curriculum for:

  • Ruby on Rails
  • Ruby programming
  • Python
  • Java
  • Several JavaScript frameworks

The only language that I really build applications in is Ruby, which means that I’ve been forced to become proficient in a number of language that I really didn’t have much experience working with, sometimes in a very short period of time.

And over the years I’ve developed a system for learning a new language or framework and that’s what I’m going to walk through today.

When I’m learning a new programming language I follow these steps:

  1. Watch a full tutorial series on the language, when I’m watching I don’t try to follow along, I simply watch what the instructor does in the demos so I can get a high level view of the language syntax and flow.
  2. Create a hello world application, I’ll incorporate a few basics, such as running a loop, creating and instantiating a class, and any other high level concepts I remember from the tutorial.
  3. Pick out a sorting algorithm and implement it in the language. It’s fine if the sorting algorithm is a basic one like selection or bubble sort. Sorting algorithms force you to use: data structures, loops, variables, and functions. Combining each of these elements will give you a good handle on how the language works.
  4. Go through an advanced tutorial on the language and this time follow along and build the programs with the instructor.
  5. Go through coding interview questions for the language. Being able to confidently answer these questions will give you a good idea if you have a solid understanding of the language.

I’ve used these five steps for a number of languages and I can also tell you, once you’ve become proficient in a single language you’ll find it’s much easier to pick up new programming languages since most of them have quite a bit of shared processes and all you’ll need to do is learn the difference in syntax.

I hope these tips will help you learn a new programming language, please feel free to comment with any other methods that you’ve found helpful when learning, and good luck with the coding!

Interview Question Tip: Explaining the Quicksort Algorithm

3

Welcome to Interview Tuesday where I discuss different ways to prepare for landing a programming job. If you’re interviewing for a developer position, one of the more intimidating questions that you can be asked is to explain how the Quicksort algorithm works. It’s a popular interview question by companies such as Facebook and Google, so I thought it would be a good one to cover.

Quicksort is one of the most popular sorting algorithms used by programmers due to it’s performance and space efficiency.

Here are some facts to know about Quicksort:

  • In average cases it has a performance of O(n lg n), if you are unfamiliar with the Big-O notation, just know that O(n lg n) is one of the best performing algorithm speeds for any sorting algorithm
  • It’s worst case performance is O(n^2), this is very slow, but rarely occurs
  • It is not a stable sort algorithm, which means that the original order of the elements is not preserved. As an example this would mean that if you placed multiple 5’s in an array, there’s no way to guarantee that the 5’s will all be in the same order that you placed them in the array after it’s been sorted, as shown here.
  • It is in the category of divide and conquer algorithms. Divide and conquer is a category of algorithm where the main task is broken into a set of smaller tasks and processed before putting all of the components back together at the end. I like divide and conquer algorithms because that’s also how I like to learn, I like to break down a difficult topic into its smallest, most easy to understand concept and then work my way up to advanced techniques.
  • One of the most important items to remember about Quicksort is that it uses a pivot element to partition the data set up into smaller pieces. And it does it over and over again until the full set of values are sorted.

The algorithm takes the following steps:

  1. Picks a pivot element, usually you’ll select a random element as the pivot
  2. Then it partitions the array into three sections: all of the elements less than the pivot which are located left of the pivot, the pivot itself, and all of the elements greater than the pivot located to the right of the pivot
  3. Lastly it runs steps 1 and 2 on the left and right partitions recursively until the full partition is sorted

I’ve seen university lectures that discuss the Quicksort algorithm for hours, so hitting all of the points in 5 minutes isn’t practical, however all of the items that I’ve discussed should help in a programming interview and in the resource section I’ve included links, including: animations of how Quicksort works, a code implementation that I wrote in Ruby, and some long form videos.

Resources

Dead Simple Object Oriented Programming Explanation

0

No one likes Mondays, so each Monday I like to walk through a complex development topic and give a dead simple explanation of how it works in the real world. So even if your day is rough at least you’ll have learned something new, or at least a new way of thinking about it.

Today I will cover how object oriented programming (also called OOP) works. When I started programming over a decade ago I learned how to build applications procedurally with languages such as C and PHP. If you’re not familiar with procedural code, it simply means that you build the program in sequential order and call methods when you want shared behavior between pages in the application. For example, if I had an invoicing application, I’d have a page for creating a new invoice, another page for showing the invoice, etc. And each page would have scripts that would call methods such as ones connecting it to the database or rendering a date in a specific format.

Now that you have a high level view of how procedural programming works, how does object oriented programming work? I like to think of object oriented programming as a way of modeling a program, where all of the functionality is abstracted so it can be shared throughout the application. Let’s take a look at a real world case study.

Imagine that you’re building an application that allows users to create accounts and you also need to have the ability to make some people administrators. In object oriented programming you’d have a User class, in that class you’d have methods such as:

  • Register
  • Sign in
  • Encrypt password
  • Etc

Now we have the issue that you have two types of users: regular users and site administrators. For the most part both user types are pretty similar, the only differences will be things such as editing pages and admin type tasks. In procedural programming you’d need to create two different types of users which would lead to having quite a bit of duplicate code. However in object oriented programming you can simply create a User class, and then create RegularUser and AdminUser classes that inherit from the parent User class.

When child classes inherit from the parent class they get access to all of the methods and functionality of the parent class, and then you as a developer can give them custom behavior. So for our case study the AdminUser class would contain methods unique to it that the RegularUser class wouldn’t have, which would give it the administrator functionality.

Do you see how that works?

Object oriented programming, at at high level, is all about being able to structure code in a way where functionality can be inherited and behavior modified however the developer sees fit. If done properly object oriented programming can lead to very elegantly written programs that have minimal code duplication.

I hope you have a better idea of how object oriented programming works, obviously this was a high level view of how it operates, in the resource section I’ve placed links where you can take a deep dive and learn more about how it works along with how to build real world object oriented programs.

Resources