Archive for the ‘Software Development’ Category

A Developer’s Uphill Journey From Custom Development to Software Vendor

February 26, 2009 Leave a comment

Jonathan Cogley: From Custom Development to Software ISV

February 26th 2009 | Jonathan Cogley

From Custom Development to Software Vendor: A Developer’s Perspective

Every software engineer dreams of the day when he can stop working on those awful Test Process Specification reports (the TPS reports made famous by Office Space) and build his ultimate product, sell millions of copies and live in the Bahamas-or at least a moderately priced condo in a major metropolitan city!

In the last quarter of 2005, Thycotic Software started on this journey.  The bulk of the company’s business was in a successful custom development consulting practice but the sights were set on building a base of product-driven revenue.  The logic leading to this decision was something like this: “We build great custom software for our clients; therefore we should be able to build a great product and sell it.”

The product veterans can stop laughing now. As we learned, there are many differences between these different worlds of software development.  Secret Server, our first off-the-shelf product, would teach us new things about building software: choosing features; support calls with the general public; and how to set new records for daily caffeine consumption.

What are the typical characteristics of custom development?

  • The software caters to a particular business need.
  • It’s time-sensitive due to a market opportunity, budget or fiscal cycle.
  • You have a limited set of users.
  • Users are frequently mandated to use the software.
  • Aesthetics are typically the lowest priority.
  • Stability is often negotiable as long as there is a workaround.
  • The deployment environment is well known and can often be controlled if necessary.

This is the typical world of the corporate developer-ugly applications with aggressive time lines, and very forgiving users.  How well do these traits relate to the world of the software vendor marketing to the public at large?  In many ways, they don’t.  Our team quickly started to notice the differences as the project got underway.

Figuring out the Customer Requirements

First, when requirements were unclear, we had no definitive customer who could give us input.  A large corporation might enlist focus groups of potential customers to understand wants and needs, but for a small team, this option is costly in both time and resources.  This forced us to generate the customer requirements internally, which basically meant guessing.

You have control of the requirements!” noted Bryant Smith, a Secret Server developer, when discussing the increased burden on the team to define the feature set. Some developers may feel empowered by this control but it is a dangerous game since the chosen features, their value, and their usability will determine your sales and ultimately the success or failure of the product.

How can we bring customers back into the loop to make these decisions easier and relevant to their real world needs?

Next week’s blog will answer this question, and reveal how aesthetics affects the quality of user experience.

Jonathan Cogley is the founder and CEO of Thycotic Software. Test Driven Development (TDD) is the cornerstone of the Thycotic approach to software development and the company is committed to innovate TDD on the Microsoft .NET platform with new techniques and tools. Jonathan is an active member in the developer community and speaks regularly at various .NET User Groups, conferences and code camps across the US. Jonathan is recognized by Microsoft as an MVP for C# and has also been invited to join the select group of the ASPInsiders who have interactions with the product teams at Microsoft.

The Power of Yield Return

February 19, 2009 Leave a comment

David Cooksey: Using code yield return

February 19th 2009 | David Cooksey

The Power of Yield Return

While working on a project recently I ran into a problem that was very difficult to track down.  We have a good number of checks that validate business rules on the main business object within the system.  Sometimes these checks need to run on related business objects as well.  The problem comes into play at this point, because the checks at the time of their creation do not have a direct reference to the business object they will be run on.  Since the checks have dependencies that vary with their intended target, the convention is to push an Id onto a static stack, create the checks, run the checks, then pop the Id off of the stack.

Unfortunately, it is very easy to forget to update the stack, or to push but not pop. This results in some checks being set up and then run using the wrong dependencies, which causes all kinds of obscure behavior down the road.

Enter Yield Return.

This is a simple wrapper that guarantees the StaticStack is updated correctly.  Even if the calling code throws an exception, the Pop() function will still be called.  Note that the real code uses a context-specific stack, the sample code presented here does not handle multi-threaded situations.

