HTTP Location Header

I came across this blog post today about using the HTTP Location Header in REST API responses when creating a resource. I have been doing Web development now since 2008 and in all that time I have never actually seen anyone use this header on any of their endpoints.

That being said it makes a lot of sense, traditionally when I would create a new resource I would return the json for that object back in the response so the caller could pull the ID out of the object, but this seems like a better way to do it, as now you could just return your 200 like normal and set this header and not have to send the response body back when the caller knows what they just sent you.

So as is the purpose of this blog I share this partly just so I can refer to it myself to use in the future, but also to draw more attention to it for others as it seems like a great idea, and like the correct way to design your APIs. I also appreciated that they called it Polite HTTP API design, they are much better on their blog titles than I am, as that is a pretty good way to get some attention.

Bose QC-35 Product Review

Bose QC35 Box

Today I received my new Bose Quiet Comfort 35 headphones that I ordered, so I figured that I would do a review on them.

I have been a long time Bose Headphone user. It all started back in 2007. Sofi and I were about to fly out to Scotland to celebrate our wedding anniversary and I had recently received a small amount of inheritance money after the passing of a grand parent. Faced with an 8 hour flight to London (before we flew to Edinburgh) I was thinking man some noise cancelling headphones would be nice for the flight. So Sofi and I ran over to the Bose store at the mall in our area and bought 2 pairs of Bose Quiet Comfort 3 Headphones for our flight.  We quickly charged them until it was time to head to the airport. Previous to this I had never owned any premium headphones before, and I was immediately hooked. They were night and day better than anything I had ever used before. They cut out so much noise from the jet engines that I could actually play my iPod at a lower volume level that I would otherwise which lead to much more comfort when listening to music as well as much more comfort on the flight just having the headphones turned on with nothing playing. At that point I decided that these were the way to go going forward.

Fast forward a couple of years and Sofi knew how much I used my original headphones (I had replaced the earpieces on them a couple of times cause the leather wore out as well as buying a second battery and multiple cables), so she bought me a pair of Quiet Comfort 15 headphones to replace them for Fathers Day. Immediately I noticed the massive improvement in background noise cancellation, and these became my new go to headphones. I saw a couple of new models come out, but found no compelling reason to upgrade as these headphones outperformed anything that I had ever used, and were pretty comfortable (though I would say the QC3 were slightly more comfortable, but at less performance).

Then Apple got rid of their headphone jack on the iPhone 7. At that point I knew that whenever I decided to upgrade my iPhone 6, I would need to upgrade my headphones as well as my QC-15s were no longer going to get the job done. After seeing Apple’s iPhone X announcement I decided that it is time to upgrade my phone, which meant that it is time to upgrade my headphones. I decided to go with the Bose QC-35’s based on how happy I had been with my previous 2 Bose headphones and they looked like a compelling Bluetooth offering.

The first thing I will say is I am aware of the accusations of Bose spying on their users, but the beauty of these headphones is, you don’t need the stupid Bose app anyway so don’t bother downloading it. I turned my Head Phones on and then went to my BlueTooth settings on my iPhone 6 (iOS 10.3.3) and the headphones showed up in the list and I was quickly able to pair them. My phone asked if I wanted the Bose app, but I declined it.

After I had the headphones paired with my phone I tried to pair them with my MacBook Pro. I was able to do so in Sierra under the System Preferences / Bluetooth area. The Bose QC-35 headphones will pair with up to 2 devices at the same time. So I have mine connected to my laptop and phone all at once. However it will only stream audio from 1 device at a time. So if I have music playing on my phone I won’t hear any of the audio from my laptop and Vice Versa. In a perfect world I would love to see it mix the audio streams. Can you imagine how cool it would be to havve some cool song playing quietly in the background of a phone call. It would be like your own sound track to a conversation. The documentation says that they headphones will remember up to 8 devices that it pairs with.

The performance of the headphones is out of this world. They have really advanced the noise cancelling abilities since the QC-15 time frame. They also feel lighter weight when I am wearing them and feel more comfortable. The external noise is super quiet and the headphones work to take phone calls. I could see myself using them in the car just to take phone calls. I probably wouldn’t wear them in the neighborhood when I am out walking the dog though as the noise cancelling is so good I would feel a little bit too unaware of my surroundings.

