Welcome

You have reached the blog of Keith Elder. Thank you for visiting! Feel free to click the twitter icon to the right and follow me on twitter.

Meet Quicken Loans Intern Waleed Johnson, Future Mayor of Detroit

Posted by Keith Elder | Posted in .Net, Asp.Net, JabbR, Programming, Quicken Loans, SignalR | Posted on 29-07-2013

5

 

image

 

Meet Waleed (pictured above) sitting at one of the many workstations he has enjoyed this summer. This is Waleed’s second year interning with us at Quicken Loans and I am so happy Waleed joined us again this year. Because he’s spent so much time with us as a team member I wanted to do something memorable for Waleed. He has worked side by side our team and I’ve gotten to know what an extraordinary young man he is. Given that I thought I’d document his journey with us so he’d have something to look back on over the years to remember.

Waleed goes to Notre Dame but don’t let his Irish ties fool you as he lives and breathes Detroit (even his twitter handle is @detroitpride313). I remember reading his resume for the first time and he listed several community service events he was apart of in Detroit. This really caught my eye. Who was this young kid that loved Detroit so much that he was out volunteering at a young age?

When you first meet Waleed you probably think he plays basketball because of his tall stature, but you’d be mistaken as he’s learning how to write software, C# & .NET to be specific, but also open source software. I recently sent Waleed some questions about his internship at Quicken Loans and here is what he had to say.

Where are you from?

I am a proud resident of the East Side of Detroit, where I have lived essentially my whole life. Unfortunately, I was born in Long Beach, California where I lived for a year until my father passed away so I cannot claim I was born here. After my father passed away my mother—who was born and raised in Detroit—moved back to Detroit. I have nothing against Long Beach, but I am a proud lifelong Detroiter who lives and breathes Detroit. I jokingly told my mom that giving birth to me in Long Beach was the only mistake she has ever made. If I could I would change my birth certificate, but although I was born in Long Beach I was “Made in Detroit.”

See I told you he loved Detroit! I think this really tells a lot about Waleed as a person because he’s lived in Detroit practically all of his life. Even though Detroit recently filed for bankruptcy Waleed still sees it for what it can be, not what it currently is. Each and every time I’ve shown Waleed something he’s taken to it and approaches things with a “glass is half full” mentality. Hearing Waleed talk about his Mother and how she raised him it is no wonder he has this outlook on life.

How did you choose computer science?

My first exposure to programming, and really the only exposure I had before college, was through making video games with a program called GameMaker. Although I did not originally enter school as a Computer Engineering major I really enjoyed that experience and I feel like it was in the back of my mind. I started my freshman year as an Electrical Engineering major, because I really liked the electrical circuits component of my high school physics class, but midway through I talked to my counselor and changed to Computer Engineering.  I told my counselor how I have always loved computers and how I was not really interested in all of the things that Electrical Engineers do and he recommended I switch to Computer Engineering. Computer Engineering has been a perfect fit because I still get to take some Electrical Engineering courses, but the majority of my classes are on programming, which I’ve really come to love.

Describe your first year intern experience at Quicken Loans

My first year experience was something I will never forget. I was excited because of the unique culture here and how the company really seems to care about the employees. However, the best thing about my first year was that it gave me a reality check about what it takes to succeed in this industry. I was oblivious to just how far behind I was before I came here last year. I thought that because I enjoyed my programming classes in school and did well in them that I would be fine in the real world, but I was definitely wrong. Once you gave me the skills assessment test last year that really showed me the large gap that exists between what is taught in school and what you need to know in the workplace and I will never forget that.

You are welcome Waleed and I am happy to read you *got it* as to why we did that skills assessment. If you take anything away from your internship I want it to be this:

Remember that no one can give you an education, you have to give it to yourself.

Many students don’t get this though. They think because they went to class that’s it. Walking into a classroom and only doing what the professor or teacher asks of you is only part of your education. Waleed, no matter where you wind up in life be a continuous learner. You’ll go further than the rest.

What’s the coolest thing about interning at Quicken Loans? (biggest coolest most fun perk)

There are many amazing perks you get as an employee of Quicken Loans such as discounts in places around the city, but the thing I think is coolest is the opportunity to work for a company that loves Detroit and is as committed to helping Detroit as I am. I love the fact that Quicken puts its money where its mouth is and is actively engaged with community service initiatives. Quicken did not just move into a building in Detroit when it came downtown in 2010: it became an active part of Detroit, and I love that. The pride of knowing that I work for a company that cares about and is making a difference in the community around it far exceeds any monetary benefit that I can receive here.

