My Rules for Remote Work

So I actuallly had a really hard time working remotely for the first few months, typically working long hours for little billable work. Eventually my wife and I realized that it wasn’t sustainable and we had to come up with a better strategy for handling the work life balance. What follows is the product of trying many different things, to separate the messiness of having my job and my office exist in the same physical location.

Functional Composition in Javascript

What is ‘functional composition’? Functional composition is when you take two or more functions, and make one a single function out of them. When you compose functions into a single function call, you can start using them as pipelines of specific behavior. These pipelines can then take the result of each function that comprises it, and use it as the argument to the next function in the pipeline. This approach of making a pipeline of functions might seem more cumbersome, but it ends up giving you more flexibility in how you work with your data, while also aiding predictability/readability/testability/etc.

Engineering Roles

Nailing down the roles and responsibilities a company expects from their engineers is one of the most over-looked, but important, areas of a company’s organization. It’s often talked about when hiring or promoting, but rarely at other times. When it is talked about, it’s usually more of a gut feeling by individual stakeholders rather than objective criteria. The conversation usually resembles something like this: Person A: I feel like what I’m looking for in a senior is someone who has a real hacker mentality and isn’t afraid to tackle the difficult problems

Useful Command Line Workflows

Search through history You’re trying to remember how to do something you did in the recent past, but can only remember generally what it’s about joe$ history | greg foo this takes all of your command line history, and pipes it to grep for any line that has the word “foo”. What you end up with, is a set of results like… 123 foo -bar 145 foo --name="bizz"

Useful Git Workflows

Squash Commits Sometimes you have made multiple commits as you go, but in reality the work would have made more sense as one commit. This is probably most common when you are fixing spelling errors, or backing out code that didn’t end up working out after all. Here’s a basic example of how to squash multiple commits together into a single one git rebase -i HEAD~3 The -i flag is for interactively rebasing.

Chief Architect

Summary Focuses on understanding the business needs of the company, and translates that into a consistent and forward-thinking vision for the tech team as a whole Expectations and Abilities Responsibilities Needs Considerations and Concerns Abilities: What are the basic types of task that they can excel in? What can you trust them to learn on their own? How are they able to handle situations of various severity? Responsibilities: What are the type of things that they need to take ownership of and not let fall to the floor?

Platform Architect

Summary Works closely with the Chief Architect to understand the tech vision for the company, provide feedback based on the platform of their focus, and help others understand and follow the companies tech vision Expectations and Abilities Responsibilities Needs Considerations and Concerns Abilities: What are the basic types of task that they can excel in? What can you trust them to learn on their own? How are they able to handle situations of various severity?

Architect

Summary Work with the architecture team to make sure they have the information they need to make wise choices for the company, work closely with engineers to surface the root of important problems before they become systemic Expectations and Abilities Responsibilities Needs Considerations and Concerns Abilities: What are the basic types of task that they can excel in? What can you trust them to learn on their own? How are they able to handle situations of various severity?

Lead Engineer

Summary Able to look at the whole project, and figure out how to best implement the vision from the architect team. Helps co-ordinate tasks between engineers so that the technical decisions are consistent throughout the project Expectations and Abilities Responsibilities Needs Considerations and Concerns Abilities: What are the basic types of task that they can excel in? What can you trust them to learn on their own? How are they able to handle situations of various severity?

Senior Engineer

Summary Able to to do all task, along with helping mentor the junior/mid engineers, and also see past the individual tasks they are given to accomplish the true objectives of the company Expectations and Abilities Responsibilities Needs Considerations and Concerns Abilities: What are the basic types of task that they can excel in? What can you trust them to learn on their own? How are they able to handle situations of various severity?

Mid Engineer

Summary A capabale engineer that has a good understanding of the necessary technologies and how to accomplish 95% of the tasks given to them. Expectations and Abilities Responsibilities Needs Considerations and Concerns Abilities: What are the basic types of task that they can excel in? What can you trust them to learn on their own? How are they able to handle situations of various severity? Responsibilities: What are the type of things that they need to take ownership of and not let fall to the floor?

Junior Engineer

Summary Able to do basic tasks, and is familiar with the necessary technologies, but frequently needs steps explained and laid out for them. Expectations and Abilities Responsibilities Needs Considerations and Concerns Abilities: What are the basic types of task that they can excel in? What can you trust them to learn on their own? How are they able to handle situations of various severity? Responsibilities: What are the type of things that they need to take ownership of and not let fall to the floor?

React Context Api

The React context api is a simple messaging system similar in concept to the Publish/Subscribe pattern. It has three main parts you need to implement to use it: Context, Provider, and Consumer Context: the store of value. Also where the Provider and Consumer come from Provider: the publisher/emitter of the value aka the source Consumer: the subscriber/listener for the value to be received to aka the destination What about Redux?

Resume