Scott E. Smith - Establishing Ability and Credibility
Seeking Chief Architect & Senior Software Developer Opportunities
Specializing in .NET, ASP.NET, SQL Server, & other Microsoft Technologies
Committed to quality programming, service,
communication, and project management.
Contact Me Introduction:
I'm pleased you're interested in learning more about my software development abilities, and how my IT skills have been put to use by Fortune 100 companies such as Merrill Lynch, 3M, and GE, as well as by small, mid-sized, and large private and public companies across the world. I have over 14 years of experience in designing and rolling out custom enterprise IT solutions for software, IT service, start-up, energy, financial, professional services, insurance, content management/publishing, retail, government, and multinational conglomerate organizations.
As a professional software architect/developer, I use my abilities to design, develop, deploy, and manage complex data-driven web and Windows applications using industry-standard technology. I work equally well in high-pressure, high-intensity situations/projects and in work arrangements where my client needs someone who is dependable, a loyal team member who consistency performs as promised when promised. Many of my projects were designed for zero-fault tolerance. I have developed software for enterprise application-based systems, web-based systems, packaged software, prototypes, and system conversions/replacements/upgrades.
My specific areas of expertise include nearly all Microsoft technologies, software development best practices, software leadership roles, business operations IT liaison, analysis and design, interface design, rapid application development, infrastructure analysis and maintenance, implementation rollout and support, systems administration, and database design and administration. I have worked in these capacities for many organizations across the United States.
What follows introduces my
years of experience at-a-glance,
previous experience,
code samples,
technical skills,
information you may find relevant,
personal information, and my
final thoughts. If you find that I've not written about something that you'd like to see, I hope you please let me know, and I'll get it to you right away.
Years of Experience, Core Strengths, & Kaizen At-a-Glance:
- Technical Solution Design: I have been designing and developing custom software based on the Microsoft .NET platform since its inception in 2001. Prior to 2001, I used other Microsoft technologies such as COM, DCOM, VB, VB for Applications (VBA), and Microsoft Visual C++. (I have peers and know others who can manage PHP, Ruby, RIA (Flash, Silverlight, etc), C++, & Java solution design and development. Please contact me, and I'll put you in touch.)
- Software Development Team Management & Leadership: I have managed software development teams of up to 30 developers, and larger teams including all software development roles at all levels and most supplementary roles, such as QA, SMEs, Business Analysts, Release Developers, PMs, and Trainers.
- Software Development Experience:
- Programming: Since 1985 (At age 14, I sold my first commercial software application. Perspective Software purchased the base code for a BBS system created for the Commodore 64.)
- SQL & Database Design: Since 1996
- .NET Framework and Complete Stack (WCF, WPF, etc), all versions: Since .NET's inception in 2001
- .NET, C#, and ASP.NET: Extensively since 2001
- Legacy Microsoft Technologies (VB, ASP, COM, COM+, DCOM, and VB for Applications): Since 1995
- SOAP/XML Web Services: Since 2003
- Windows Server Technologies: Since 1994
- Core Non-technical Strengths: Communication is my best strength. I know how critical good communication, project management, and leadership are to the success of any project. As a result, I proactively communicate both within and without the actual software development team so that all stakeholders are in the know. Besides being communicative, I believe I'm approachable, am motivated to see projects be successful both for my clients and for myself, and am naturally curious, which makes me a natural at systems analysis and learning new technologies or updates, both critical skills for a software architect and developer to have.
- Kaizen: Kaizen means "continuous improvement", and is something I believe in, especially because the IT industry does not rest. Thanks to my exposure to projects of all sizes in organizations of all sizes, I believe I've been privileged to learn new technologies throughout my career that are just a little more advanced than "bleeding edge". As a result, I have learned, applied, and, often, taught newer, useful technologies as they were being adopted in the mainstream. In addition to application as a means of education, I am an avid reader of both online material (blogs, websites, RSS feeds, industry sites, etc) and books. I have college experience as well, but I left to pursue industry ventures prior to completion. Lastly, I have over 15 Microsoft Certifications, spanning the spectrum of server, database, and software technologies.
Return to top
Previous Experience: Project examples of how I have helped small and mid-sized businesses:
- BidBridge LLC | Agent Portal Project
- Project Description: architected and programmed an agent portal that provided CRM and other functionality to the BidBridge Sales staff. Features included contact management, calendar management, event management, sales opportunity pipeline management, status reporting, commission reports, and sales agent management in a tiered structure.
- Technologies Used: ASP.NET with C#, Web Services (SOAP), AccountMate accounting package, Sales Logix CRM, custom auction database, and SQL Server 2005.
- Flow International | Sales Forecasting/Job Costing Tool Project
- Project Description: developed a sales forecasting tool that allowed Flow to forecast out not only their sales, but also production schedule, labor resource information, and job cost data. Flow builds multi-million dollar high pressure water jet cutters used for precision cutting of steel and other metals. They use my software to manage the cost, production, and labor for several machines a year.
- Technology Used: C# with Windows Forms, Web Services (SOAP), LLBLGen Data tier generator, Code Smith code generator, JD Edwards manufacturing system, Infragistics controls for Windows UI, and a SQL Backend database.
- Hydromax USA | Daily Crew Reporting Project
- Project Description: Hydromax was using a spreadsheet for reporting daily crew activity. This was a bottleneck for them, so I developed an online time and equipment report system that allows crew leaders to log each crew member's work hours, what project they worked on, how much time they worked on the project, what equipment and parts were used on the project, and any comments for the project. This information is then interfaced to several other systems for billing, payroll, and other business operational purposes.
- Technology Used: C# with ASP.NET, Web Services (SOAP), and LLBLGEN Data tier generator.
Links to work I've done.
Most of my work has been done for Intranet systems. As an example, here's a private site that you can see, but you can't log into:
http://agent.bidbridge.net/login.aspx 
. Here are some public ones where I did all of the development and some of the content. Again, they are not comparable to what I've done for businesses in terms of the logic applied and complexity.
Here are some large clients I've helped, and how I've helped them:
- Merrill Lynch ( www.merrilllynch.com
) - $1.6 Trillion in Client Assets Financial Services Firm: I developed and managed systems integration development projects dealing with all aspects of data warehousing. These projects included working with industry-standard technology such as Microsoft Active Server Pages (ASP), VBScript, HTML, Crystal Reports, TSQL, and XML. I was involved in all layers of the data warehouse, including working with the ERP or source/operational layer, the informational/reporting layer, the ETL or data access layer, and the metadata or data dictionary layer. I helped denormalize data for data warehousing, helped define how data would flow through systems in terms of timing, and implemented procedures to reduce atrophy of the data warehouse.
- GE ( www.ge.com
) - $795 Billion in Assets Technology & Services Firm: I managed a GE Capital IT Solutions team consisting of over 45 engineers, developers, and business analysts. I was responsible for managing each team member's client relationship and providing technical resources on various projects. A representative example project was the statewide rollout of a Microsoft solution to the California Department of Transportation. Our team successfully managed and deployed the solution to more than 600 locations statewide.
- Humana ( www.humana.com
) - $12.8 Billion in Assets Health Insurance Benefits Company: At Humana, I served as an Enterprise Software Architect in the Clinical Guidance department. I designed and oversaw the development of a system for managing provider authorizations and diagnostic related groupings. I assisted the business analyst and subject matter experts on gathering and writing software requirements. Once the requirements had been gathered, it was my responsibility to create software design artifacts such as ER diagrams, process flow charts, and class diagrams so the developers could create the software according to business requirements.
- 3M Innovation - Imation ( www.imation.com
) - $1.7 Billion in Assets Data Storage Company: I managed the Global Architecture deployment, implementation, and support of Imation Corporation's IT infrastructure using techniques learned from my PMI training. Imation had over 77 sites located in 55 countries around the world. I was personally responsible for the IT Architecture, including the design of the WINS, DNS, and security model. In addition, I was the primary expert responsible for migrating more than 35 Oracle database servers to Microsoft SQL Servers. Daily responsibilities included coordinating the efforts of more than 30 technical staff that supported more than 20,000 workstations and 290 Windows NT servers.
- Constellation Energy ( www.constellation.com
) - $21.9 Billion in Assets Energy Company (Fortune #117 in '07): Serving as a software architect, it was my responsibility to design and oversee the implementation of a variety of systems in the Constellation collection of applications. Utilizing industry standard best practices and pertinent software development design patterns such as the adapter pattern, observer pattern, and the model-view-controller (MVC) pattern, my team and I successfully completed a 15-month project to reengineer a majority of the company's management systems. These systems were responsible for managing natural gas commodity trading from end to end for more than 120 bcf (120 billion cubic feet or about 120 trillion BTU's) of natural gas per year, customer relationship management, and gas scheduling/transportation.
- Blue Cross Blue Shield of Florida ( www.bcbsfl.com
) - $6.44 Billion in Assets Health Insurance Company: I managed, maintained, and assisted in the development of a strategic, customer-facing Web application that provided care providers such as doctor's offices, hospitals, and other care facilities access to the Blue Cross Blue Shield insurance network. My primary responsibility was to develop and design the web-based components for access to the insurance data on the Blue Cross mainframe. The interface was required to integrate with a Microsoft SQL database, which provided the middle tier for this 3-tier application. I also helped design and implement this Microsoft SQL middle tier, the components of which required the use of standard database modeling techniques that allowed developers systematic access to the data via industry best practice development methodologies. All work was validated against standards published by Microsoft. Additional responsibilities included installation and maintenance of the operating system where the database servers resided, including installation of Windows Server, IIS, and SQL Server.
- iPay Technologies ( www.ipaytechnologies.com
) - Processes over 3.5 million Payments/Month - Online Bill Pay Software Solutions Provider: I helped convert their ASP 3 system to the .NET Framework. I re-architected the solution, and worked with their team of talented developers to implement the solution. I served in a strict consulting role during this project, and provided design, architecture and implementation consultation.
- NewRoad Software, acquired by LANDesk ( LANDesk Process Manager
) - Enterprise Business Process Management (BPM) and Change Management Software: I served as the product manager and senior developer for numerous software development projects. Daily tasks included software development lifecycle management, specification and requirements gathering, quality assurance, and project management. One of my more noteworthy projects was the development of a .NET application to create a customer service/helpdesk software application in an Intranet/Internet environment. This was our largest and most profitable commercial application, and it was in use by ~10,000 users and more than 400 companies, including Disney and SAP.
I'd be happy to discuss the inner workings of my systems at any time to the extent that I'm allowed. I will not be able to discuss all customer work I did because of the NDA's that I've signed.
Return to top
Code Samples: all code samples are in C#; I can get you others if you'd like:
- Package.cs ( source code - text file ): is an object that represents a shipping package used in a USPS shipping interface. The object represents a single package being shipped by USPS. The package object is used in conjunction with the USPSManager object to get shipping rates, track packages, and print shipping labels.
- USPSManager.cs ( source code - text file ): a Manager object used for getting shipping rates and labels for packages via USPS. The USPSManager is responsible for managing the communication between the library and the actual USPS Web Tools (XML Web Services). The purpose of this library is to simplify the use of the USPS Web Tools.
- AffiliateDAO.cs ( source code - text file ): a sample of a Data Access Object. This is an example of a data access object responsible for Create, Read, Update, and Delete functions for a database entity.
- SQL Server to SQL Server Compact Edition Database Copy Utility ( CodeProject.com Article and Source
): This is an entire application I have written, and made available on CodeProject.com ("The Code Project is a community of Visual Studio and .NET developers joined together with certain common goals: to learn, to teach and to have fun programming. Developers from all over the world come together to share source code, tutorials and knowledge for free to help their fellow programmers." Source: www.codeproject.com
)
- United States Postal Server Web Tools Wrapper Library ( CodeProject.com Article and Source
): is another complete library I wrote to simplify integration with USPS web tools.
I can walk through more code with you using a web conference, or provide more samples at any time.
Return to top
Programming & Other Technical Skills:
- Summary:
- I am an expert at nearly all Microsoft .NET and .NET predecessor technologies and supporting technologies. At this stage in my career, I'm confident that I can handle any project, and serve in any role as it relates to these technologies.
- Specifically, I am an expert in Microsoft C#, .NET Framework 1.1, 2.0, 3.0 & 3.5, VBScript, Visual Basic, VBA, Active Server Pages (ASP), VB.NET, ADO.NET, ODBC/ADO/RDBMS, COM+/ActiveX/OCX, AJAX (XML & JavaScript), HTML, SQL Server, Transact SQL, SQL Triggers, SQL Stored Procedures, and Windows Directory Services.
- .NET, C#, ASP.NET, ActiveX:
- I've been using .NET/C# since 2001, and it's my primary language. I have used ASP.NET since 2002.
- OOP: most of the code I write is object oriented with a focus on reusability and resiliency to change. When I decide not to write OO code, it's for a specific reason.
- Have applied the .NET Windows Communication Foundation (WFC) and the Windows Presentation Foundation (WPF) to create next generation n-tier business applications.
- Libraries I commonly use: LLBLGen Pro for data layer generation and OR Mapping; Microsoft Enterprise Application Blocks for applications such as caching, configuration, encryption, and more; CCSA for data persistence; .netTiers for data layer generation; NMock for creating mock objects for testing; log4net for logging in .Net apps; NHibernate for data persistence; and NUnit for unit testing.
- .Net UI Component Frameworks I've used: Infragistics, SyncFusion, and DevExpress.
- Legacy Microsoft Technologies:
- Active Server Pages (ASP): I used this to create various web applications prior to the release of Microsoft's .NET framework.
- Visual Basic: I have worked with Visual Basic since version 3. I have created several Windows-based applications as well as COM objects using various versions of Visual Basic.
- COM, COM+: At one time COM/COM+ and DCOM were the premier Microsoft technologies used in distributed application design. I employed both VB6 and C++ to create COM+/DCOM objects for many Windows and web applications.
- OLE/OCX: I have experience both utilizing and creating OLE and OCX Active X objects.
- Legacy Integration: Many projects I have worked on required integration with legacy code, including integration with legacy VB6 applications and COM+/COM objects.
- Databases:
- I am an expert in SQL Server, and my knowledge of SQL allows me to use any Relational Database Management System.
- I have extensive experience writing SQL, and know every nuance of the SQL 99 standard (basic queries, types of joins, utilizing sub queries, views, temporary tables, transactional processing, etc.), including a number of proprietary features like stored procedures.
- Nearly all applications I've helped create use databases built with a data source layer between the main system objects and the actual SQL queries that manipulate the database, accomplished using the Domain Object Model and the Data Mapper pattern. I've also written applications that use the Active Record pattern.
- In the design process, after the requirements gathering is done, I create Entity Relationship Diagrams (ERDs) and a Data Dictionary to support the functionality. I then prefer to walk through the ERDs and Data Dictionary with subject matter experts because I've learned this is a good check to ensure the quality of the feature specifications.
- I have experience using these databases:
- SQL Server
- Oracle
- MySQL
- PervasiveSQL
- SyBase
- MS Access
- Examples of database work I've done:
- Once migrated 35 Oracle database servers to Microsoft SQL Servers.
- Created data warehouses, managed them, and wrote the code that systems use to interface with them.
- Created a plugin framework to serve as a portal for corporate applications. Any developer could create a plugin, and deploy it via the plugin framework, which included a desktop application for delivery of the plugin to the end user. It was enjoyable to create the database to drive this framework.
- Created a system that was responsible for gathering data related to mutual funds pricing from disparate sources.
- I use advanced database constructs and techniques:
- SQL Stored Procedures
- SQL Triggers
- Transition Management
- Views
- Database optimization techniques
- Complex queries: I can write any query, and help others optimize existing queries
- I've used a number of abstraction layers for database communication, including ODBC, ADO, and ADO.NET. More recently, I have utilized entire data tier generators such as LLBLGen Pro. Utilizing such code generators saved many development hours, and helped improve quality with no added overhead, minimizing if not eliminating bugs related to these efforts.
- I've created systems with shared database access among different applications running on different platforms.
- Multitier or n-tier Architecture:
- The majority of enterprise applications I have been involved in creating contain 3 or more layers, including a Data Access Layer, Business Layer, and Presentation Layer.
- Data Access Layer: I normally use a tool such as LLBLGen Pro to generate this layer. This provides a bug free, efficient, and scalable method for accessing the data for a project.
- Business Layer: In general, this is a Web Service that wraps the data access along with any special business rules into a single service accessible by the presentation layer.
- Presentation Layer: I have created both Windows Forms application as well as Rich web-based front ends.
- OOP:
- OOP: most of the code I write is object oriented with a focus on reusability and resiliency to change. When I decide not to write OO code, it's for a specific reason.
- Abstraction and polymorphism are powerful OOP mechanisms that I often use in my software design.
- I have an expert-level understanding of class design and use of design patterns for C#.
- Decoupling/Abstraction: I am a firm believer in the reusability of code and components as it reduces costs in development and maintenance. This may seem like something I don't have to write in my resume, but I've been surprised by the number of systems I've worked with that do not adhere to this.
- Encapsulation: A good class or object encapsulates its functionality and exposes a simple method of performing complex task; I am strict in my use of this. Again, this may seem like something I don't have to write in my resume, but I've been surprised by the number of systems I've worked with that do not adhere to this.
- Systems Architect Experience:
- I have led various software development teams, and I have developed software for enterprise application-based systems, web-based systems, packaged software, prototypes, and system conversions/replacements/upgrades.
- I know both worlds. I have technical skills at the micro and macro levels, and I can move between specialist and generalist-level thinking quickly as needed. In summary, I can implement and architect, which I believe allows me to produce more in either area.
- I believe the ability to organize a system arrives after understanding the processes and components of that system, in this case the system that enables the development, deployment, and maintenance of software. There are the technical aspects (hardware and software), the process aspects (methodologies for software development and communication, systems architecture, managing people, managing projects, client interaction, and more), and finally and most importantly, the ability to assemble a good team and create the environment that enables and promotes success. All of these must be done while balancing scope, money, and resources. Each project offers its own challenges and rewards as each project requires its own mixture of these elements.
- I know how to research options for all aspects of a software project and present these options to stakeholders intelligently. I know that each stakeholder has his or her decision factors, and that it's important that they be able to assess options easily and quickly. I also understand that I should give my recommendation if it's applicable and state pros and cons of a particular decision as it relates to the software development teams' effectiveness.
- For more, please see "My 10 Principles for Software Architecture and Design" article on my personal blog ( link to article
).
- Scalability:
- The systems I created support Fortune 100 and Fortune 500 companies nationally and internationally. They support thousands of internal users and 100's of thousands of external users. As a result, I had to develop for, and am familiar with scalability concepts.
- I set up clustering using shared state servers to enable fast response time for software delivered as a service.
- I am familiar with the art of caching.
- I created ASP.NET applications that run in a web farm.
- I created Web Service farms that worked as distributed nodes in a complex system. The client application would contact a routing service that would determine which web server should process the request based on current load. The routing service would then route the specific call to the correct web server to process the call and return the results to the client application.
- Security:
- Security is a mindset that results in constant awareness, which in turn results in the creation and application of good design and development processes. Security must be addressed throughout the lifecycle of a software application, and is a continuous process.
- I first address security by using good design and good development practices, which includes testing such as unit tests and peer reviews.
- At the database level, I ensure that all sensitive data such as passwords and social security numbers are encrypted. There are numerous activities that need to take place around the database and data itself regarding the RDMS, access, and processes so that security risks are minimized.
- At the application level, I prefer to integrate with an existing security model such as network security (NT Domain, LDAP).
- I have implemented security at the network/packet level by placing encrypted tokens in the header of network packets.
- VBScript:
- I have used VBScript for many administrative functions such as Windows login scripts.
- I deployed VBScript to speed up and systematize software deployment and updates for application configuration.
- I also wrote a script engine to provide script capabilities to the end users.
- XML:
- XML Is a primary tool in my toolset of interoperability and data transport across application boundaries.
- I designed and deployed SOAP interfaces.
- I used DTD's to generate custom API's.
- I can syndicate any content for use in mashups, portal pages, RSS readers, and more.
- JavaScript/AJAX:
- I have used AJAX output on various web applications.
- I know how to use XML and JSON for AJAX requests.
- I built shopping cart-style systems out of AJAX.
- HTML/XHTML/CSS:
- I've built web-based systems for several companies I've worked with.
- Most systems were created to manage business functions for a select group of users and uses.
- I generally design and write XHTML or DIV style layouts for sites, utilizing CSS for markup. I can work with the older table layout method as well.
- Microsoft Visual C++:
- I used C++ primarily to create legacy COM/DCOM objects.
- I also used C++ for the creation of Active X components used in Internet Explorer.
- Custom Controls:
- In today's development world, the creation of custom controls is a must.
- I developed a small, rich text controls helper, providing autocomplete and date picker functionality.
- I have created many custom controls. An example: I created a set of User Interface controls specifically designed for localization and internationalization. This included UI controls such as textboxes, drop-down lists, radio boxes, and more for the purpose of easily localizing web and Windows application data. The UI components automatically retrieved the correct language text from a resource file based on the locale of the PC they were being used on.
- E-commerce:
- I've worked with open source, hosted, and custom-built shopping carts.
- I've worked with payment and accounting interfaces.
- I have integrated websites with PayPal, eBay, Craigslist, and more.
- PC Use Experience:
- Mac:
- I own an iMac and use it primarily for iPhone app development and testing web application on Safari.
- I am familiar with testing for compatibility across a-grade browsers, including Safari.
- PC:
- I have programmed web services to ensure they work on the most popular PC-based web browsers.
- I've supported or managed the support of PC's and server environments since 1995.
- I have certifications from Microsoft for most of its operating systems.
- By virtue of the development I've done for Windows operating systems, I am very familiar these systems.
- Interfaces:
- I can configure any SOAP interface needed to make a system work with other systems, or design and deploy a specific API for interaction with a third-party application.
- Examples of interfaces I've worked with:
- Google APIs
- PayPal's interfaces
- eBay API
- VeriSign's Payflow Pro API
- Intuit's QuickBooks Interface
- USPS Web Tools
- DHL Web API
- FedEx Web Service
- UPS Web Service
- Experience in using and interpreting web standards (browsers, accessibility, and validity):
- I develop according to W3C standards, and write code to enable browsers that do not always conform to W3C standards.
- I stick to the standards as much as possible and when I can't do that, I use industry-accepted/supported alternatives to achieve the functionality I'm after.
- I use transitional HTML 4.0 or transitional XHTML 1.0 doc types for my pages. This limits the occurrences of "quirks mode" being enabled, reducing most of the display discrepancies experienced between browser platforms.
- I also design my pages in a DIV/CSS style layout, making it very easy to present the page differently using alternate style sheets. This same design enables me to write for screen readers or brail readers just as easily. I can also format pages to display on handhelds.
- A framework I contributed to can also support alternate configurations of the data for different viewing mechanisms. For instance, I can provide a full Web 2.0 interface for regular browsers, and, with the same data, have a complete set of alternate views for use with a PDA or screen reader, which typically cannot handle JavaScript.
- Systems:
- I am skilled in large-scale systems architecture design, and can help organizations create a systems plan to support their software needs.
- I set up my own development environments, including these components: integrated development environment (IDE), version control system, database management system, automated testing, and automated build scripts.
- I'm comfortable setting up and managing several environments for all purposes, and managing the code across all environments. Example environments: development, test, stage, and production.
- I have worked with these technologies, most of them at the expert level: Windows Server, SQL Server, Internet Information Services, Systems Management Server, Microsoft Terminal Server, Microsoft Exchange, Microsoft SharePoint, Microsoft BizTalk, Windows Directory Services, LDAP, Microsoft Dynamics, and Microsoft CRM.
- I can write code for any Windows OS or software package. Thank to my experience in using Microsoft technologies, if I have not done so already, I can do so with little to no learning time.
- Internationalization and Localization:
- I've developed systems for international use.
- I am familiar with Internationalization (I18n) and Localization (L10n) standards.
- I created a set of User Interface controls specifically designed for localization and internationalization. This included UI controls such as textboxes, drop-down lists, radio boxes, and more for the purpose of easily localizing web and Windows application data. The UI components automatically retrieved the correct language text from a resource file based on the locale of the PC they were being used on.
- ORM Experience: I would like to demonstrate my knowledge of this advanced pattern by describing how it works and how I've used it:
- This is a technique that allows the translation between relational data structures and object data structures. Generally, you see this used when you have an object model system that defines your domain knowledge and you're storing the persistent data in a relational database. The two don't always map correctly so this layer provides translation.
- I have worked with several ORM mappers or data tier generators such as NHibernate, LLBLGen Pro, .netTiers, and Code Smith CLSA. Example project: I used LLBLGen for an administrative application that updated parameter data for a very complex business application. The parameter database consisted of more than 30 tables, 8 views, and 9 stored procedures. Instead of manually writing a data layer, which would have taken weeks, I used LLBLGen to generate a data layer in 10 minutes.
- MVC Experience: I would like to demonstrate my knowledge of this advanced pattern by describing how it works and how I've used it:
- This is a pattern for developing applications that makes use of reusable UI interfaces and object models. The controller glues the view and the model together by defining what parts of the model show up in the view. The view takes input, which goes through the controller for translation to the model. The model can then update the view through an observer pattern.
- I have used several frameworks for implementing the MVC pattern, including the ASP.NET MVC framework.
- Graphics Design:
- UI Design is a very integral part of my application design process because I hate the thought of a good, functional system not adding value or avoided by its users because it's not easy to use. In other words, a good user interface is essential for the ultimate success of a software development project, and is a critical element if not the most critical element because the users will be interacting with the software through the user interfaces. Without a pleasant, easy-to-use UI, an application is not complete.
- I have a thorough understanding of how users interact with an application, and apply this knowledge throughout the software development process. I can lay out a pleasing UI, and communicate via mock-ups and rough graphical elements I create what I believe a good workflow would be. I look to skilled graphics artist, design, and HCI professionals to advise on and implement a clean and attractive design.
- I am familiar with working with designers and marketing specialists during all stages of the software creation process. In some cases, they were the primary stakeholders of projects I led, and I believe we worked well together because we were both happy with the results.
- Tools: These are the tools I use to organize work, and get work done faster. I've used many, and can adapt to what your preferences are.
- Version Control System or Source Configuration Management (SCM): I use Subversion (SVN), Visual Sourcesafe, Dynamisoft's SourceA Anywhere, and Microsoft's Team Foundation Server
- Communication: email, VOIP on an internal Asterisk solution, Blackberry Pearl, and Pidgin with most IM accounts
- Desktop Sharing: Ultra VNC, CrossLoop, GoToMeeting, and Windows Remote Desktop
- Bug Tracking: Mantis, FogBugz, Microsoft's Team Foundation Server, and iBug
- Project Management: Microsoft's Team Foundation server is a great tool for managing software development projects, Microsoft Project, SharePoint, BaseCamp, and custom systems
- Testing: Microsoft's TEST to profile application and determine bottlenecks and calculate performance; profiling an application also provides the developer with an insight into which method calls or procedures are responsible for the majority of the processing time in an application. I use nUnit and Team Foundation System for unit testing
- Editors and/or Integrated Development Environments (IDE): Visual Studio 2003, 2005, 2008
- Open Source: Although the Microsoft world has not traditionally been an Open Source one, more.NET applications are turning to open source. For instance, Microsoft has released major components of the .NET framework to the open source community. I am aware of this trend, am following it, and am happy for it.
- Technologies not listed: Please ask! It's quite likely I've used it. Also, understanding the primary underlying technologies and development principles is the important thing. My learning curve is more of a flat line at this point in my career when it comes to using most tools. Another way to present this is: I have theory and experience across many tools, languages, and processes that I can apply regardless of the new widget, tool, or methodology. I'm not claiming to be an expert at everything, rather a highly-adaptable professional when it comes to any tool related to web services.
Return to top
Other Relevant Information:
- Books: these are some examples of my favorites; I've read many more.
- Software Development Lessons Learned and Project Management:
- Process:
- Technical:
- Resources I use to Improve:
- Websites:
- Google.com
- I've been using it since people knew about it to find information quickly. - CodeProject.com
- Has over 5 million members. Here's how the site defines itself, and it's accurate: "The Code Project is a community of Visual Studio and .NET developers joined together with certain common goals: to learn, to teach and to have fun programming. Developers from all over the world come together to share source code, tutorials and knowledge for free to help their fellow programmers." - msdn.microsoft.com
- A wonderful resource to learn more about Microsoft development-related topics and technologies. - Codeplex.com
- "CodePlex is Microsoft's open source project hosting web site. You can use CodePlex to create new projects to share with the world, join others who have already started their own projects, or use the applications on this site and provide feedback." (Source: www.codeplex.com)
- Blogs:
- CodingHorror.com
- A blog about all topics related to programming, published since 2004, with over 105,000 subscribers and over ½ million unique visitors per month. - Scott Hanselman ( link
) - A Senior Program Manager for Microsoft, Mr. Hanselman writes about several software-related items, and has a lot of good things to share about the Microsoft stack. He's written quite a few books I've enjoyed as well ( amazon search by author link
), mostly related to ASP.NET. - Scott Gu ( link
) - Mr. Gu is a Corporate Vice President in the Microsoft Developer Division, and runs several development teams, including those that develop: CLR and the core .NET Base Class Libraries, ASP.NET, Silverlight, WPF, IIS 7.0, and Visual Studio Tools for ASP.NET, WPF and Silverlight. - Mike Ormond ( link
) - A blog by a Microsoft "Developer Evangelist" (Actual title) who offers a lot of good thoughts and advice. - ASP.NET Community Blogs ( link
) - A great place to learn from and share with peers. - JohnnyCantCode.com ( link
) - My personal blog, which mostly relates to software.
- Agile Development:
- I believe in the Agile methodology for development and deployment of software because of its focus on the customer and the customer's feedback.
- I've used more standard forms of development life cycles such at the Waterfall Methodology. I recognize the importance of following the customer's preferred means of doing work, and am able to adapt to any software development methodology.
- I believe this methodology is responsible for me being able to deliver products that customers use and like.
- Automated and Semi-automated Deployment saves a lot of time, and is necessary for quality products. (This is used in continuous integration environments, and is one of the principles of Agile development. When a developer checks in code, all test are automatically run; if the tests pass, the code is automatically built and deployed to a test environment.)
- Testing:
- I believe in using a test process that involves all stakeholders: primary programmers, peer programmers, quality assurance specialists, project managers, and, most importantly, the customer.
- I believe developers should use these tools and methods to test their work: Peer Reviews, Unit Testing, Automatic Build Testing, Test Cases, User Story Confirmations, User Interface and Navigation Checklists, and Development Completion Checklists.
- I think project managers and quality assurance specialists should use these tools and methods to check a developer's work: Test Cases, User Story Confirmations, and User Interface and Navigation Checklists.
- Leadership:
- I have represented IT departments and software teams of various sizes throughout Fortune 100 and 500 companies. All projects that I led were successful, and I was asked to help with additional projects by business leadership and IT leadership, indicating that I was successful from both of their perspectives.
- I served in the Air Force, and this teaches you leadership, respect, and how to get things done so that other leaders are successful as well. I have applied these principles often in business (not in an overly militaristic fashion, of course).
- I know the difference between leadership and management, and I believe I can transition between the two when and if needed easily.
- I believe goal setting, motivation, and alignment with mission/vision are just as important in a software project as defining the right technology to use.
- As a leader, I ultimately believe my job is to help others succeed. I approach projects I help with from this frame of mind.
- Management:
- I know how to hire team members, assess for strengths and weaknesses, help them improve, and help them succeed.
- It was often part of my job to recommend promotions and demotions, as well as determine if someone should be hired or fired. Though it's not a fun part of business, the latter is a necessity so that the organization can exist to provide its service to its customers and jobs for those that are contributing to its success.
- Tom Peters is a leadership and management guru that I respect and follow. His advice is very individual oriented, meaning that he believes it's the individual's job to succeed and own her/his career. Mr. Peters is also very focused on the qualities of good service.
- I find Dilbert very funny and sadly accurate. Though it's a comic, it has good reminders for any manager, even though it's mostly what not to do.
- One of my goals is to advance the technical and professional skills of others.
- Team Work:
- My success in the IT arena is based largely on the great teams I've had the opportunity to work, learn, and have fun with. We've done some great things together, and the accomplishments still bring back great memories. It means something when you know entire companies are able to do work because of what you helped do. It's a little amazing to think we've helped 10's of thousands of people do their jobs, and 100's of thousands communicate and track information more effectively. This isn't something I'd have been able to do alone.
- In order for teams to succeed, there must be a shared, accomplishable goal that they believe in, the resources to do the job, the knowledge to proceed, and the respect and trust to enable everyone to work well together. I have been working with customer teams since 1995 to deliver technical solutions.
- I have experience working with remote contractors and developers using various tools to manage projects, time, and collaboration.
- I have led, coached, and mentored other team members, and enjoy learning from my team members, my team lead, and all other peers.
- Project Management:
- As an Air Traffic Controller while in the Air Force, I was responsible for managing all inbound and outbound air traffic within the local airport traffic area. Being an Air Traffic Controller taught me a few things about project management, with the most important being: always plan well and meet your deadlines! You don't get deadline extensions when a $300 million dollar aircraft has to land.
- It's been a common theme throughout this online resume, but I can't stress it enough: good project management requires excellent communication amongst all the stakeholders. If the trust is there for this to occur, the team will ensure the project is successful.
- I'm familiar with the common project management tools: Microsoft Project, Excel, Gantt charts, Pert charts, etc. I adapt to my customers' preferred processes. For the software development processes, I subscribe to the agile methodology approaches.
- Interpersonal and Oral/written Communication Skills: I hope what I've written in this online resume is a good indication on how important I think communication is. Most problems can be avoided if it happens properly and often, so I take steps to ensure that's what happens. English is my primary language. I am a native U.S. citizen, born in Jeffersonville, Indiana.
- Analytical Abilities: It's hard for me to demonstrate these in writing, but I'll attempt to. I have taken personality type tests before for previous employers, and those always result in labeling me an ENTJ. I think it's mostly accurate. "The[y] are assertive, innovative, long-range thinkers with an excellent ability to translate theories and possibilities into solid plans of action." ENTJ Personality Type Explained
(I think I've addressed the potential weaknesses of this personality type through awareness.) - Customer Focus:
- My focus in on the customer's happiness; it's how I judge whether I was successful or not. I can develop or help develop the best system in the world, but if the customer isn't happy, I know the job isn't done. I work hard throughout the project to ensure that the communication and development iterations bring about an end product that is successful from the perspectives of the key stakeholders involved in the project.
- What I want is not important. What the project decision makers want and what the end users will use are what are important. I will provide my advice for consideration.
- I also maintain the perspective that it's my responsibility to ensure the system does what the end users want. I don't believe it's easy to define requirements, and this is why the Agile programming methodology is so appealing to me; it allows the customer to see how the system is progressing and to offer feedback at every iteration. The end result is a very nice product because it does what the users want and how they want it, meaning that the system will actually get used and not sit on a shelf.
Return to top
Some Personal Information:
- Short History:
- I grew up in Jeffersonville, IN, which is a suburb of Louisville, KY.
- I met and married my lovely wife, Dawn Smith, in this area.
- I have been married since 1991, and have 3 children, a daughter who was born in 1993, a son born in 1997, and a son born in 1999.
- We reside near Louisville, KY, home of the Kentucky Derby, Louisville Slugger, George Devol (inventory of first industrial robot), and Muhammad Ali.
- FAQ:
- How old were you when you started programming? 12.
- How did you get started in programming? My father bought me a Commodore 64 for Christmas. I wanted to play games so my father and I spent countless hours typing in code from the back of Compute!'s Gazette magazine.
- What was your first language? Commodore 64 Basic, and then Commodore 64 Machine Language.
- What was the first real program you wrote? A Commodore 64 BBS system that I sold at age 14 to Perspective Software. The program eventually became the C-Net 64 Bulletin Board Software.
- What languages have you used since you started programming? C#, VB, VB.NET, Turbo Pascal, C++, and JAVA.
- What was your first professional programming gig? I created an asset management application for an Advertising Agency.
- If you knew then what you know now, would you have started programming? Yes. I love software! It's my hobby and profession. I consider myself lucky to have found it.
- If there is one thing you learned along the way that you would tell new developers, what would it be? If you don't love programming, don't do it! Also, communicate, listen, and be curious.
- What's the most fun you've ever had… programming? It happens all the time; it's whenever I can solve a challenging problem.
- Hobbies:
- I'm a Private Pilot, and can fly cessnas and other single engine aircraft.
- I enjoy creating computer games with my two sons. Our first adventure in computer gaming was to recreate an old Atari 2600 game called Sky Diver. We created this using the beta version of the Microsoft's XNA Framework.
- I'm a soccer player, and play most positions. My sons run around me.
- I play the Bass in a rock band. (Here's a picture of me playing at the Hard Rock Cafe in Louisville, KY (far right)
)
- Social Responsibility:
- I have donated code that is valued over $50,000.00 to various organizations and to CodeProject.com.
- I am an active member of the Civil Air Patrol.
- I am also a Youth Soccer Coach.
- Miscellaneous:
- My Dad bought me a computer when I was ten, and he had the patience to sit with me endless evenings typing from the back of Compute!'s Gazette ( wiki
| Image of first issue I received at age 11
). - I enjoy writing in my personal blog, Johnny Can't Code ( www.johnnycantcode.com
). I named it this because when I was researching how to help my son learn how to program, there were several articles about why "Johnny can't code." I thought it'd be good title for my personal blog. - We have a Yorkshire Terrier, a scary cat, and an English Mastiff. (Collage of my daughter with our pets
)
Return to top
Final Thoughts:
I would be honored to be able to work with you to accomplish your software development goals. If you have questions or would like to talk about anything, I hope you'll please
contact me. Thank you for taking the time to read about the opportunities I've been given to help others and the technologies learned along the way. I hope I'll be given the chance to prove myself to you.
Respectfully yours,
Scott E. Smith
Contact Me