I really enjoy the start of a project. That is when we get to decide on what technology we are going to use. When I became a Lead Application Developer back in early 2014 I went to a team who was about to start up a new project. It was a very exciting time. This was the first project at Farm Credit Services of America I was going to be the Lead Application Developer on. This was the first time I got to provide technical guidance to a group of developers.
At the start of the project the team decided (with a lot of input from me) we would be using:
- ASP.NET MVC, Bootstrap, and AngularJS (1.x) for the UI
- ASP.NET WebApi using Microsoft SQL Server for the back-end
- Quartz.NET through a windows service for scheduled tasks
The project is still going strong. But as time has gone by new technology has come out. One of the developers on my team really wanted us to start using TypeScript. Back when we started the project I was very hesitant about TypeScript as were the other developers on the team. It wasn't until Visual Studio 2013 Update 2 that it became a first class programming language, and that was three months after we started our project. In addition, we were already learning AngularJS and starting to use RESTful services for the first time, adding in TypeScript was asking a lot.
Flash forward to now. There are many, many benefits to TypeScript. Everyone on the team agreed it looked very promising.
Despite the advantages, we didn't adopt TypeScript.
It is not like I am an ogre and just said no. I brought it to other developers so we could discuss it. In the end it came down to time and money. Each time technology is introduced there are several considerations. It wasn't until I became a Lead Application Developer that really I shifted my thinking.
- How long to learn TypeScript
- How many bugs will be added because of TypeScript and our lack of understanding it
- Business reason for adopting TypeScript
- Do builds need to be updated
- Impact of the change, small, medium, large. Are we changing something core to the project?
Each technology adoption has a cost. When the cost is very high, there has to be a very compelling business case to make the conversion. I can't walk up to my business owner and ask for us to stop developing for two weeks for initial development and another two weeks to handle any bugs to convert over to TypeScript without an extremely compelling case. I'm 99% sure she will laugh in my face. And maybe punch me in the arm.
Side Note: The developer who proposed TypeScript did want us to convert the entire site over. He was proposing a more pragmatic approach. This was an extreme example.
The project is going full steam ahead. Deadlines and expectations have been set. We have been very cautious about implement new technology into the project. If there is a compelling business case or the technology solves a major problem, absolutely bring it in. But we have to weigh the costs with each decision. And with a large application those costs can grow.
In addition to all of that, one of my leadership philosophies is as a lead dev I should know as much of the ins and outs of the technology being used in the applications I support as possible. There is no excuse for telling a developer on my team I don't know how something works.
Side Note: I picked up this leadership philosophy after reading Major Richard Winter's book about his time leading Easy Company, 2nd Battalion, 506 PIR, 101st Airborne Division. This was the same group of men who were made famous in the HBO miniseries Band of Brothers.
I have been hyper-focused on the project and on the existing technology of the project. There is a downside to this way of thinking. It was right around when AngularJS 2 came out that I realized I have been missing out on some really cool stuff that has come down the pike.
It was almost like turning on the radio after a couple of years and realizing I don't know any of the top 40 hits or artists. Suddenly all the music I listened to can only be heard on the classic rock and/or oldies station. I'm only in my 30s! How did that happen so quickly?
What to do?
I can't start introducing this stuff into my project. How can I work on something interesting?
The best way to learn new technology is to work on a project. Because of my time constraints at work I don't time to do it there. So my plan has become to create a side project. In the coming months I will be working on a project that desire to learn. I am focusing on learning the most popular technology. This list is, but not limited to:
Some of these technologies are not new to this world, but they are new to me. I am aware of them but I really want to dive in and start learning the ins and outs. I'm excited. I can't wait to start.