Software Engineer specializing in line of business applications on the web. Experienced in the full life cycle of software development from the first unit test and database schema to the continuous deployment of features and enhancements. Proficient in both server side code in C# and Node.js, as well as client side code in javascript and various frameworks. Also developing capabilities in functional programming. Active in local software communities such as adnug, javascript/node meetups and agileATX and a proponent of TDD, CI and Agile processes. Hands-on knowledge of and an advocate of scrum, lean and kanban project planning methods.
Technical Expertise
Node: koa, hapi, express, PM2, winston, aws-sdk, great many more npm modules. ES-6, ES-7, babel
Front End Javascript: react, flux, angular, backbone, knockout, durandal, grunt, gulp, yo, RX.js, mocha/chai
Messaging: Rabbit, EventStore, Postgres (notify/listen), msmq
DevOps: Vagrant, Docker, aws, ELK
C#: Asp.Net MVC, Structuremap, Nhibernate/FluentNhibernate, NServiceBus, NUnit, XUnt
Data: EventStore, Sql Server, Mongo, Elastic, Postgres
Misc: Git, Jenkins, TeamCity, Postman, EC2, various other supporting products and services
Software Engineer @ In July 2012 HealthStream purchased Decision Critical where I worked as noted below.
• As a member of the senior developer group I am spearheading the refactoring of legacy code.
• Healthstream is planning to migrate from WebForms to MVC. I was asked to demonstrate proof of concept by converting an entire page, navigation, header, authentication, permissions etc to MVC. Upon my successful demonstration five groups were formed, all of which I serve on, to investigate the best practices and migratory strategies.
• Having earned the confidence of senior management, I presented an early analysis for implementing NHibernate as an alternative to the current hand rolled ado.net data access layer.
• I contribute refactorings and restructuring where I think they would be most effective.
• I participate in discussions about the future direction of the platform from a development perspective.
• I am working with an experienced senior developer, the VP of technology and a product owner on integrating and/or rewriting the product I built at Decision Critical into the HealthStream platform. From March 2011 to April 2013 (2 years 2 months) Austin, Texas AreaSr Developer @ I Built an application for storing various achievements that one acquires during their career, for both personal use and use by organizations for reporting on and maintaining compliance. This was to be the central component or repository for a new suite of products including the rewrite of their LMS so it was designed to be very robust and flexible with a very strong organization structure and permissioning system. I was the principle architect and developer on this project. We employed a design company for the look and feel and I implemented the results. This was a single page application that was optimized for (future)
Technologies
SqlServer | Nhibernate/FluentNhibernate | Structuremap | Automapper | Asp.Net MVC | Backbone.js | Knockout.js | TDD | NUnit | RhinoMocks | Jasmine | Git | GitHub | MSBuild | JetBrains
Design Principles
DDD | SPA (single page app) | S.O.L.I.D | Numerous Design Patterns
On the C# side
• Email Engine, Engine for determining compliance, business rules engine etc.
• A permissioning system which I built by forking Rhino.Security and adapting it for our purposes. ** The permissioning system allowed for regulation of macro elements such as controller and actions access all the way down to individual DOM elements on the screen.
• An Organizational structure that was flexible based on Martin Fowlers accountability pattern.
On the Client
• Backbone.js views for a basic class structure
• Backbone.js routing for the client side routing ( managing the url fragments ).
• Backbone.Marionette for some helpers and glue for organizing the application.
• A pub/sub library to communicate between parts of the page
• Knockout.js for binding the data to the DOM elements.
• A little framework of my own for structuring the DOM elements and displaying validation notifications. From March 2011 to April 2013 (2 years 2 months) Austin, Texas AreaSoftware Engineer @ Project was a Client Application for Data Migration Engine
Asp.Net MVC
• Built/architected a business application which interfaced with an in-house web service API. All the general forms and functionality plus extensive ajax driven client side functionality.
• Created intelligent html builders (html/css code-gen) that rendered proper elements based on type of property being bound
• Used a Domain Driven Design for the Application Entities
• Used TDD for all functionality
• Leveraged Design Patterns to facilitate extensibility and modification
Javascript
• Used various standard javascript plugins ( Validation, Forms, Template, jQueryUi etc )
• Built advanced OO Javascript modules for handling ajax calls, display and the
• Organized and structured javascript modules based on a model view controller pattern to help the flow of functionality
• Built functionality both in C# and Javascript for using jqGrid ( a wonderful datagrid like ui element )
• Used qUnit for testing of javascript
WebServices
• Because data migration engine was designed to only surface an API, I interacted with engine via WebServices
• I Used AutoMapper to map the WebService objects to the domain objects used in the client application
• Mentored other team members on Design Patterns, TDD, MVC, and other skills necessary to work with the application From 2010 to 2011 (1 year) developer @ Building Dell’s “Take your own path” social networking site
• Extending Community Server 5.0
• Created new objects and corresponding data tables.
• Linked these new objects to the out of the box functionality of Community Server Via SQLCommonDataProvider
• Built new widgets that were able to access these new objects
• Extended existing widgets for use with new objects and functionality.
• Rounded out social networking for the site with non Community Server components From 2009 to 2010 (1 year) Austin, Texas AreaSoftware Engineer @ Worked on E-Commerce site with very high traffic
• Refactored large number of huge legacy classes
• Removed very tight dependency on Data Source (Strongly Typed Datasets)
• Put Data Access in Repository classes
• Put Non Domain Object specific logic in Service classes or elsewhere
• Tried to introduce TDD. Got as far as introducing the concept of testing
• Introduced Microsoft MVC and NHibernate/FluentNHibernate
Rebuilt Checkout Workflow for Site
• This is the main revenue path for the site
• Landing page receives ~ 1 million hits per month
• MS MVC and TDD for whole project
• Totally Redesigned Architecturally
• Built in extensibility via polymorphism and other SOLID principles
• Built pricing engine for different payment methods
• Used XVal + Castle validation framework to draw validation rules all the way from the Domain to the View From April 2009 to September 2009 (6 months) Software Engineer @ Project was a green field CRM
• Worked with three leading members of the .Net community
• Team used Agile and Lean methodology
• Utilized a Kanban Board to manage project workflow
• Used TDD, BDD, and DDD testing and design disciplines
Major Technologies
• MVC ** We started With Asp.Net MVC, but ultimately ended up creating our own MVC framework based on what we considered/consider better architectural design. This framework evolved into FUBU MVC
• JQuery and Json
• Customized and submitted patches for existing plugins
• Extensive use of Ajax
• NHibernate and FluentNHibernate
• Members of my team actually created Fluent NHibernate
• StructureMap ** Used for both dependency injection and custom containers for configuration and registration of different components. Jeremy Miller was on the team so we used structure map extensively.
Testing Frameworks used on project
• NUnit for Unit tests and Integration tests
• Used testing base classes judiciously to help keep DRY but were wary of undue complexity
• InMemory Repository to help with Unit Tests
• Rhino Mocks
• Qunit for testing javascript
• StoryTeller for end to end testing
• JetBrains TeamCity for CI
• Configured multiple builds for both CI and Deployment to Virtual Servers
• Used both Ruby Gems Rake and MSBuild scripts
• Tortoise SVN for version control
• Created console apps to automate other routine tasks such as localization, database generation and data seeding. From September 2008 to April 2009 (8 months) Software Engineer @ Developed a large part ACS’ enterprise application including several key components which now represents the core and largest revenue stream for the company
• Tasks included the creation of new database tables, stored procedures, and middle tier objects, building of the UI, page logic and features, as well pushing to our ‘staging’ server and testing
• Designed and created the middle tier object layer
• Helped develop and implement our custom GridView control
• Helped introduce Ajax features like update panels, collapsible panels, update progress pop ups, etc, to modernize the look and feel
• Helped move company from script oriented to object oriented methodology
• Introduced the team to objects that reflected the tables in the database and organized these objects in a way that worked well with the .Net framework.
• Introduced the code gen tool CodeSmith and built templates and created our objects as well as the stored procedures the new objects relied upon
• Developed tools that allowed cumbersome development tasks to be done by non technical employees
• ACS has a database driven dynamic workflow builder which would take x y coordinates and various other attributes for fields then render different forms. This required entering all data directly into the database using SS Management Studio.
• I developed a user interface to configure all attributes of each field and to have real time rendering of the developing form.
• This tool decreased the time it took to build a form from more than a day to just three or four hours.
• This product is now a major part of all new sales and a big part of our competitive advantage in the industry.
• I also modified the rendering engine and built a similar UI which allowed for a different style of form to be built by a different group of users, i.e. our implementation team. These forms needed more customization of the field attributes and layout but less validation and authorization. From November 2006 to September 2008 (1 year 11 months) Software Engineer @ Client facing Extranet
• Used WebDav for viewing of documents
• Sharepoint Web Services for surfacing marketing documents and information
• Skinned to look like our corporate website
• Ported Extranet to .Net 2.0
• Replaced third party tools with new .Net 2.0 tools ( treeviews, advanced datagrids etc. )
Misc. Controls for Intranet
• Created an aspx page that could be called by Sharepoint but contain information from our Enterprise Application’s Database as well as Sharepoint data. This page was required to look and act like the other Sharepoint pages.
• One Sharepoint specific criteria was that the datagrids needed to have a title bar with buttons and a second header that would appear with dropdowns for filtering each column.
• I created a version using both the SP.dll and SP Web Services
Data Gathering forms application for our Enterprise Application
• Developed numerous forms for data collection.
• Required modifying and sometimes adding to the middle tier and DB and stored procedures being developed by my co-workers
• Created a Document Repository control
• The spec for the document repository was to have it function like windows explorer and use WebDav for it’s file access.
• Developed a middle tier that mimicked the System.IO.FileInfo and FolderInfo objects using WebDav calls.
• My manager wanted to have control over file properties that were controlled by the Windows operating system and to which .net had no hooks. So I created properties for these documents and folders using WebDav properties and updated them via these objects.
• Dealt with concurrency issues created by the use of WebDav. If a file was being edited by a user a lock icon appeared next to it for all other users. A tool tip disclosed the user who was editing it and a right click allowed you to boot this user if you had authority to do so. From March 2005 to November 2006 (1 year 9 months) Owner/Operator @ From January 1998 to January 2004 (6 years 1 month)
Raif Harik is skilled in: C#, Structuremap, Nhibernate, FluentNHibernate, TDD, Javascript, Backbone.js, Knockout.js, Other helpful libraries .js, Continuous Integration/Deployment, Agile ( Scrum, Lean, Kanban )