I built a DSL for creating easy to build tests for a frequently updated enterprise web application. Selenium and it's counterparts, while very powerful were entirely too much to take on for many people and the vendor's testing was kind of a joke.
What my DSL did was translate a lot of language into terminology that made more sense to people in that space, and wrapped frequently used combinations of functions together. I.e. if we wanted to test if an element was present in the navigation bar, we wouldn't have to find the navigation bar slideout toggle switch, validate that it was open or open it, ensure that the navbar was populated, then use an xpath query to determine whether it was present, we could just declare a simple one line test.
I had no experience with building DSLs (Domain Specific Languages) previously, no experience building an IDE, and no experience with creating or parsing syntax trees. I just knew that there was a problem and it needed to be solved.
What was conceptually very simple turned complex quickly as I ferreted out the long term goals and researched how I could build something that I could responsibly transition to people less willing to hack their way through things.
I could have built an API rather than a whole new language, but I had compelling reasons not to go that route.
Did it catch on? Yes, and no. It's been 4 or 5 years since I released it to a customer and it's still being actively used. The entire target market was less than 3000 customers, so it was never going to be a household name.
I have to say it was one of the more eye opening projects that I have taken on. The growth experience was infinitely valuable, and like all lower-level things it provided great perspective that can be useful on a variety of projects.
What my DSL did was translate a lot of language into terminology that made more sense to people in that space, and wrapped frequently used combinations of functions together. I.e. if we wanted to test if an element was present in the navigation bar, we wouldn't have to find the navigation bar slideout toggle switch, validate that it was open or open it, ensure that the navbar was populated, then use an xpath query to determine whether it was present, we could just declare a simple one line test.
I had no experience with building DSLs (Domain Specific Languages) previously, no experience building an IDE, and no experience with creating or parsing syntax trees. I just knew that there was a problem and it needed to be solved.
What was conceptually very simple turned complex quickly as I ferreted out the long term goals and researched how I could build something that I could responsibly transition to people less willing to hack their way through things.
I could have built an API rather than a whole new language, but I had compelling reasons not to go that route.
Did it catch on? Yes, and no. It's been 4 or 5 years since I released it to a customer and it's still being actively used. The entire target market was less than 3000 customers, so it was never going to be a household name.
I have to say it was one of the more eye opening projects that I have taken on. The growth experience was infinitely valuable, and like all lower-level things it provided great perspective that can be useful on a variety of projects.