I’m in the process of upgrading my Subtext install to the most recently released version.
Hopefully it’s a smooth transition.
Update: 1:17pm (Eastern time) — the upgrade is complete and could not have gone any smoother.
I’m in the process of upgrading my Subtext install to the most recently released version.
Hopefully it’s a smooth transition.
Update: 1:17pm (Eastern time) — the upgrade is complete and could not have gone any smoother.
On the 13th, my wife took our kids and one of her sisters’ kids (she has 3 sisters) to visit her other sisters for what they dubbed “cousin camp 2007″. For them, it would be a week of swimming, movies and other activities with her family.
My plan was to hang out around the house, watch movies and work. Luckily for me, Wil called on the 14th and asked if I wanted to come out for a few days since his significant other was on a business trip to Thailand. I jumped at the chance and we decided that I’d drive out on Tuesday. For some reason, the price of train tickets almost doubled since my last trip, so I figured if I was gonna drop almost $100, I may as well drive. That would give me some flexibility on my arrival and departure times and also allow me to take along some extra stuff (like my bike).
The trip to his house was pretty quick — about 3 hours. I managed to miss traffic and actually detoured so I could take a drive down Lake Shore Drive. After unpacking, we decided to jump on our bikes and take a ride along the lake shore. A few miles into our ride, we stopped for dinner at a restaurant on one of the many beaches. I wish I could remember the name of the place because the food was pretty damn good.
After dinner, we jumped back on our bikes and continued riding. We actually rode past Navy Pier and then crossed LSD into Grant Park where Wil started hitting me with trivia. After a quick stop at the fountain, we headed to Millennium Park where we finally got off our bikes and walked a bit (because we were told we couldn’t ride in the park). I have to say that Cloud Gate (the bean) was one of the most bizarre things I’ve seen, but hey, whatever floats your boat, right?
After Millennium Park, Wil decided that we should ride our bikes down Michigan Ave. This involved dodging lots of people, tons of cars, way too many buses, and what seemed like hundreds of impatient cabbies…woohoo! It was definitely lots of fun — not something I get to do around here. When all was said and done and we were safely back at Wil’s playing his Xbox, he figured we must have ridden about 14 miles (for those familiar with the area — we started and ended at Wilson St).
The next morning I felt pretty good except for my umm…well, let me put it this way….my bike seat isn’t the most comfortable.
We rode our bikes to The Art of Pizza (with me complaining about my butt the whole way). The pizza was great and, after eating way too much, we hopped back on our bikes and headed to Wrigleyville. I had been having issues with my pedals since our first ride and wanted to find a bike shop. Before doing that, we decided to stop at Goose Island to watch the game that was being played across the street at Wrigley Field. We left after the 5th inning — the Cubs were up 4-1 – well on their way to the 12-1 victory. Details. Our next stop was Kozy’s Cyclery.
The town I live in sucks so much, we don’t even have a real bike shop, so this was my opportunity to pick up some stuff I needed (we bought our bikes at Village Bike Shop in Grand Rapids in 98′ and unfortunately don’t get back too often). Anyway, I picked up some new gloves, some chain lube and some new pedals. I really love good bike shops that have knowledgeable staff and Kozy’s was no exception. I hadn’t planned on the pedals, but after one of the guys tried adjusting mine (I was having a hell of a time getting my left foot out), he decided the left pedal was shot. No big surprise because the pedals were old and kinda beat up. $70 later, I had a new set of Shimano SPDs and I was good-to-go. Ok, if that confused anyone, this and this might help. I’ve been riding with clipless pedals for a long time and I really like the new set. So much smoother getting in and out now.
From the bike shop, we headed back to Wil’s and relaxed until dinner.
Dinner turned out to be pretty fun. We hopped on the el and headed into town. We didn’t have anything planned other than a quick stop so I could buy the kids some t-shirts (I got in trouble the last time I was in Chicago and didn’t bring them anything) and then dinner. Mmmmm….dinner. Dinner at Ditka’s was fantastic.
While we were enjoying our dinner, we noticed that it had started raining. Neither of us considered it a big deal since the station was pretty close. Well, as luck would have it, we got just a *bit* disoriented and ended up running around in the storm for about 20-30 minutes (yea….it was pretty cool to see the lightning between the buildings and hear the thunder echo through the labyrinth of buildings). OMG, we were both soaked to the bone, but it was fun. Thank god the train wasn’t too cold on the ride back because that really could have sucked.
We spent the rest of my time there hanging out, talking and playing Xbox.
Good times. The more I’m there, the more I can understand his desire to live in Chicago. It’s a great town with so much to do and see. I’m looking forward to my next visit!
I actually caught some traffic leaving town and my return trip took about 5 hours, but it wasn’t that big of a deal since I was returning to an empty house. My weekend was spent watching “man” movies: Pulp Fiction, Some kind of monster, Metallica’s S&M, Clerks and Any Given Sunday. I did go on an 7.5 mile bike ride around this nasty little town I live in and I put a little work into a book case I’ve been working on, but beyond that, I didn’t do too much more.
A couple of updates:
1. Wil called on Sunday and asked if I wanted to come for a visit this week, so I’m headed to Chicago again. This time I’m driving though and I’ll be there through Friday.
2. I’m still working on part 3 of my Lessons Learned series. Hopefully I’ll have some time this week to finish it.
I made the 2 hour drive to Detroit on Wednesday to have lunch with one of the managers from Pillar. Yea, we talked business, but the best part of the meeting was the food.
Mmmmmmmmm…….good stuff. Almost makes me wish I had more reasons to go to Detroit.
File this under WTF were they thinking.
I hit a website this morning that required Silverlight, so I clicked the link, downloaded and ran the installation program. When it was done, this is what I saw:
I clicked on the “Get more information” link and this is why the install “failed”:
Maybe this is a common issue (I haven’t searched yet), but c’mon, telling me the installation failed because I need to reboot does nothing but piss me off. Yes, I understand it’s an Alpha, but it seems like whatever they used to create the installer should be able to deal with a reboot condition.
I’ll update this post later today after I’ve surfed a bit to check on this particular issue.
Note: I know this is a long one, but IMO, it’s worth it. Without actually quoting emails and IM transcripts, it’s tough to illustrate the insanity.
As I mentioned in part 1, after leaving the first meeting, I truly didn’t feel like signing the contract. The client wanted too much stuff within a very short fixed period of time, and to be honest, I didn’t get a warm and fuzzy feeling about the tech lead during that meeting. He said some things that sent up some red flags, but at the time, I blew them off as different people do different things. After all, I was pretty happy to be sitting back as “just another developer” on this project, so I gave him the benefit of the doubt. BTW, One of the early “red flags” was his insistence that the 3 of us (him, me and John) would “share” the tech lead responsibilities.
Before I forget, I have a quick addendum to part 1 — during the 2 weeks of “Plan and Define”, the tech lead also developed several user stories.
I realized pretty quickly that the tech lead really didn’t have the depth and breadth of experience that John and I had (more red flags – again, based on things he said), so I volunteered to setup our development server (which would run our CI). As luck would have it (BTW, that was sarcasm), instead of dedicated hardware, the team was allocated a VMWare virtual machine configured to our liking. After some back-and-forth with the admin, we ended up with a vm that had 768mb of RAM, 10GB of disk space that was running Windows XP with sp2. I installed CC.NET, Subversion, Screwturn Wiki (which ROCKS btw), Sql Server 2005 Express, NUnit and NCover.
By this time we were a few days into the project and knew enough about the problem space to decide on using ASP.NET/C#/SQL Server 2005. The tech lead was busy doing whatever it was he did in those early days and John and I were spending our time working out how we were going to actually get things done. A UI designer joined the project and was assisting the tech lead and the PM in client meetings to start laying out the look and feel of the application.
John, as it happened, had experience with Rocky Lhotka’s CSLA and I’ve always used something a bit less heavy. During this time, we both wrote up short papers that discussed our desired approach. The fact was, we had a ton of work to do and very little time to do it. We had to decide on an architecture and we had to do it quickly. The tech lead really didn’t have much to contribute during this time (another red flag) but he did have the final say, so while John pushed CSLA and the UIP, I was pushing relatively light-weight custom objects in the middle tier along with NHibernate in the data tier. Due to my excellent skills of persuasion (more sarcasm), we ended up going with an entity model using NHibernate. The middle tier consisted of “manager” classes that would accept and return instances/collections of entity objects. I may blog about this approach in the future because as far as I’m concerned, it worked out pretty well. Granted, by the end of the project, I had learned some lessons, and thanks to Will discovered better ways to do some things.
I should mention that because of the red flags I saw early on and because I knew we would be bringing on more developers throughout the project, I wanted whatever we chose to be extremely easy to use and intuitive. In my opinion, simple entities and manager classes met those goals. Also, since we were going to be using NHibernate, we eliminated stored procedures from the equation. Instead of calling NHibernate directly, part of my plan was to use Dave D.’s awesome NHibernateRepository. Again, we needed simple and intuitive.
One of the things we did decide in those early days was that John didn’t mind doing UI work and I really preferred to do the middle tier/back-end work. We came up with this:
Ok, one thing you’ve got to understand is that based on my interview, I had pretty high expectations of those around me, especially the tech lead. Before I talk about him too much, here is an email that was sent to the team within the first couple weeks of the project. Keep in mind that John and I were both “.NET Developers” at the start of the project.
Responsibilities:
PM/BA
* Responsible for overall delivery of the project
* Manage IRP, Truth Plan, Project Log, Change Requests
* Regularly communicate project status to stakeholders
* Responsible for establishing project Cadence (scrums, status, UATs, etc)
* Work w/ SME to develop Use Case documents to be passed to developers.
Tech Lead / .NET Developer
* Responsible for overall _technical_ delivery of the project
* Break User Stories into tasks
* Work with other developers to estimate & re-estimate tasks
* Ensure that build is ready on a weekly basis for Monday UAT.
* Responsible for developing awesome test driven code.
.NET Developer
* Responsible for developing awesome test driven code.
Around a week into the project, we had determined the overall architecture, setup the CI / dev server and started daily scrums. We still only had a rough idea of what we were supposed to be working on, so at the behest of the PM, John and I blindly jumped into working on the application. The only thing we had that represented any kind of UI was a Flash demo the client created. The wireframes from the UI guy weren’t in our hands yet, so John started developing some pages based on the Flash demo and a very, very rough use case while I started doing some database design based on the limited info that I had.
Hindsight is 20/20. All the things we were “rushing” to get done were core to the application, but no one seemed to care at that point.
Around the second week things started to go down hill pretty quickly. While the team as a whole decided this should be a web-based project, the tech lead wasn’t as sure as the rest of us. The fact is, the UI designer had “wowed” the client with some great looking screens and the majority of us felt that since it had a very “webby” look and feel, we’d be hard pressed to re-create that same look and feel using WinForms. In fact, the UI designer was providing wireframes as HTML!
During a Friday scrum, the tech lead brought up WinForms and really pushed hard for us to switch gears. We decided that on the following Monday, I would do a WebEx demo to show how easy it was to take a wireframe and create a working page from it. The BEST quote from that Friday scrum came from the tech lead:
I am 100% serious. My jaw dropped when he said that! For those not in software development — basically he was admitting that he had ZERO experience in web development. It also turns out he had ZERO database experience and very little Windows development. Ok….so my question at the time was “WHO THE HELL INTERVIEWED THIS GUY?” It certainly wasn’t Dave.
Anyone that knows me knows that I can get emotional, but I did my best to keep my cool. It really helped that I was actually on-site with another client during this scrum. Anyway, after he said that, my “WTF!” meter jumped through the roof. After the team picked themselves up from the floor, we still pushed ahead with me doing a WebEx demo on that Monday. The edict was for him to STAND DOWN on the WinForms until the meeting on Monday.
Over that weekend, the tech lead emailed everyone and stated in no uncertain terms that we WOULD be proceeding with WinForms and that he already re-created all of our ASP.NET work. Needless to say, the PM, John and I fired off several emails, some heated, to the tech lead. At some point, one of us CC’d the Managing Director to get him involved.
On Monday, we convened for my demo, but that turned into a FOUR HOUR conference call from hell. The tech lead would NOT budge and the rest of the team (the PM, me, the UI guy and John) kept trying to convince him that we could be extremely productive writing ASP.NET and that based on the clients desire to have something visually stunning, we’d be crazy to go with WinForms (not that it can’t be done, but we’d have to invest time in figuring it all out and most likely purchasing 3rd party components). He continued down the road that HTML was too hard and that we should be “dragging and dropping” everything. I found it very difficult to keep my cool in this meeting but was able to stop myself from calling this guy was he was: a total idiot.
Finally….FINALLY, after 4 hours of him digging his heels in and the rest of team unwilling to concede, the managing director stepped in and made the decision for us: the app would be web-based! Believe it or not, the tech lead CONTINUED telling us we were wrong!!! He actually said that the only place he’d be comfortable given his (lack of) experience was doing the UI but only if it was WinForms! I tried to explain how the entity classes were auto-gen’d by CodeSmith so he would be writing very specific business-related code. I also tried to boost him up a bit by telling him how simple HTML was and that he’d catch on really quickly. He was not convinced. In fact, in the following days, he continued to IM me telling me we were wrong and that there was NO way we’d complete the app if we used ASP.NET.
It was only 2 weeks into a 6 month project and my descent into hell had just started. Part 3 coming soon.
For those in the US that read my blog
BTW, I took this picture of the flag that flies on my house. I really wish there had been some clouds in the sky,
but oh well.
Since I was officially off my last project on the 15th, I’m gonna blog about some of the issues and lessons learned. I will replace names where necessary, although I may drop a real name or two.
This is part 1 of 5.
The Project: An Electronic Medical Records (EMR) system that will be sold commercially (at least that’s their hope) by the client.
The Players (names have been changed):
Stan – the PM/BA
Bob – the tech lead
Mike (me) - a developer
John – a developer
Jake – the Subject Matter Expert (SME) / client
Jeff – the UI designer
Peter - a manager
I will also talk about other people, but I’ll simply use their titles (CEO, President, etc.).
This project, although not well defined when I started, had a deadline for pilot already set. Go figure. That deadline was…..c’mon….guess? Yep. June 15th.
The first meeting I attended scared the hell out of me. It was the first day on the project for me, Stan and John. BTW, all of us were new to the consulting company as well as the project. In fact, when I attended the meeting, I was still waiting for the consulting company to send me the final contract, but after that meeting, I almost didn’t sign it. I had a long talk with the consulting recruiter but in the end, really needed the gig and decided I could deal with 6 months of pain.
The client consisted of a father and son plus some investors (one of whom was the CEO for the consulting company we all worked for), but for the most part, the son (Jake) was our primary contact. I will say that when the father and son were in the same room, the meetings got pretty heated.
At this early stage of the project the client had some idea of what they wanted, but nothing concrete. In the two weeks preceding my involvement in the project, the tech lead and the client had engaged in “Plan and Define” sessions. The result of these meetings were several horrible flow charts that Bob had put together along with a list of “tasks” and I think there was even an initial “iteration release plan” (basically, what pieces of functionality fit into each release).
What I found funny is that when one of the clients’ initial “great ideas” was presented to real end-users, they told the client it was a stupid idea. Gotta love end-users, especially when they’re physicians.
Anyway, the first meeting completely scared me because there was no way in hell we were gonna get a fraction of what they wanted done by the deadline, but it didn’t matter. The original tech lead had already said we could do it, but a dirty secret about the tech lead would soon come to light that would change everything. Anyway, the client WANTED IT ALL and didn’t want to hear anything about dropping functionality or changing the date.
So, there we were, a rough list of features, a deadline and a team that had never worked together before. Little did I know how bad things would get in the coming weeks and months.
Christopher Hawkins wrote a great post yesterday that can be summed up in this paragraph:
Every time I open FeedDemon and see the hundreds of posts about the iPhone or some of the bleeding edge tech from Microsoft, I can’t help but think that I do care about these things, but in reality, I don’t. I care about solving problems for my clients and providing for my family.
While I’m not ready to unsubscribe from all the feeds I read or delete all my favorites, I am going to scale back a bit and focus more on what’s important and worry less about “the next big thing”.
I found the wikimindmap site at adoptioncurve.net. This site is really cool! I’m a huge fan of mind maps and seeing wiki results in this format works well for me. Check out this screenshot from a search I ran. It’d be cool if I could export that to a MindManager file, but hey…I’ll take what I can get.