Nov 202015
 

Starbucks

As I sit in the corner of this Starbucks, I am doing something that I haven’t had the chance to sit down and do for a while.  I’m taking a minute to reflect.  A moment to sit still, drink a venti white chocolate mocha and contemplate where I have been over the past year and a moment still to ponder the future.  You see, after a year-and-a-half of work on the coolest project of my life, the core development team was cut loose yesterday – and that’s okay.  It’s okay because projects come and go.  It’s okay because the skills I picked up are mine now – forever.  It’s okay because the team I worked with is still cohesive and is actively working to help each other move on to new opportunities.  I’ve made friends.  I’ve made money.  It’s all good.

Flash back to July 2014… In a moderately trendy office in a renovated old factory, I sat with the CTO with the sound of ping pong clacking in the background.  I expressed my concerns about the viability and stability of a startup, but I was sold, not on the company, but the idea of the job when he promised that in coming there, I would be miles ahead in technology and would be moved from the middle to the forefront of the technological curve.  He was right.

It is insane what our team accomplished since July 2014.  We wrote, tore down, refactored, debated, and rebuilt.  We turned up servers, ran up an impressive Azure bill, and moved the ball down the field.  We changed storage no less than three times.  We tore out the unscalable and made it gorgeously asynchronous and modularly distributable.  Aided largely by a genius-level CTO, the team moved to a lean, functional-code writing set of ninjas in a time-frame that would both impress and amaze insiders and (I am completely confident) would stand up to any Silicon Valley team anywhere, any day.

And the team!  What a great set of people.  Sitting literally feet away from your nearest colleague in open-format seating for days on end has a way of coalescing a team.  With few exceptions (the exceptions were exiled), this group of once disparate developers came together to build something pretty amazing.  I have never been in such a collaborative environment and I attribute the successes that we had to the selfless personalities that were around those tables.  Even now that we aren’t directly influencing the technology, our collective spirit is still moving as we are coordinating our efforts to help one another turn the page to the next adventure.

And that next adventure.  What will it be?  I’m not sure yet – and that’s okay.  It’s okay because I personally have grown in ways that I didn’t know were possible.  It’s okay because I am part of a team that is still collaborating to solve the next problem, finding our next gig.  It’s a positive future and I can’t wait to see what happens next.

In continuing with the theme of this week, it looks like Starbucks is the next company in my life that wants their chair back, so I’ll be moving on now. So, to the past, the good, the not-so-good, the fun, the learning, the toil, and the now legendary Christmas refactor of 2014, I say so long, and thanks for all the fish.

Jul 132015
 
Knoxville, Tennessee

Knoxville, Tennessee

I just got back from a great tech conference in Knoxville, Tennessee called “CodeStock”.  It was a 2 day event where software developers, technologists, and entrepreneurs gathered to listen, discuss, and share information about the latest in software development and software related technologies.

The first day was a treat as I got to hear Scott Hanselman speak for a second time.  For those of you who might not know, Scott is a developer/technologist/speaker/evangelist for Microsoft.  His main focus is on the web.  His talk was hilarious (as usual) as it was full of humor that only a room of 900 software nerds would understand.  He discussed how the web has grown, how javascript is the assembly language of the web, and distributed computing.  I read his blog over at hanselman.com, his podcasts at hanselminutes.com, and some of his Azure Friday talks.  Suffice it to say, I’m a fanboy and I would recommend his work to any of you, especially those of you who work in the .NET/ASP.NET stack.

Scott Hanselman at CodeStock 2015

Scott Hanselman at CodeStock 2015

There were many great talks, but the hottest topics this year were DDD, functional programming, and AngularJS.  The amount of interest that was shown in the DDD and AngularJS sessions was as I would have expected, but the functional programming talks were surprisingly well attended.  The ones that I went to were filled to capacity+.  As for me, I went into the functional talks a bit skeptical.  I thought, functional is interesting, but is F# really production worthy?  Is it worth the OOP to FP paradigm shift?  Is F# syntactically rich enough to provide the functionality that I need to make products work and work well?  Aaron Erickson provided some very compelling arguments in favor of a shift or, at minimum, consideration of F#.  When Aaron asked, “How much code do you write that does a cool algorithm compared to code you wrote to make the framework work?”, he had me.  If there is a less verbose way to get things done, it is worth a look.  If it isn’t worth investigation, perhaps we should just give up and revert to COBOL (as I shudder at the very thought).

“How much code do you write that does a cool algorithm compared to code you wrote to make the framework work?”- Aaron Erickson

