Whether you are just starting a new software project or need an "extra boost" to get a project in development finished on time, I can help.
I've been a team member as well as project lead. I've gathered requirements, developed specifications for buy-in, architected large software systems, written the code, tested it, optimized it, fixed bugs, and written user documentation. In short, I've done it all.
Requirements Gathering
When I gather requirements for a software package, I try to gain an understanding of the uses for the software, not just ask for a simple list of features. The goal is to simplify and enhance users' daily work, not just meet their minimum needs.
The mask tooling software package I wrote for VLSI Technology became a competitive advantage for the company because it was not only less error-prone than manual reticle layout and mask data preparation, it was more powerful than anything that had ever been done before. I can give you a competitive advantage too.
Specification and Architecture Design
Knowing the requirements for a system is not the same as knowing how to build the system. After 1,300,000 lines of code, it does get a little easier. Tradeoffs between memory usage, CPU time, and code complexity become more apparent - usually I've done something similar already. Build vs. buy decisions can be explored knowedgeably.
My creativity, deep domain knowledge, and experience lead me to develop innovative methods when there is no obvious answer. This work often leads to patent applications; several of my patents have been granted as a result of my consulting work.
For example, when asked to develop a system to identify intellectual property (IP) blocks within integrated circuit design files, I used my background across the integrated circuit design and software development areas to create an advanced system now known as Smart Signatures. U.S. Patents #7,685,545 and #8,266,571 were granted for this work.
Code Writing
I take pride in the code I write. It is fully commented from day one, and comments are kept up to date as the code is modified. When maintaining code, I try to add comments if there are none. The comments are written to explain the purpose and function of the code - its prerequisites and results - not just trivial details that can easily be seen from the code itself.
Despite the care I take, I am very productive - on a typical day I write about 400 lines of code with comments. My code is written with an eye towards efficiency without obfuscating the meaning; if something could be optimized but would be more complex, the suggested rewrite is described in the block's comments for performance tuning as needed.
I write code to be enhanced as new features are added, with a clear separation of functionality to reduce unnecessary coupling between modules. My code is constantly refined and refactored as needed to improve readability or testability. Spaghetti belongs on a dinner plate, not in software.
Software Testing
The robust software testing methodologies I have developed will help improve your existing code too. I can teach the methods to your development team, set up test infrastructure, write test programs, or work within your existing testing methodology to help speed your code to release.
For more information, see Software Test and Debug Services.
Software Optimization
If your software isn't fast enough or uses too much memory, I can improve it. I've developed a number of strategies to improve software runtime or memory consumption. I take care to ensure that functionality is retained even as I turn big programs into smaller ones.
For more information, see Software Optimization Services.
Bug Fixing
Even if I didn't write the code, I can fix bugs in it. I always look at the context of the problem to ensure that bugs are fixed without degrading other parts of the system. I am thorough in testing and track down other places in the code where similar problems might occur due to code copying.
For more information, see Software Test and Debug Services.
Documentation Writing
I am an excellent technical writer, as can be seen from the essays on this Web site. I can write documentation at any level, from architectural descriptions to code overviews to users' manuals to applications notes. I can start from scratch or edit existing documentation. If it's not clear, I can fix it. If it's out of date, I can bring it up to date with the code.