Did I mention that Waleed loves Detroit? He’s all in as you can see and this is great (more on this later though). I think I should also mention Waleed has won more prizes from our internal intern contests than I care to count. For those that don’t know we have an internal website that a couple of our team members, @johnbfair and @chrisroland, built just for interns called “D-Tour”. It turns interning at Quicken Loans into a game and is just one of the things that highlights our culture. For example, interns have to go out and visit or eat at certain places and then send a picture to twitter with a hash tag. By doing so points are added up and they win prizes. The week ending 6/23/2013 Waleed was in 6th place. Not bad considering we have 750 – 1,000 interns!

image

When you came to Quicken Loans, you didn’t have any .NET skills. Do you think colleges should be targeting .NET more? If so. Why?

Yes, I definitely think that colleges should be targeting .NET more. I really like .NET because it makes website and web application design simple and understandable through tools such as ASP.NET MVC. Additionally, .NET gives you access to powerful languages such as C# which has an amazing set of built in features such as LINQ, which allow you to spend more time on solving the problem at hand than you would with other languages where you have to focus on writing basic utility functions that are already included in the .NET languages. Finally, another great thing about using .NET is access to Visual Studio. Before coming to Quicken Loans all of the coding I had done was in C and C++ on Linux machines using simple text editors. The bottom line is a lot of the things I have learned in school are outdated and placing an emphasis on learning things that are actively being used in the industry would be more beneficial.

I couldn’t agree more with Waleed and this is why more colleges and universities need to be taking advantage of https://www.dreamspark.com/. Microsoft gives students access to all the same tools professionals are using in the workplace so it doesn’t cost the school or students anything to learn to build solutions on these technologies. We just need college professors to step  out of their comfort zone and learn a new platform. Teaching is learning so they have to learn it *first* before they can teach it, and that is the problem with adoption. But don’t let that stop you. Go sign up and continue your journey!

By the way if you are curious as to what Waleed has been working on these past summers he’s been working on an open source project called “JabbR”. JabbR is an Asp.Net real-time web chat tool that leverages a technology called SignalR, also an open source technology. A couple years ago as part of our innovation time myself and a couple other engineers forked JabbR and stood up an internal chat system with it. We added a bunch of features, made it work with active directory, pulled in our corporate pictures and tweaked a bunch of things.  It has been widely adopted internally. What Waleed has been working on is taking all the things we changed and he’s adding them back into JabbR via our fork over at https://github.com/QuickenLoans/JabbR.

Here is a screen shot of some of Waleed’s work where he’s adding active directory support into the admin screen. By default JabbR works by using Twitter, Facebook, Google or creating an account. We already have single sign-on working and everyone’s badge photos so requiring everyone to have to create those public accounts and update their own images just doesn’t make sense. When pushed out hopefully other companies will be able to take advantage of this feature as well.

image

I’ll note this isn’t a trivial change as it impacts lots of little things throughout the application and Waleed has done a great job of tracking them all down.

The big payout for Waleed is he now knows how to use Git for source control and will have something to point to later on that he contributed to. I think that is awesome. Great way to start a resume.

Quicken Loans recently became the #1 place in IT to work for. What are some things you can tell others that make it cool from an Intern perspective?

From the perspective of an Intern in the IT department I think that one of the biggest things that make Quicken Loans cool is the focus here on innovation. A great example of this is Bullet Time. Bullet Time occurs every Monday from 12pm until the end of the day. During that time you are free to work on projects that have value to the company, but are not part of your daily responsibilities with the whole purpose being encouraging innovation. Bullet Time allows you to learn about and experiment with new technologies, which is pretty cool. This is just one of the many examples that show how Quicken not only cares about business, but also cares about your development as an engineer. Another cool thing I have noticed is how the IT department lives up to the company saying “Obsessed with finding a better way.” If you are a developer that thinks something could be more efficient if it was written in say F# you are free to present that to your team leader. People here at Quicken are always trying to find a better way to do things and I think it is great that you do not have to be bound to do things a certain way because that is the way it has always been done.

In five years where do you hope to be?

In five years I would like to be an established Software Engineer living and working here in Detroit, hopefully for Quicken Loans. I would also like to be involved on some scale in investing in the city and I would likely be learning more about the Detroit City Council of which I intend to be a part at some point in my life.