F# is interesting and I hope to post more on it later.  The amount of attendees in the functional programming sessions seemed to indicate that functional is on its way back in some form or fashion.

Along with the sessions on functional programming, I was able to go to some really great talks on C# 6, vNext, and JWT Authentication.  There was also a talk by David Mohundro entitled “A Brief History of .NET Threading”.   This was by far my favorite talk as it provided background on the evolution of threading in the .NET Framework.  By explaining where we came from, it helped me to appreciate the simple beauty of async/await and how to better apply this pattern.  If you have any interest in threading in .NET, I would recommend checking out his post on the topic here.

I would definitely recommend going to CodeStock in the future, particularly if you live in the region.  There were 900 attendees this year, which gives it some credibility on volume alone.  The organizers did a good job in selecting the venue and it was definitely smoothly run.  One word to the wise, though.  When you go, make sure to check out the presenters online before making your choice on sessions.  Some presenters will obviously be more well-versed in their topics based on their blogs, tweets, etc.  Make sure to make this part of your session-choosing criteria.

Thanks to the organizers!  I hope to attend again.

May 112015
 

hacktn7

A couple weekends ago, I had a great time at Hack Tennessee 7.  For the uninitiated, a hackathon is an event where developers from all over the area gather to work on projects for fun for a weekend.  It was a great time of meeting colleagues, checking out some cool tech, and (as an added bonus) introducing my 14 year-old son to the world of software development.  Since he is an avid gamer, he has been curious as to what it would take to build a game. Hack Tennessee seemed like the perfect venue to show him what the industry is like and what it takes to build a (exceedingly) simple game.

breakintocodeI searched for a game project that we could do quickly and to which he could add his own touches.  I found the Microsoft Imagine Cup’s “Break Into Code” contest and it seemed to fit the bill nicely.  For the challenge, students use a simple block language to build up a brick breaker game.  After getting the initial game together, students are free to extend the game as much as they want.

blockbreaker

The first version of the game looked like Microsoft’s sample image on the left

The first step was for my son to start with the stock project and build the block breaker game.  It was really simple and very spartan in terms of “splash”.

After he got the first version finished, we began working on what he wanted to make his game look like.  We discussed the basic gameplay, the mechanics of how characters in the game would work, and dreamed up some new levels.

IMG_4118

To make the experience more true to the whole agile development experience, we drew up what our game “MVP” (minimal viable product) would be, just as if we were a game development company trying to get out a first version of a game.  All of the cool ideas of multiple levels, flying dragons, and power-ups had to be jettisoned so that we could focus solely on getting out that first version.

wizardhero

The finished version of “Wizard Hero”

We had a great time finding image assets and tweaking what was a block breaker game to a game where a goblin is firing arrows down at a wizard while the wizard shoots fireballs to break through the wall to finally defeat the goblin.  He learned about coding and even that things get frustrating when your framework doesn’t provide some of the things you need (we had to get a little creative and count frames instead of milliseconds for timing).  In the end, he wound up with a playable game that met his MVP requirements.  It was a great project and I think he came away with a greater understanding of the culture and what it takes to create a game.

IMG_4095

As for me, it was my first time to Hack Tennessee.  Having just moved to the area, it was a great opportunity to meet other developers in the community and to see just how much talent is here.  Nashville is an awesome town for tech and I would highly recommend attending a Hack Tennessee event to anyone interested in software or electronics tinkering.

Oct 282014
 

Restart ComputerAs I write this post, I’m a very grateful programmer, sitting in an apartment that my new company has graciously allowed me to stay in during my transitional period in my move from Huntsville to the Nashville area.  I haven’t posted in some three months because I have been rebooting my life.  My old company moved our entire development shop to New Hampshire to take advantage of synergies with a sister product already based in that location.  This has led me to my latest adventure with NC2 Media in Franklin.  I’m a lucky guy because the company I’m leaving has been extremely good to all of us as former employees and the company to which I am moving has been incredible in lending help to me in my transition.

Even with all of the help, it has been a stressful time.  Let’s take inventory.  Laid off, job interviews, house sale, house sale issues, house price reductions, house hunting, multiple trips to Nashville house hunting, school research for kids, 50th wedding anniversary trip planning and going for parents, seeking out a new church, applying for a new mortgage with the accompanying paperwork, moving all of our earthly possessions into storage, finding and moving into temporary corporate housing while the house is finished being built, and throw a few birthdays and holidays into the mix.  It has been the only time in my life that I feel that I have not had my hands around everything that has been going on.