I am still unsure of battery life since I just got them and I haven’t charged them yet, but Bose claims up to 20 hours on Bluetooth. When you first power them up they tell you what the percentage of battery life there is as well as which devices they are connecting to through the ear piece. They include a wire as well in case you are on an airplane and want to plug into the planes entertainment system. I would say the only knock I have against them so far other than their app (which I avoided) is that the included charger is a USB to micro USB cable. Given my MacBook Pro is all USB C it would be nice if they included a second cable for that option too, but I guess when they headphones were released a year ago, USB C was really just coming onto the scene. All in all I would recommend them, I suspect that I will get many years of use out of these headphones as I have my previous 2 pairs of Bose QuietComfort Headphones.

Microservices as the way to onboard a new engineer

Microservice onboarding…

It has been a crazy couple of months since I took my new role. I have had so much new stuff to learn I haven’t been making a lot of time for other technical pursuits in my spare time. But that being said I am on paternity leave right now, so I figured it was a good time to sit back and reflect on my first couple of months. Similar to Choose the first project that I was asked to work on was to write a new Micro Service. This got me to thinking maybe this is the way to on board a senior engineer.

What does it tell the company about he new employee

First it quickly shows you if the person you hired can actually do what they say. If they can’t stand up a new app for a small service but have sold themselves as senior level you probably want to find that information out as quickly as possible. I wish this wasn’t a reason for doing something, but unfortunately there are a lot of people in our industry who really play buzzword bingo on their resumes, but their actual technical skills don’t live up to what they sell them as.

It is also going to show the new company how adaptable is this person. How quickly can they learn the new build environment, and follow the new companies coding standards and processes.

It gives the company a really engaged engineer as they start out doing what is considered in the product development world the best kind of work which is new development from scratch.

Benefits for the employee

You start out on green field which gives you a bit of time to learn the new system architecture. It also keeps the excitement and engagement level high as everyone loves knocking out a new project. As opposed to traditionally when you are fixing bugs to learn a code base, it is a great way to get into the guts of the code, but it is often work that isn’t nearly as fun, so it is sort of a taking your medicine approach to get up to speed. It is effective, but not always enjoyable.

You learn the new build and deployment environment. Going into my role I was used to doing everything as a maven build and we were deploying to Amazon EC2 containers. In my new role it is gradle multi module builds and docker containers running under Amazon’s Elastic Container Service. We are also doing continuous deployment which has been new and exciting. Most companies I have worked with in the last 10 years have been doing continuous integration, but I hadn’t actually seen someone make it all the way to the continuous delivery route, and it is an amazing thing to see. We also have a different development flow as a result doing Trunk Based Development as opposed to at Choose where we did GitFlow for our development model.

Where wouldn’t this work

It goes without saying you need a couple of things to take this approach. If you are developing a monolith and not a micro service architecture you can’t take this approach and are probably stuck with the traditional onboarding models. Also you would need a certain level of seniority to really have this be successful. If you were bring a junior or mid level engineer on board and they probably will have never stood up a production app before and will be used to working on an app that someone else boot strapped. So to take this approach with an employee like that you would need to provide much more guidance and mentoring for the employee so that they don’t get overwhelmed and frustrated with the task.

All in all I hope that future roles I take start out this interesting as it is definitely a fun stage in my career to get to do all these fun and challenging projects from the beginning.

Last Choose post

I haven’t had a chance to update my blog lately as I have been so busy in my new role. That being said I did want to highlight the writing of some of my former coworkers as I think they are writing some great stuff. First check out Kevin Stephen’s blog over at: http://kevindstevens.com/ Kevin is talking about Technology, Growth, and Venture Capital all topics that I find interesting. Also our former Chief Revenue Officer John Tough is blogging over at: http://johntough.com/ John has provided some great stories about the whole acquisition process and even as an employee I learned things that I wasn’t aware of at the time, so I have really enjoyed his writing. My final reading recommendation is Jonathan Crowder over at: https://medium.com/@jonathan.m.crowder He is also writing some great business content. Though JC you really need to host on your own site and not on medium. Own your content man! Anyway check out their posts there is some good stuff there. Going forward I have been playing around with some new stuff in my new role and I plan on discussing some of that going forward.

My Last Day at Choose

Today was my last day at choose. What a ride it has been. Thus far it has been my favorite job in my entire career. The quality of the team was top notch and I can’t believe how much software we shipped. The turn around was epic and we just had a ton of fun at work. We took a couple of pictures from our last happy hour.

What an amazing 14 months. And now on to the next thing. I will be taking a new role as a Software Architect to help out a new company migrate from a legacy platform to the world of microservices built on Spring Boot and I am super excited for the opportunity. I know I will be applying what I learned in my current role a lot as we learned a ton going down that road and hopefully I can use that to increase the velocity at which we ship code even more in my new role.

Stories about the acquisition

When I posted my previous post, I left out most of the details about our acquisition as I was not sure what information was public and what wasn’t. Now that there has been some press around the acquisition I figured I would share some of it to provide some details.