Any foreach statement that iterates over a collection of business objects can then be updated as follows.

What I find most interesting about this pattern is that it allows the called function to run any arbitrary setup or teardown code per object it returns, in synch with the caller’s processing of the object.

David Cooksey is a Senior .NET developer at Thycotic Software Ltd.

Writing Silverlight apps with Dynamic languages like IronRuby and IronPython

February 12, 2009 Leave a comment

Ben Yoder: Iron Python

February 12th 2009 | Ben Yoder

Writing Silverlight Apps with IronRuby and IronPython

As someone who started programming with Java and then moved over to C# and .NET, I have had very few opportunities to program in different languages. This isn’t a bad thing, but there are so many interesting languages out there and few opportunities to apply them.

Fortunately some languages are getting ported over to run on the CLR. This isn’t new: IronPython has been around for a while; as has IronRuby; and the Ada port for .NET (A#) has been available for even longer. There are some new ones on the way as well, such as IronScheme—a Scheme/Lisp port.

But now, with new Open Source Silverlight Dynamic Languages SDK and the Dynamic Language Runtime (DLR) there is an emerging framework for writing Silverlight apps with Dynamic languages such as IronRuby and IronPython.

After visiting the Microsoft Dynamic Language site I was able to get going fairly quickly. Initially I made the mistake of downloading an older version of the Silverlight Dynamic Languages SDK which was compiled with an older version of Silverlight. This caused some issues when trying to run the applications, which I resolved by recompiling the SDK source with references to the current Silverlight dlls.  This is a pain though, and can be avoided by making sure you download the latest version of the SDK which is currently in version 0.4.0. The SDK download page also includes a reference to the version of Silverlight it targets, so double-check the version of Silverlight you are running against the version the SDK uses.

I’m new to these languages, but there is an abundance of information and tools to help you get started. So check out Dynamic Languages SDK 0.4.0, and download Sliverlight if it’s not already installed on your machine.

Those are the only two installs you need to get started.

I used trusty Notepad++ for my text editor and used the included Chiron program to run my apps. This works well, but there are some better options if your looking to integrate with the more familiar environment of Visual Studio. Laurence Moroney at MSDN Blogs explains how to integrate Chiron into a Visual Studio DLR web app. This allows you to code in VS, and start your website using Chiron.

There is also the IronPython Studio which is free and based on the VS 2008 Shell runtime. Even if you don’t have a licensed installation of Visual Studio you can still develop IronPython code in a Visual Studio style environment for free.

While I doubt I’ll be able to integrate any IronPython into our Secret Server Password Management Software anytime soon, it’s great utilizing my Microsoft development tools and knowledge with multiple new languages.

Ben Yoder is a senior .NET developer at Thycotic Software Ltd.

Secret Server on the Treo 700

April 18, 2008 Leave a comment


Secret Server has supported a “Mobile Edition” for over a year now but it is always tricky making sure that it works correctly on all devices.

Our approach was to bake mobile support into the base product (ASP.NET based) so it simply scales down to the capability of the device.  That sounds simple but unfortunately it depends on making sure that functionality will work with all the limitations of various devices.

My own favorite BlackBerry 8820 does a reasonable job of helping me get to the password I need in emergencies but it is hardly a pleasant browsing experience.  In fairness, no browsing on the device is particularly pleasant since it is slow, struggles with most layouts and has a small screen.  That said, I love it dearly and browsing has never been a core requirement for me since email, contacts and calendar are definitely my most essential.

Today we had a customer ask about the Treo 700 so I tried out the emulator from the Palm website.  It seems to work fine with Secret Server and I was able to browse around and access passwords.

Do your web applications support mobile devices and if so how do you test them?

Jonathan Cogley is the CEO and founder of Thycotic Software, a .NET consulting company and ISV in Washington DC.  Our product, Secret Server is a enterprise password manager system for teams to secure their passwords.  Is your team still storing passwords in Excel?

A sign that you are no longer a startup.

April 11, 2008 1 comment


Ok, so it is a really bad pun.  It is tough writing blog post titles sometimes. 🙂

Anyway, we finally got a beautiful metallic official sign for our office after inhabiting our office space for almost two years.  (Now if we could just do something about that door!). 



In our first office suite in Vienna (VA) we had a good excuse for not having a sign since it was shared space and we weren’t allowed sign-age.

In our current space, we actually lasted almost two years with this paper sign.  Not exactly glamorous but it did the job.


This got me thinking … when is the moment that you are no longer a startup? 

A few facts about Thycotic’s beginnings:

  • We were profitable from day one.
  • Our software development consulting business has always been a stable, profitable area.
  • On the product side, Secret Server is self funded, started small and has slowly built a solid customer base.
  • The company was officially formed in 1996 but only hired its first employee other than me in 2004.

So how do we identify a change from startup to mature company?
(if it is has even really happened to us yet)

Could it be?

  • The day you finally turn off the email that tells you when someone bought your product.
  • The day the founder can take more than one consecutive week of vacation.
  • The day you don’t know how many employees are in the company (this has already happened but that is just because I have a hard time figuring it out on the fly).
  • The day that the company hires someone the founder didn’t hire or even meet.
  • The day you walk by someone in the hall you have seen often but have no idea who they are.
  • The day you are bought out by some monster corporation. (assuming you want to be bought out … which we don’t)

What would you define as the tipping point?  In the meantime, we are going to continue admiring our new sign. 🙂


Jonathan Cogley is the CEO and founder of Thycotic Software, a .NET consulting company and ISV in Washington DC.  Our product, Secret Server is a enterprise password manager system for teams to secure their passwords.  Is your team still storing passwords in Excel?

Code Camps this weekend!

April 11, 2008 1 comment

CodeCampLogo There are two code camps this weekend:

I will be speaking at the Pittsburgh Code Camp on Refactoring – a topic that is very dear to me.

Register now and come along to talk code.


We are hiring!  Do you want to write beautiful code in a Test Driven, Refactored, Agile .NET software company in the heart of Washington DC and work on cool products?  Take the code test and send your resume along with why you want to join Thycotic to

When you apply for a job, read the job posting!

April 8, 2008 17 comments

I am constantly amazed by the number of job candidates who apply for a position without reading the job posting. We are currently hiring for three positions:

  • Agile .NET Developer
  • Agile .NET Developer Internship
  • Graphics Designer

All three involve *doing* something in order to be considered for the position – for the developer positions it requires completing a code sample and sending it in with your resume. For the graphics designer position, it requires putting together a fun design and sending it in with resume.

image I have not kept accurate numbers (since we have run the postings for a while now with lots of applicants) but roughly 1 out 2 candidates for the developer positions and a whopping4 out of 5 candidates for the graphics designer position do not submit their design/code. If I receive 20 applications in two days and your application is canned and does not include the design/code – then guess what happens to yours? … it gets DELETED. Can you believe that there are many applicants who just send a resume without even a cover letter?

If you can’t bother to read a job posting, why do you expect someone else to bother reading your resume?

It is truly amazing that some people believe their resume alone will make them stand out – I imagine many companies don’t even open the resume if the applicant hasn’t met the requirements of the job posting – I know we don’t.

A job is an significant part of our lives and should be treated with importance.

When you next apply for a job:

  1. Read the job posting entirely.
  2. Submit any additional samples/code as required.
  3. Research the company, understand what they do and why you might want to work there.
  4. Write a good cover letter explaining what you find interesting about the company, team or position.

Take these simple steps and you will stand out.

We are hiring! Do you want to write beautiful code in a Test Driven, Refactored, Agile .NET software company in the heart of Washington DC and work on cool products? Take the code test and send your resume along with why you want to join Thycotic to (don’t forget to read the job posting! :))