Did I mention Waleed loves Detroit? During some other conversations I learned that Waleed’s ultimate goal would be to become Mayor of Detroit. That’s right. Mayor. I think that is awesome. I fully support him in this journey and others out there should as well. Why? Because you just won’t find a more honest, true moral compass, do the right thing kind of guy than Waleed. Detroit needs more young people like Waleed who want to see Detroit grow and see it for what it can be not what it currently is. Pictures are worth a thousand words but this one may be about 10,000 as it really shows where Waleed is headed. He drew this at Quicken Loans on one of our walls and it expresses precisely why he is going to be the Mayor of Detroit one day.

image

You can follow Waleed’s journey at Quicken Loans and then his journey to becoming Mayor of Detroit via twitter at https://twitter.com/detroitpride313.

If you are interested in interning at Quicken Loans you can read more about it here: http://www.quickenloanscareers.com/about/internship-program/.

If you are interested in working at Quicken Loans or refinancing or purchasing a home contact me here http://keithelder.net/contact.

VirtualBox Hangs During Installation – Close DropBox

Posted by Keith Elder | Posted in Programming | Posted on 22-01-2011

25

I spent several days off and on trying to get VirtualBox to install (version 4.0.2 to be exact).  After numerous things I started shutting down everything to see what was going on.  Turns out after I shut down DropBox the install proceeded.  Up until that point it would only get to about 85% of the way through installation and would disconnect from my local network. 

Hopefully this will help someone down the road.  Oh and if you have any other installation problems, please don’t ask for help here as I am sure I do not know the answer. 

The Best Code I’ve Seen In A Long Time

Posted by Keith Elder | Posted in Programming | Posted on 09-02-2009

0

One of my co-workers found the code snippet below in some code he was working in today.  It is one of those hidden gems you run across in source code from time to time.  This one is probably at least 3-4 years old.  I’ll sleep better tonight knowing Brad felt compelled to include me in his source code. 

image

Building the “Good Enough” Framework

Posted by Keith Elder | Posted in .Net, Programming | Posted on 09-09-2008

5

At DevLink a few weeks we held open spaces on the theme of “good enough”.  I started a topic on building internal application frameworks and re-usable code bases, thus the title.  This was an interesting topic to me because my role at work the last several months has been to create this very thing.  It is an interesting hat to wear because instead of a team’s clients being entrenched in the business, the clients are fellow developers.  The question is how do you go about building this type of framework and what are the things you should watch out for as you go down this path.  Below are notes taken from this open space session along with other guidance.  Please feel free to continue this conversation here and within your own blogs. 

Know What You Are Building

It became obviously very quickly during our open space that developers were scared of the term “framework” as we discussed the topic.  As several stated, they’ve been forced to use various libraries and frameworks at previous employers and they’ve found them to get more in the way than to help.  If you are tasked with building an internal framework like this it is important there are clear goals in mind.  Maybe you don’t need a framework, maybe all you need are reusable services or libraries of utilities. 

The main goal of whatever you call these libraries should be about keeping things DRY (don’t repeat yourself).  If developers are having to repeat themselves then work with them to keep things DRY so other developers can stay DRY.

To save the confusion I’ll refer to the framework / reusable code as “the libraries” from now on.

Know What Not To Do

It is great to know what to do but knowing what not to do is just as important.  These gems of knowledge come from those that have gone before you or those that have tried to use what others have created.  Seek those people out and pick their brains to learn what not to do.  I’ll touch on some of these as we progress further.

Don’t Put Items in One DLL

Speaking of knowing what not to do, one of the first items the group brought up was to make sure not to put everything in one DLL.  This gem of knowledge boils down to separation of concerns.  Imagine if the .Net framework was one large DLL.  Yeah, not good.  The same principle applies here as well. 

Make it Discoverable and KIS (keep it simple)

The term discoverable in this context means will developers be able to use your libraries using intuition and Intellisense within the IDE.  For example, let’s say you have a method in one of your libraries that validates a phone number.  Developers should be able to find that method without much effort and thought and without even knowing if it exists or not.  They should be able to just discover that it is there. 

Of course if things are kept simple this helps with discovery.  These two go hand in hand. 

Get Architects Involved

If you are tasked with building a type of system like this it is important to get your architects involved early and continuously.  Architects should be driving features into these libraries.  Architects should know problems developers face and identify those situations where developers are repeating themselves.  Once identified they should be communicated to those managing these libraries and or even contributed by them. 

