genzymecorp
Genzyme
Launch Site

Working for Genzyme is a great experience. It's definitely challenged me on a lot of levels and allowed me to focus on a single project for a long time and hone my skills in lots of areas. One of the single greatest challenges with the system is that it's a large multi-site Sitecore installation. The job initially was to work just on the system but it quickly grew to be much more than that. My time would be split to focus on internal client services, interfacing with IT, working with vendor companies and overall system development. It took a lot of focus but I eventually got a rythm down and setup a number of different systems to help me work with each group.

Clients

Inside Genzyme there were three key stakeholder groups that I worked with who each had a subset of sites in the system. I spend a lot of time working to keep their sites up to date, fix bugs and implement any new changes or features they request. I also try to improve the system overall so that it's easier to work with and more intuitive.

One of the first things I did was to build in a Brightcove integration that would end up being the prototype for Sitecore's Brightcove connector. It allowed content editors to add videos into a page through the wysiwyg editor.

Also after being impressed by the presentation at the Sitecore Symposium, I also added Sitecore's Field Suite into the system to help editors know where the content items they were pointing lived in the content tree. With the number of sites and languages in the system it can be easy to point to a global content item that doesn't have a language version in it or to duplicate and item from another site without updating the reference so being able to hover on an item and see it's path makes it a lot easier to suss out why a content item isn't displaying.

With any Sitecore system there's always a handful of users who rely on the page editor and I found that a lot of the content wasn't editable through the page editor so I spent a few weeks enabling it. It takes a lot of effort to design a clean page editor experience but I love the simplicity it offers a content editor.

As a heavily regulated industry we must tread carefully, but we have been moving toward using more social media so I was tasked with adding Twitter feeds to some sites. I ended up building it to be a skinnable, translateable, reusable server control to do the job and it also includes custom caching to prevent going over the limit of the number of requests to Twitter per hour.

One of the latest features I had to work with was the Mapquest doctor locators. Three different sites used the API and all three did it in different ways. I was notified by Mapquest that they were deprecating their old API and data management system. I had to port all the old data over first and then setup a new set of classes to query and deserialize the content. I built a utility class that could be reused and extended by each site to query for the necessary information and display the results.

Vendors

Up until the time I arrived, there were several different companies independently building sites into the same system. One company was intended to oversee all the different pieces but it wasn't a position well suited for their skillset. The intention was that I would become the new traffic cop; working to integrate all the different pieces and making for smooth site launches. Over time I shifted the responsibility from them to myself which included setting up my own SVN server and JIRA bug tracking system and setting up an FTP host to support the static images used in email campaigns.

One of the biggest challenges here was designing a repeatable system of onboarding vendors and educating them on how the system worked so that they could quickly start developing their site. It's a process in constant evolution. The system is quite large and complex so there's no quick way of learning it all but I have been working on a document that gives a good overview of the key points of the system. With that I also provide a separate branch of code and starter databases that each vendor works with and can commit to without interrupting the stream of work with other vendors or myself. I'm then left to merge the changes back into the system upon request.

System

There were a number of things at a system level that I wanted to work on early on to enable myself to be more productive long term. One of those items was converting the system to using the Custom Item Generator ORM (object relational model). This would allow me to quickly create classes to access data without having to manually handwrite each one. When you're the only one around to do the work, efficiency becomes a priority.

One of the first things that became a stumbling block was the lack of cohesion throughout the project. I found that the system itself couldn't be compiled. It's to be expected when there were so many independent vendors working on code. I took on the vast task of rebuilding the system structure itself by merging class libraries, bringing uniformity to all the namespaces so they worked together and finally going through each and every file and setting the namespace correctly. Many files had the same namespace and classname and would cause hundreds of errors. I eventually was able to move all the webservices to the library and move all the C# code into class files so that it would be compiled and I would be able to eliminate untold amounts of errors before I pushed anything to the servers. It's a testament to how detail oriented and patient I can be.

The system also had a custom form submission and storage system and it was a good start but needed some additional security. I ended up implementing ReCaptcha to replace the home brewed captcha already in place. I also secured the access to the form as a Sitecore application so that I could run a report as an admin and download the information as needed by different internal groups.

Another problem I found when I arrived was a few crippling security issues. One was a cyclical user permission reference that caused the application pool to crash if someone selected a particular item in the content tree. I ended up having to go through each site and manually configure all the permissions correctly and then go through all the roles and set those up correctly also. One thing I learned quickly was to lock down access to everything except content editing. I was able to really stabilize a lot of things once I did that. I also found out that everyone was using the same user account to edit all content. I immediately disabled the user and setup an individual user for anybody who contacted me because they could no longer login.

With as many changes as I've had to make as rapidly as I did, I needed a way to test it all. I looked into doing unit tests but since most of the code would be removed or replaced so it would be a waste of time to write and rewrite the tests. I opted instead for web testing which was something I worked with a little but had to learn a lot more about. I ended up building a framework that allowed me to support multiple systems (flat file, sitecore and external sites) so that I could configure the sites, environments and tests for each. My main goal was to be able to just hit each page with a unique set of sublayouts so that I could tell if any particular file was throwing a 500 error but my testing grew to include ping tests, sitemap tests, search form tests, ip tests among other things. I also set it up batch scripts so that my desktop would run a battery of tests against each environment every morning before I came to work and would post the results to a blog. The feed would be picked up in Outlook and I'd have a digest to read with my tea to let me know if there was anything that immediately needed my attention. This testing suite proved to be invaluable and allowed me to do a lot more rapid overhauling development.

IT

I had to work closely with IT to procure a suitable desktop system to develop on and to setup and configure network access to the hardware the system ran on. When I first arrived our system was running on a 3rd party hosting environment and I was tasked twice since I started with moving to a completely new set of servers internal to the company. It's not something I particularly like doing so often but I did at least get to move to better hardware and updated software which helped the overall speed and reliability.