First off we had a story in Fortune about Red Ventures acquiring us. After reading that story, I found another story trending on linked in from Green Tech Media. I liked that the Green Tech story had more detail, and since I can’t really talk about anything that isn’t public it is nice to see more details in a public forum.

Finally tonight on Linked In I saw a post by one of our VC’s David Mount. I really enjoyed his point and appreciated his kind comments on the team as it really was an amazing team to work with on this turn around and successful exit.

Wow! We were acquired!

Wow! That was unexpected after my last post talking about my first year, but we found out on Monday that we were acquired. It is the goal of every startup to be acquired so I am proud to have taken part in a huge turn around of a business to have made that possible. We took a startup company that was losing money when I joined to one that was profitable today, and I was able to work with the strongest engineering team that I have ever worked with in my career which was hugely rewarding.

Since last September we were able to grow conversion by 25% and mobile enrollments by 40%. We are doing 100,000 enrollments a year and were able to build out the largest online B2B marketplace out there.

How were we able to do such a remarkable turnaround? We focused on two metrics conversions and revenue, and drove hard to pick off all the low hanging fruit and grow them. We redesigned our checkout funnels which allowed us to drastically lower error rates which allowed us to save 1/3 of all customer enrollments that previously would be lost due to errors and usability issues in the funnels. We streamlined and simplified our mobile experience resulting in many more mobile enrollments.

The other project we did which I was proud of was our 3rd microservice which I alluded to on the blog but hadn’t discussed in any depth. We started it back in January. It is a service to reconcile payments from our suppliers for all of the customer leads that we deliver to them. As far as we know it is the only automated system like this in the industry. WE could consume their reports and find which leads we hadn’t been paid for yet which results in much more revenue for the company. On top of that data we had begun to build a consumer facing dashboard so that they would be able to get status on their current enrollment and previous enrollments as well as renew their plan when their contract was coming to an end.

All in all, what a year. It has been a dramatic year of change and really a great year for me. The question now of course is what next. The acquiring company hasn’t yet made clear their plans for us so I am exploring my options now and figuring out what the next step for me in my journey will be. I am sad that the current role is changing as the team has just been so amazing I had hoped we would spend at least another year really ramping up the revenue before the board sold us just because I think we could have built some really neat things.

Reflecting on my first year at Choose

My First Year

I just celebrated my one year anniversary in my current position, which is a great opportunity to look back on the last year of work. This role has been unlike any other that I have had in my career starting from the interview.

When I was interviewing with my boss and we were discussing what I did in my previous role, I discussed the architecture that we had built. It was a traditional Spring application that was a monolith. It was a very well designed layered architecture. We were doing a mix Trunk Based Development and feature branch development depending on how large and invasive the feature was using git as the repository. We had a great unit test suite and did weekly deployments. We tried to commit early to master and use feature toggles to role out new features and mitigate risk. They were still largely a waterfall model though, just a company that moved faster on waterfall than any I have ever worked with.

In my interview I mentioned that what I was really interested in doing which was rolling out a micro service based architecture built around spring boot. It seemed to me at the time to be a great way to increase development velocity, and it allows experimenting with different patterns and techniques inside of a new project without necessarily committing to that in all of the code across the company.  To my bosses credit he was also extremely excited about the concept and I was informed a few hours later that they wanted to move forward with an offer. This was the first time in my career that I went into an interview with a strong vision of what I wanted to do as opposed to just being interested in learning more about a company to see if it was the right fit for me. I think this is something that I would carry forward into the future as it has had great results for me.

I started in my new role and the first week was getting my development environment setup and learning the new process. We use agile which I had not yet done in my career, and we use the gitflow model. After 5 days on the job I was given my first real project. I was going to write the first micro service that they had done in Spring Boot the way I had outlined my interest in my interview. And we would have 2 sprints to complete it. I was given the opportunity to make all the design decisions and implement the service and the rest of the team implemented the code to integrate with my service from the main application.

I have noticed as you move up in your career you are handed more responsibility much sooner when you join a new company. When I joined people answers I had about a month of doing bug fixes on various parts of the software before I was thrown on a major 3 month project to roll out a huge game changing feature at the company (mobile support for pre screening questions in our application tracking system). This time around it was doing a whole new Authentication and Authorization service 5 days into the job and designing the initial architecture that we were going to use to roll these services out in the future. Nothing is as exciting as green field development especially when you get to call all the architectural shots. It was really an amazing project all around as it gave me a chance to prove myself right away that I could walk the talk so to speak, and it is exciting work. You are already energized joining a new role and getting to implement your vision of how to take things forward from nearly day one does even more to let you know that you have made the right move in your career.