Use Architects as your eyes and ears.

Treat it as a Third Party Vendor

One very important mind set everyone (the team writing the code and those using it) must have about these libraries is they should be treated as any third party vendor.  This means a couple of things.  One it means these should be updated, deployed and managed as any third party vendor.  Developers shouldn’t be able to just grab a DLL and throw it into project they are working on.  Not being able to manage the versions applications are using can result in a nightmarish situation.  Secondly, it means the developers using these libraries cannot haphazardly contribute to the source just as they cannot contribute to a vendor’s code base.  That isn’t to say they can’t contribute, as a matter of fact they should be the driving force behind new features.  Most all vendors that build tools for developers will tell you they get their features from their customers. 

The third thing this forces everyone think about is breaking APIs.   Imagine for a second that vendors changed their APIs on a whim and with each release.  Can you imagine how much of an impact that would that have on your organization?  The answer is  A LOT.  The same thing applies for these libraries.  Once they are out there and used, changing an API has drastic consequences and can be costly for organizations to redeploy and fix applications.  As one of the attendees that works for a company that produces tools for developers said, “Changing an API should require executive decision.”.  It is ultimately an executive decision to change APIs because of the time and cost involved.  This also segues nicely into the next topic.

Do it Right the First Time

Tying into never breaking the APIs, this is important enough to get it’s own heading.  When building reusable libraries it is extremely important things are done right the first time.  If this means spending an extra day to research a new pattern do it.  If it means writing 10 additional unit tests do it.  If it means building sample applications do it.  If it means holding up a release to make sure other developers are comfortable with it do it. 

The strict nature of these libraries must be adhered to because of the impact of changes.  It doesn’t mean there won’t be bugs.  There will be bugs but your deployment scenario should handle that gracefully.  The .Net framework already allows for this, just be sure you take advantage of it.

Use Senior Engineers, They Are the Gate Keepers

Let’s see, don’t break the API and do it right the first time.  Hmm, that sounds like a job for a Jr. Level engineer no?  This should go without saying but in order to achieve these goals, the easiest way to do it is to use senior level engineers.  Thus, if you were thinking of using Interns to write these libraries, think again.

These senior engineers also should serve as the gate keepers for things that get into the framework. 

The Libraries Should Evolve

If you are starting out to build a framework, more than likely it will fail and not meet the needs of your developers.  Libraries should evolve over time.  Going back to the third party vendor rules, vendors typically don’t add things into their tools unless asked.  These libraries should be the same way.  In other words, don’t add something just because it is cool.  If someone didn’t ask for it, don’t add it (YAGNI – you ain’t gonna need it).  Let the libraries evolve over time and you’ll have a better product in the end.

Use Baked Code

If you are a gate keeper of these libraries don’t take just any contribution someone sends your way.  There will be obvious cases where this doesn’t apply, but it is safe to say that code needs to bake before being considered.  The term baked refers to code being used in production or maybe in several projects.  Using baked code helps to make sure the code is needed and wasn’t a one off scenario.  It also helps to make sure the code works in broader scenarios rather than just where it was originally written. 

Adamantly Adopt Best Development Practices

When building application frameworks and libraries like this it is extremely important best development practices are followed.  These practices help to mitigate risk, bugs, defects, and focus on providing the quickest value.  If you are using Senior Engineers, more than likely these practices will already be followed and adhered to.  Here are some base guidelines in no particular order.  I won’t go into detail on each one as I think they have been covered in other conversations better.

  • Test Driven Development
  • Build To Interfaces
  • Continuous Integration – One thing to note is not only do CI for your builds, but also try to get other projects to do CI with your libraries
  • Automate Deployment
  • Strongly consider using Agile methodologies

These are well known and established best practices but I want to harp on the words “adamantly adopt”.  Using one out of this short list of practices is not enough.  They should ALL be adopted.

Continuing The Conversation

This was a great open space and it brought to light a lot of things that need to be considered when developing these types of libraries.  I welcome anyone to contribute tips and continue this conversation.

My Pathway to Software Development

Posted by Keith Elder | Posted in Programming | Posted on 15-06-2008

0

Michael Eaton threw the gauntlet at me last week wondering why I hadn’t blogged about how I got into software development.  Here are the series of questions he proposed and the answers.

How old were you when you started programming?

