Like I said here, my first consulting job was a sub-contract with TEKsystems for a company called TD Williamson in Tulsa, OK. Though I’ll still be available if they need anything (questions about the code, bugs, whatever), I completed the last enhancement this week. I feel incredibly lucky that I got this as my first gig after leaving traditional employment behind.
First off, I was fortunate with a very cool customer. I could be wrong, but the IT shop I worked with seemed a bit smallish. Whenever I needed something like access or a question answered, the team member who was my point of contact was able to get the answer or get it done insanely fast (sometimes less than an hour!). I needed a good bit of database help in the beginning (back slamming production to development, getting a copy for me to run local and thus disconnected, etc.) and several times I needed new access to other database servers I was asked to integrate with. Their DBAs were awesome! No bottlenecks or bureaucracy or anything to slow down progress as far as I could tell. If it wasn’t a small shop, it was an amazingly well oiled large one.
This was the surprising part. It's a classic Web Forms application. It uses straight ADO.NET for data access. There wasn’t a single using statement anywhere. If I remember correctly, I found 38 connections that weren’t being closed. Everything is done directly in the code behind. Found a few memory leaks in the Active Directory code. Same redundant email logic repeated all over the place. Magic strings everywhere... Getting the idea yet?
Despite all those negatives, I loved it! It has been a long time since I've been able to belly up to an editor and just engross myself in code for hours and hours. The days flew by like they used to. All of the problems I mentioned above are crazy easy to fix; mind numbingly easy. It's almost like being paid to meditate.
In addition to these simple ways of drastically improving their codebase, I think they were pleased with how fast I was able to get enhancements done. I also fully automated the deployment and added versioning in a way that made it easier to know what is currently in production. All in all, I'd call it a successful gig for both parties and a great start for me.
This post is in response to a request to know the details of my experience with Windows Azure.
As of today (11/14/2011), I have no experience developing production applications for a company or customer.
Being the code dork that I am though, I have played...
- Windows Azure - I've deployed a couple of live sites to azure just to make sure I understood what it meant to code to, deploy to, and live in Windows Azure.
- My personal site (http://www.robtennyson.us) - at one point I had written a micro CMS that I thought I might use going forward as my personal website. To manage the images linked from my posts, I took advantage of blob storage. All other content I stored in table storage. I've since switched back to BlogEngine.NET. Shared hosting for such a small site is cheaper and I found that backing up my site to be much more straight forward.
- My business site (http://www.irohservices.com) - when I first started my business I thought I'd be cool and host my online presence in Azure. I started by creating something similar to what I had done previously for my personal site (Azure hosting, blob, and table storage). It didn't take long for me to decide that I wasn't going to put in the time to create a rich experience so I switched to WordPress and hosted it alongside my personal site. In addition to the time constraint, I switched for similar benefits as on my personal site (cost and backing up). Creating my custom theme and playing with PHP has been fun as well.
- Windows Azure AppFabric - During my time with Microsoft, I created a caching proof of concept taking advantage of Windows Azure AppFabric (not Windows Server AppFabric - though I understand it to be almost identical from the developer's perspective). This turned out to be crazy easy to do. I haven't yet played with the other benefits AppFabric affords (ACS and Service Bus).
- Windows Azure Compute
- Web Role - two public sites
- Worker Role - played with - never needed in production
- VM Role - no experience
- Windows Azure Storage
- Table - two public sites
- Queue - no experience
- Blob - two public sites
- SQL Azure
- SQL Azure Data Sync - no experience
- SQL Azure Reporting - no experience
- Content Delivery Network - no experience
- Azure AppFabric
- Access Control - no experience
- Caching - proof of concept
- Service Bus - no experience
- Windows Azure Fabric Controller - no experience
- Azure Market Place - no experience
- Azure Virtual Network
- Azure Connect - no experience
- Azure Traffic Manager - no experience
So there you have it. The most interesting thing about my experience with Azure has been blob and table storage. If I had just gone with SQL Azure, I don't think much at all would have been different from the perspective of the developer. Once the connection string is set, data access is still just data access in code.
My Fort Smith DNUG presentation description:
Service Oriented Architecture has been a buzz word for a while now and gets talked about all the time. However, I see very few presentations targeting the developer and what he/she should be doing in code as an SOA advocate. In this presentation we surface an old and well known design pattern called the Gateway. When developing applications that talk to other applications (or pull data straight out of their databases!), this pattern can save your bacon at worst and at best will give you a clear and easy to see delineation between your app and external systems.
I actually burned through the presentation rather quickly and for a moment thought the whole thing was going to be a dud. And then people started opening up with comments and questions and I'd say the night turned into a huge success. Awesome group to present in front of. Thanks for the invite!
See the code I used in the presentation here.
This week I start my first gig as a software consultant thanks to Megan Coger with TEKsystems. I'll be working with TD Williamson for approximately a month. Couldn't have asked for a better start. They're located in Tulsa, but I'll be working 100% remote and they were fine with my working a slightly shorter day - a six hour day working 9-3. That rocks!!
The interesting thing about this is what it took last week to set this up. You might recall that I started a business called Iroh Services. Originally, I had just created the LLC and was just going to leave it at that which would have made it a disregarded entity in the IRS's eyes and I would have simply been a sole proprietor. In order to work with TEK though, I needed to be a W-2 employee - either of theirs or of my company. So the scramble began! I talked with a lawyer and my accountant and eventually got everything going and all the paperwork done. So now I, Rob Tennyson, am an employee of a company called Iroh Services, which I also happen to own. It turns out both the lawyer and the accountant like it better this way anyway because the delineation between me the person and my company is much more solid now.
As things were being printed, signed, scanned, and emailed back and forth, I remember saying at one point, "I never realized how fun this working-for-myself-thing would be!" :) Truth be told though, it was kind of fun. It feels completely different doing admin crap like that when you know exactly how important it is. This is compared to the admin crap I used to do where I just knew it was a worthless waste of my time.
All in all, I'm really looking forward to getting started. I love zen-like days of pumping out code and I think that's exactly what this contract is going to be.
I've officially been unemployed for two weeks now (today starts the third week). In that time I've created a DBA, created an LLC with the state of Arkansas, gotten an EIN for that LLC, and I've put out the initial website for the company. Nothing sexy and definitely not the final version, but I of course needed to grab the domain name and wanted something there other than just a godaddy parked page. And just for kicks, I put it in Azure even though I don't need the scale and I'm not even using the storage. I did this for two reasons. First I wanted the experience and nothing teaches better than using something for real. I plan on adding content management features and things that while unnecessary for a simple web presence website, will provide richer Azure experience. The second reason is because I read about changes they are about to implement to make it much more affordable for small time websites and businesses. A great move on their part if they want developers to start playing with it and becoming advocates.
What business name did we decide to go with? Iroh Services
Of course the business is really just for accounting and liability safety when I do consulting. My real goal of becoming a micro-ISV has been on my mind and has occupied the vast majority of my time with research and grand pondering. I've had several friends offer their thoughts and software ideas and am still thinking of getting into a large project with my uncle and cousin. Nothing as of yet has really set me on fire though and I'm apparently brain dead when it comes to coming up with my own software project ideas. Still hopeful.
The freedom has completely rocked. I love dropping my daughter off at 8:30 instead of 7:15 and picking her up at 4:30 instead of 5:30-6:00. I'm also home when my oldest gets off the bus around 4:00 which is way cool. Originally I was going to pick up the little one early enough to have both of us home by the time the bus arrives, but she kept getting on to me about missing afternoon activities - especially the case on dance and soccer days. That's cool though - we're still home before the 5:00 traffic hits and our evenings seem so much longer now.
Regardless of coolness though, money will have to start flowing soon. Guess I'll get back to my grand ponderings :)