There’s a fun (sarcasm intended) website over at the American Institute of Stress that has the Holmes-Rahe Stress Inventory.  If you have ever wondered just how close you are (or just want justification for) a complete meltdown, I would highly recommend taking this little test.  Check out how well I did:

  • 8. Being fired at work (ok, I wasn’t fired.  My company had to relocate the product.  Still, I claim credit here) – 47
  • 16. Major change in financial state (Luckily, I was able to get a job quickly, but this has been a weird financial time) –  38
  • 20. Taking on a mortgage (new house – woo hoo!) – 31
  • 22. Major change in responsibilities at work (New job, new deal all around here) – 29
  • 28. Major change in living condition (Let’s see.  Not living in the old house.  Not spending all my time at the corporate apartment, either.  Spending about 3 nights at my new company’s apartment) – 25
  • 29. Revision of personal habits (Up and down the road, waking up at 4:00 to leave Huntsville, packing constantly) – 24
  • 31. Major change in working hours or conditions (New everything here) – 20
  • 32. Changes in residence – 20
  • 35. Major change in church activity (still looking) – 19
  • 38. Major change in sleeping habits (Sleeping in the corporate apartment bed while mine is in storage doesn’t help here) – 16
  • 40. Major change in eating habits (Up and down the road.  Junk food city) – 15
  • 41. Vacation (Just got back from a great time with my family at Gatlinburg) – 13
  • 42. Major holidays (With 3 kids going different directions, every holiday is major) – 12
  • 43. Minor violations of the law (I’m not sure the officer was impressed when I told him the only reason that I was going 81 in a 65 was because I was distracted turning around talking to one of my kids.  Go figure) – 11

That’s just the high points and it adds up to 320 points.  According to Holmes and Rahe, I’m geared up for a full-on, completely justified wig-out.  I’d probably take them up on it, except that it would just add one more thing to the list for me to add up (I’m sitting here laughing at that, BTW).

Thankfully, Dear Reader, I can now see the light at the end of the tunnel.  We have sold our house, found a new one for which we will close on soon, I am getting settled at my new job, and we will be moving the whole rest of the family up here at Christmas when the school semester is over.  It has been one wild ride, but I think that we might get back to some semblance of a routine in a couple months.

So, what can you take from this?  What nuggets can I share from this experience?  What can I suggest that you do when you are hit with many stressors like this?  Here are just a few thoughts:

1. Take care of yourself

On a plane, when the oxygen masks fall from the ceiling, they say you are supposed to put yours on first, and then put the mask on your child and/or the guy passed out in 16B from too many bloody marys.  To a parent, these instructions seem counter-intuitive.  However, if you don’t take care of yourself and then you pass out, that guy in 16B isn’t going to take care of your child.  It’s on you to make sure that you are together for yourself and for the ones you love.

I’m not suggesting that you become self-indulgent.  I’m merely suggesting that you keep a positive outlook and give yourself something to focus on from time-to-time that has nothing to do with employment or the stress of the next paycheck.

2. Take care of your family

When the smoke clears, your family will still be there and they need you.  I often tell the men that I work with that they need to go buy flowers on the way home and hug their wives.  It’s the little things that count the most and you need to remember to try to stay connected.  I need to do better at this and you probably do, too.  Also, take time out to focus on your kids.  Whether we are conscious of it or not in the midst of our turmoil, they are still growing and observing.  It’s on us to spend time with them and show them how to be calm in the midst of change.

3.  Take time to dream of the future

When I was growing up, the preacher at our church talked about king who wanted a ring that, when he looked at it when he was sad, it would make him happy.  However, the ring inadvertently had the power to do the opposite, it could also make him sad when he was happy.  The ring simply said, “This too shall pass.”  For me, I’m not feeling sad.  On the contrary, I’m feeling quite blessed.  However, I could use some settled, so I like to dream of when the time driving up and down interstate 65 will pass and we can be settled here when our home is finished.

It has been enjoyable to look at our house go up and to plan for the time when we will all be here and settled in.  I have enjoyed planning where the furniture will be and making plans for the gatherings we will have at the house.  I’m particularly looking forward to reading out on our back porch.

If you find yourself in a similar crazy situation like ours, make sure to take the time to look ahead.  It will help lighten your present load quite a bit.

In conclusion, I and my family are on the spin up side of this reboot and that makes me quite happy.  When we get the system fully restored, we’ll have an upgraded house that is big enough for all of us, we will be closer to family, the kids will be in the #1 school system in Tennessee, and we will have very good, interesting jobs.  All in all, I think it will be a very good upgrade.

Jul 272013
 