As the year has gone on we rolled out 2 more services with a different engineer leading each one. We build and expand on our architecture with the requirements of each new service that we roll out. Another unique thing about this opportunity for me has been getting to look into the business model and begin to understand how the business works. I have been involved in startup type work for much of my career, but I have never gotten to see a working business model up close. That has been very refreshing. Our product people have an amazing understanding of the business and how we the engineers can build new features to drive more value to the business. If you ever want to feel rewarded implement some new feature in a system and have the business come back to you and tell you how much revenue it brought in during the previous quarter. Typically software engineers get very few opportunities to actually hear a dollars and cents version of the kind of value that you are creating, which is a shame as it is very empowering. Some day I may want to try a CTO type role as I love technology leadership and engineering. I don’t feel like you can move into that type of role until you can sort of bridge the technology side with the business side, so I am fortunate to work with such a talented business team that doesn’t mind answering my simple questions related to the business.

I guess in conclusion the biggest take away for me is if you are considering a different role, think about how you could bring value to the business if you are given that role and articulate during the interview the value that you can provide. It may just end up being the most interesting role of your career.

Lent and Easter fasting recap

As we are at the end of the Easter Octive I realized that I have been remiss to give an update on how the intermittent fasting went for Lent. From Ash Wednesday through Holy Saturday I only ate between the hours of 6pm and 10pm.

Overall I found that after a day or 2 your body adapts and you don’t really get hungry during the day. The exception to this was Saturdays. Since Catholic’s can’t eat meat on Friday’s during lent the food that I consumed did not keep me as full. Additionally I have more time on Saturdays and I think there is a natural habit to munch sometimes when bored or just hanging around the house.

While I found the practice not too difficult by Holy Week I was ready to go back to normal because 5 or 6 weeks of that was enough for me. One of the interesting things that I did discover is that I could pretty much eat whatever I wanted in that period, high carb, low carb, fat, protein, whatever and maintain my weight. The trend for my weight overall doing that was slightly down but at a much slower pace than when I was doing the slow carb diet.

So the question now is what to do going forward. I think now that my Easter Feast week is over I am going to go back to slow carb tomorrow. This week probably won’t be a great week for it given that it is barrel week at my favorite bar so there is going to be plenty of beer consumed which doesn’t fit the diet, but I will do the diet the rest of the time. Since January 9th when I began focusing on my diet I have lost 30 pounds so I have another 21 pounds to go to reach my goal weight that I am hoping to hit by my birthday in July.

As for this blog I have been severely neglecting it this spring due to just being busy in general with work and family life and then not feeling I have the energy to put in a decent post. I am starting to kick around a couple of ideas for more technical posts again. And hope to come up with at least one nice tech deep dive in the next month or 2.

Bring on the intermittent fasting

Lent

Lent is here and I decided to go with the intermittent fasting that I had been considering. First as previously mentioned, I was doing the slow carb diet. Between January 9th and March 1st I went from 251 pounds to 228.8 pounds. And that wasn’t adhering too closely to the diet. For example the diet has you eating smaller meals every three hours and that is something I struggle with. It doesn’t really work for me. So I was just eating 2-4 meals a day depending on the day. At the beginning close to 4 and by the end just 2. Also in that time frame, we celebrated my wife’s birthday, our wedding anniversary, and my daughter’s birthday all of which involved breaking the diet to some degree. I think if I had stuck close to the diet I could have lost that weight in 6 weeks based on the rate that I was losing early on before family obligations came into play. But at the end of the day if you can’t cheat here and there to celebrate the important things in life, that is no way to live. And Slow Carb is definitely a system that if you stick to it most of the time will work for you even with the built in cheats.

As I mentioned in the last post more and more we see studies coming out about the health benefits of fasting. I experimented with my 72 hour fast last year and documented the results. This year I have decided to go ahead with the intermittent fasting. There are tons of different fasting programs out there like the 5:2 diet. I have also seen an argument for every other day fasting. There is fasting built around your Circadian Rhythm. So just picking the right fasting program itself sounds crazy enough. At the end I also need to see what fits into my life. I decided to try to do limited fasting around 1 meal a day. My plan is to only consume calories between 6pm and 10pm at night. So I can have supper with my family every day. While the Circadian fasting might be more effective this should be good enough to test it out and see how I feel. I am still drinking black coffee in the morning since this doesn’t seem to break the fast and in the first two days that has kept me satisfied until supper time. I will report back with an update after Easter on any weight loss and how I felt throughout the fast.