I attempted to program a Timex Sinclair 1000 that I got for Christmas one year.  I can’t even remember how old I was, maybe 9 I guess.  I spent countless hours trying to figure that thing out but it just didn’t sink in.  In 8th grade our Math teacher started teaching some of us Basic.

How did you get started in programming?

In college I was a hardware junkie.  I enjoyed building computers, tearing them apart, upgrading, etc.  The infatuation of building and upgrading computers at first was a hobby.  As time passed I started upgrading friends computers, family, etc.  One day I was in the tech department at the college trying to get something fixed with my school account.  There was a guy named Greg who ran the IT department for the school standing in the office.  I didn’t know him and he didn’t know me but he mentioned something about upgrading a professor’s computer to someone else in the office.  I over heard and jumped in.  I told him he should look at a different part, I had had trouble with the one he was going to use.  We started talking and that was the moment in my life that opened the flood gates into the Information Technology world.  It turns out Greg was hiring and needed help.  Any chance to work and learn I was in.  He interviewed me (which was basically us sitting around talking about IRQs, Ports, modems, video cards, drivers, etc) and I got the job.  The job at the tech department for the college was split.  Helpdesk in the morning, and then hardware upgrades in the evening.  It was the time on the Help Desk where I got introduced into programming.  A lot of the guys on the team had spent a lot of time writing scripts to automate things.  The scripts were shell scripts to repair people’s accounts, etc.  It was the exposure of telling a computer what to do to make life easier that got me hooked. 

Sometime during my junior year of college my infatuation with computers had evolved into a full blown obsession.  I was a music major in college, a trombonist actually.  One day my trombone professor told me I should seriously consider getting a degree in computer science.  Everyone around me knew about my obsession with computers, including my professors.  I weighed my options and considered starting a degree in CompSci but there were too many road blocks from student loans, scheduling (certain classes are only offered at certain times and you need them to graduate), etc.  Thus I decided to opt for a minor and take summer classes.  By the way I never got to finish my minor due to student loan constraints.  But, I had learned enough to know that I was A) good at it B) loved the ever living heck out of it and C) knew I wasn’t going to stay in music very long after I graduated.

I was forced to graduate in the fall of ’96 since I had finished my music degree.  I say forced because student loans wouldn’t lend me any more money due to the number of hours I had accumulated.  So I got a job as a band director.  When I got my first real paycheck as a band director I went to the book store and grabbed up a bunch of books and started combing through them at night after work and on the weekends.  Six months later I got married and the wife and we moved to Ann Arbor, MI to get her educated at the University of Michigan.  Since my teacher’s salary was going to pay me through the summer, I had plenty of time to try to find a job in IT (which is really what I wanted).  That summer I found a job running the IT department of a small start up in Ann Arbor which landed me in a perfect place to spread my wings.

What was your first language?

My very first language was Basic.  It was taught to us in school by our Math teacher who was really into computers back then.  The school didn’t have an official computer curriculum, it was just something we did on the side. 

What was the first real program you wrote?

A really bad Perl shopping cart.

What languages have you used since you started programming?

Basic, Bash, Perl, Pascal, Python, PHP, JavaScript, C, C#  (Note:  I’ve played with countless others, but these are the ones I have written production code for over the years)

What was your first professional programming gig?

I was working for a hardware reseller who wanted to build an online store and presence.  The company is still in business today and the web site is still powered by all the back end processing that was written nearly 10 years ago.  The store cart has since been re-written but still has the a lot of the same characteristics that were originally done.  Check it out:  http://www.affordablecomputers.com/ 

If you knew then what you know now, would you have started programming?

Absolutely, and I would have created Yahoo!, Google, and countless other companies. 🙂

If there is one thing you learned along the way that you would tell new developers, what would it be?

Being a programmer is a life long learning experiment.  It is not something you go to school for, get out, get a job, and you are prepared for life.  I equate being a programmer to the same type of profession as a lawyer or a doctor.  The law is constantly changing and you certainly don’t want to hire a lawyer that isn’t up on the law.  Nor do you want a doctor operating on you with 30 year old technology.  Whoever succeeds in these professions has to understand they will be learning how to do their job for the rest of their life.

What’s the most fun you’ve ever had … programming?

Programming without deadlines or requirements.  I don’t classify working on a bug someone submits at work as fun.  Fun for me is sitting down and building something from scratch where I become the programmer, project manager, business analyst and architect.  The only limitation I have then is myself.