My wife is a Certified Family Nurse Practitioner and she recently joined the medical staff at a hospital here in town.  As she started her work, I was amazed at the hoops that she had to go through just to practice medicine.  There was licensing with the state board of nursing and certification and verification with the hospital.  There was the accounting for all of her continuing education hours.  She had to prove that she had the education and experience to back her credentials.  In short, she had to prove that she was the professional she claimed to be.

While she was running the gauntlet of verification, it made me consider the last time I had a similar experience. While not even close to her experience, the closest that I could come to that level of scrutiny was my last job interview.  Obviously, the ramifications of a medical professional not being properly experienced and taught would would be much greater than that of me as a software developer, but it made me consider that perhaps we developers, too, should be held to a higher professional standard.

Merriam-Webster defines profession as

a calling requiring specialized knowledge and often long and intensive academic preparation

Most of us in the software development profession have had substantial training, ranging from on-the-job training up through doctorates in some computer science or information technologies field.  We have a set of specialized knowledge and have had long and intensive preparation, but that was for yesterday’s technology.  Just as new techniques in other professions are continually created and taught, perhaps we should continually be taught as new technologies emerge in our field.

As we consider how other professionals (in this case medical professionals) keep their skills up-to-date, there are a few things we might consider:

1.  Continuing Education Units

Every two years, medical professionals are required to accumulate a specified number of continuing education units (CEUs) by attending classes, seminars, and online courses to maintain their licensing and accreditation.  They must have many hours with several of these hours reflecting their specialization.  In like kind, what if we software developers were required to have a certain number of CEUs to maintain our jobs?  How would our profession be different if keeping up with the latest technology – even studying it at a high level – was a requirement for continued employment?  While CEUs may not be required of us as developers, we should be staying abreast of the latest in our field so that we know which tools are at our disposal.

There are many sources that we can use to meet the goal of continued education without even leaving home.  Sites like Pluralsight have an entire library of rich content on a gambit of software-related topics.  Channel9 and MSDN from Microsoft have courses and videos to cover their entire stack.  Oracle has a wealth of material available for learning Java.  There are also conferences that can be attended in-person or online, like Google I/O or Microsoft Build.  These are just a few sources from which we can get our “Software CEUs” and we should make it a point to utilize these and continually grow as professionals.

 2.  Employers Monitor Skills and Training

You can bet that when you go into the emergency room or under the surgeon’s knife that the hospital has THOROUGHLY vetted every person that touches you.  The threat of malpractice is so real and liabilities are so great that hospitals and practices are extremely picky as to whom they employ and they continually monitor these employees performance and training.  Likewise, we should take very seriously the people we hire and we should take their continual training seriously.  Companies and managers should provide incentive and reward employees who make life-long learning a priority.

3.  Credentials Matter

In the 2002 movie, “Catch Me If You Can”, Leonardo Decaprio plays a con-artist who poses with several aliases, including an airline pilot and a doctor.  In the doctor scene, he faked a diploma from Harvard and was welcomed into a hospital as a doctor with some humorous (and some not-so-humorous) consequences.  I have seen developers come and go in my career who were a lot like the character played by Decaprio in that movie.  They seemed to have the credentials to develop software, but their credentials were just not for real.  Hospitals work hard now to ensure that doctors and nurses are fully credentialed.  Perhaps we could apply this to the software development arena through proper degrees, professional organizations, and certifications.  I know there is some debate here as to whether these things are required to be a good developer, but perhaps we should consider these when we hire developers and as a way to increase our credibility as developers.

While there is not a perfect correlation between the medical field and the software development field, there are things we can learn from the medical profession that we might be able to apply to our advantage.  Anything that we can do to promote developer proficiency and higher quality software will only prove to move the field forward and improve our ability to deliver quality solutions.

Jul 132013
 

I was lucky enough to get to go to the Microsoft Build conference a few weeks back.  It was inspiring to be with so many great developers, to hear their stories, and to hear more about the direction of the industry.  Since that time, I have been thinking, what does it take to be a great developer?  I have several ideas for how I will improve and I hope to write about some of them in upcoming posts.

I have followed Scott Hanselman for quite a while and he spoke at the conference.  Along with being a skilled developer, teacher, and presenter, he is an avid blogger.  In one of his posts (and in a subsequent conference talk), he spoke about using social media as a developer.  He gave a lot of good reasons for blogging, but I think joining the greater community was one of the best reasons.  Also, if you blog about problems that you have encountered and solved, you have a permanent record – something from which I could definitely benefit.

So, thanks Scott HanselmanJoel SpolskyJeff Atwood, and others for the inspiration.  Here goes!