October 2012 - Another Gig Completes

by October 30, 2012 12:39 PM

A couple weeks ago I wrapped up my last contract. I mentioned it in Drowning in New Technologies. Again, awesome, awesome contract – I learned a ton and got to work with some really cool people.

What’s Next

The last time I had a break between contracts I started playing with electronics (see ZigBee Garage Door Opener – yes, it's still working like a champ). I've thought about picking that adventure back up, but am hesitant because of a couple roadblocks I had started to run into before. First was cost – tinkering with electronics isn't crazy expensive or anything, but if you wanted to replace every plug in your house with a smart plug for example, it adds up quick. The true low cost solutions are really only present in bulk – massive bulk. The other road block was simply my hesitation to truly devote to something so big. You see, I tend to over-do everything I get into. If I was going to get serious about it, that meant starting a journey of mastering all aspects of electronics – everything from the basic electronics knowledge needed to get a circuit working to learning all I could about physics. Knowing how to do something doesn't cut it for me. I have to know exactly why every piece of the puzzle works. People spend years and sometimes entire careers mastering this. I'm not sure I'm excited enough to devote myself that completely to it. Maybe being a hobbyist is the key here; not working out how to profit from it.

I think I'll stick to software and stick to the aspect of it I know best - enterprise web development. For a while yet, that means continuing to consult. I still hope to create a product of my own though and consulting might be the key to that as well. You see, I've worked out a cobbled together way of managing my gigs, billable hours, invoices, and whatnot. It's a mixture of folder structure, documents, an Outlook calendar for keeping time, Excel templates for the invoices, and a lot of copying/pasting followed by printing to PDF.

I'm pretty sure there are solutions out there for this, but creating my own will do two important things for me. First it will potentially turn some profit if it turns into something others find useful as well. Second it will give me the codebase of a real world application that I can use for both pointing potential consulting clients to and as an example when trying to explain a concept to another developer. It is sometimes rough when someone wants to see some of what I've done or they want to see an example of whatever pattern I'm prattling on about, but everything I've done is internal and proprietary. I'm good at coding on the fly and coming up with sample applications, but nothing speaks truer than code running in production.

So that is my immediate plan. I've upgraded to Windows 8, Visual Studio 2012, and ReSharper 7.0. I've also purchased ASP.NET MVC 4 in Action to make sure I haven't missed anything over the last year. Once I've gone through that, I'll get started on my first product. My intention is code it publicly (GitHub of course) and blog along the way about why I've done this or that in the codebase.

That is, unless I change my mind 12 seconds after clicking publish on this post, or unless another gig comes along much sooner than I expect it to. Wouldn't be so bad if I could manage to write some code in the evenings and weekends. Stupid Warcraft! Yes, I still play - have long since given up raiding, but I do indeed have a level 90 Druid already and have a young panda monk decked out in heirloom gear anxiously awaiting my attention.

Wish me luck!

Tags: , ,

July 2012 - Drowning in New Technologies

by July 22, 2012 09:14 AM

Since April (around the time of my last blog post!), I've been on a gig with a company out of Indianapolis. It's your classic big corp, big ball of mud, type of application. Nothing new to me since I've spent my entire career in corporate America and I'm pretty sure I've created a few balls of mud myself.

The cool thing about this gig, however, is the team. After some turn-over and apparently a breaking point that caused them to get much more picky about hiring decisions, the team I joined seems to be a team of rock stars. Most have figured out they can come to me with questions on just about anything code related and here's the cool thing - answering their questions is always easy. I mean, they just get things insanely fast - every single one of them! Now, I've worked with some freaky smart developers before (last team I worked with at Tyson for example), but rarely do you see a team of dozens where all of them are freaky smart. There is always a handful of laggards (no, I don't think you are one of them).

Additionally, I've gotten to learn a few new things on this gig.

SOLR

I haven't become a SOLR or Lucene expert or anything, but I've had to do a couple things with SolrNet. Seems to be all that I've read about over the years. Can't say I'm enjoying this from a developer's perspective though. You see, they have all the environments setup for it, but when developing locally, the internal SOLR abstractions hit DEV instead of local. This means if you're working on UI that uses the search indexes, it sucks because your local changes obviously aren't going to show up in the indexes from the DEV database. It also means I must be connected to VPN to touch UI using SOLR.

An implementation of the gateway and/or facade patterns would take care of this nicely I think.

Automapper

I'm not entirely sure how I feel about AutoMapper yet. I've heard nothing but praise about it for years now, but this is the first time I've been on a project where it is actually being used. Maybe it's the way they're using it, or maybe I just haven't seen the light yet, but at this point I'm not digging it.

Sure, it does make your controller actions much smaller. It also takes care of DRY if you're mapping between two objects in many places. But mostly I find myself constantly having to hunt down the mapping logic to figure out exactly what is being copied between the objects, or, more frequently, to find out why something is not mapping correctly. I'm sure I'll come around, but right now it seems like a mix of voodoo and magic. Most importantly, there is no "go to definition", search results is the only way to find the mapping.

Topshelf

This one was fun. I played briefly with Topshelf in the past as a spike - never made it to production if memory serves. This time though, we're using it to take care of the Windows service that handles all of the project's scheduled background work. The API is crazy easy and lightweight. Can't think of anything negative to say about this at all.

NServiceBus

Holy crap this thing is cool. NSerivceBus has been on my radar for a long time - as well as Mass Transit. We had a bit of trouble with MS DTC and permissions and whatnot, but it has otherwise been nothing but goodness. I love the feeling of isolation and extremely small units of work you get when dealing with service bus architecture - each message is its own unit of work and tends to be a small one.


I think that pretty much covers it. Well, there are a couple of others (like their internal email handler/service/thingy), but I'm afraid a recruiter might see and start offering me gigs utilizing them. Kind of like the fact that you won't find assembly, C, C++, or BASIC on my resume. I don't want people knowing I know that stuff!

Tags: , , ,

Leaving Microsoft

by August 22, 2011 05:04 AM

Remember last December when I wrote the post titled New Job about this incredibly awesome opportunity I was really excited about? Here I am less than a year later saying goodbye already. My last day with Microsoft is September 9th.

I truly believe an ADM and the PSfD organization as a whole to be a valuable investment for companies with development staff, but it's just not for me personally. Though it is a highly technical position and I did some code-centric work, I would say it is dominantly managerial and it contains a great deal of support responsibility. I've always claimed that I could never be a manager and I don't think I'm cut out for providing support. Maybe it's my near zero empathy score - don't know. Maybe I've found my level of incompetence! Most importantly though, I really miss just being a developer.

At first I thought about moving around inside the company. I thought I'd look for a development position that would allow me to work remotely since I'm anchored to the area (willingly). After all, Microsoft is an excellent company to work for. Great pay, great benefits, and it's full of extremely smart people who are also fun to be around (for you social types). In the end though, the wife and I decided this would be the perfect time for me to chase dreams. Dreams of working for myself and becoming a Micro ISV.

I'm not entirely sure at this point how I'm going to accomplish this, but I'm going to give it a go. In the beginning I'll be an independent contractor and take jobs as I find them to help financially. Mostly I'm going to be doing a lot of research and investigating a few ideas. Oh, and when I don't have a contract, I'm going to pick up my youngest daughter earlier and hopefully be home when my oldest gets off the bus. Might even make supper for the wife if she can stomach it.

Tags:

New Job

by December 5, 2010 08:35 PM

Cut to the Chase

I'm leaving Tyson Foods for a position with Microsoft.

Looking Back

This coming March would have been my 10 year mark with Tyson (with the exception of a one year stint). Even though I'm crazy excited about the new position and the fact that it's Microsoft, this was an incredibly hard decision. Tyson has treated me great and I honestly feel I had a long and bright future with them. In my mind, I was giving up a lot and I was leaving behind some really, really good relationships. In fact, this wasn't a change I was actively looking for. An opportunity was presented to me and because it was Microsoft, I couldn't resist at least giving it a look. The next thing I knew (at least that's the way it seemed), they made an offer. This might sound nuts, but I almost turned it down! In the end though, I recognized this as an awesome opportunity and realized I'd be crazy to pass it up. Tyson, thank you for an excellent start to my career, thank you for all the great friendships, and thank you for being a great employer.

Looking Forward

No, I'm not moving to Redmond. My new position is an Application Development Manager with Microsoft Premier Support Services in the Bentonville, AR area. I'll let your imagination fly as to what company in northwest Arkansas would pay for that level of support ;). This is the formal job description:

The Premier Support for Developer offering is part of Microsoft Premier Support Services. The purpose of the Application Development Manager (ADM) role is to provide our customers with a technically competent advocate with access to all of the resources at Microsoft, to advise and consult on the use of Microsoft technology in their particular product or application. Tasks performed in this role include helping with technology assessments, workshops, prototyping, conducting application design reviews, performance benchmarks, code reviews, porting/migration assistance, configuration management and general development consulting. Key to the success of this role is the ability to develop and maintain strong trust/working relationships with assigned accounts and constantly expanding the working knowledge of current and pre-release Microsoft systems, products and platforms.

Responsibilities:
The ADM is responsible for understanding the customer's environment, its technical requirements and fit to Microsoft technologies. The ADM serves as the customer's persistent Microsoft point of contact throughout the customer's product development lifecycle, which is a role that is heavily reliant on the ADM possessing excellent customer service skills. The ADM is required to assist the team with quick and efficient resolution of customer's reactive support needs. The ADM will deliver prescriptive consulting guidance in the form of workshops, reviews, prototypes, white papers, and conclusive test results while setting realistic expectations regarding the capabilities and delivery timeframes of Microsoft technologies. It is vital that the ADM works continuously on keeping up-to-date on new Microsoft technologies relevant to the customer's particular needs, while developing relationships with key Microsoft product group resources. The ADM is expected to maintain a collaborative role with customers. The ADM is expected to provide consulting assistance to peers as project workloads allows. The ADM also maintains relationships with Microsoft product managers, providing feedback on product requirements and driving product feature/functionality requests on behalf of Premier customers.

My description: pure awesome! My wife has told me many times that she thinks I have organizational ADD. I get bored insanely fast on projects. Some of my favorite times at Tyson were the times when I got loaned to other teams. Other favorites include devloop and when other team members came to me for help or advice. With this in mind, the new role really does seem like a perfect fit for me.

Needless to say, I'm excited. Wish me luck and stay in touch. You'll always be able to find me at the monthly DNUG meetings.

Tags:

Branching Strategy

by November 24, 2009 02:35 PM

Check out http://stackoverflow.com/questions/16142/what-do-branch-tag-and-trunk-really-mean for some good discussion about branching strategy.

This is in reply to a question about our branching strategy on my current project at work.

  • Main - similar to "trunk". Contains the latest and greatest code and is always ready to deploy to production.
  • Dev - similar to "branches". Any feature that will take more than one check-in to finish should be done in a branch. This is to facilitate the most important part of main – always ready to deploy. And of course, we check-in frequently as a good practice so branching is pretty important.
  • Prod - similar to "tags". Contains the code that is currently in production. If it's a web app, you only really need one branch in here unless you think you might actually roll back to a previous version. This branch is useful when you need to immediately fix a bug in production but aren't quite ready for main to be deployed. Just because main can technically be deployed, doesn't mean the business is ready for it. The reason you see so many versions in our prod folder is pure laziness. It needs to be cleaned up big time.

And for the other two questions:

When you branch, you need to remember to check in the code you just branched. The icon mentioned is TFS's way of telling you that you haven't checked in the branched code yet.

We get the version number from the version of our core library. Many projects will use a shared settings file or something to ensure all the libraries within a solution have the exact same version - much cooler than the way we do it :)

Hope that helps!

Tags: ,