The Difference Community Makes

In a recent post, I talked about my background as a software developer, teacher, and developer advocate, and how I ended up finding and liking Low Code, and more specifically, the OutSystems platform. In this post, I want to talk about the importance of the software development community, and why community is one of the things that’s helped keep me in the OutSystems orbit.

Starting Fresh

Some twenty-five plus years ago, when I left behind the world of building sets, hanging lights, and long hours for little compensation of the regional theatre world, I really wasn’t sure how I was going to manage in the world of I.T. I got some good advice early on from a relative and got a few certifications, and managed to land a few jobs, first doing help desk work, and later training folks at the Pentagon in using Windows 95. Glamorous work, to be sure! I realized pretty quickly that writing software was the direction I wanted to go, but had no idea how to get there.

Enter Community

As it happens, around this time I signed up for a local event called Microsoft DevDays, which featured a series of talks by software developers from area consulting and software companies. One of these talks was given by Geoff Snowman, and he impressed me with his knowledge and presentation, so I stuck around to ask some questions, including how someone like me could get started in professional software development. A bit of conversation later, he invited me to send him a copy of my resume. A few emails, and another certification later (got my certification in Visual Basic 4, for the record), I landed my first job as a software developer.

While I’m not sure I’d classify DevDays as a pure community event, since it was organized by Microsoft, it did feature speakers from the local developer community, so I think one could call it my first exposure to that community.

My next stroke of luck was being assigned to a project with two of my new company’s top developers, one of whom was a big fan of user groups, and got me connected with the user group community in the Washington, DC area. I started regularly attending user group meetings, particularly the Internet Developer User Group and SQL Server User Group, and I learned a lot quickly as a result, and got to know a ton of great people. Eventually, I started speaking at the user groups as well, and a few short years later, I was invited to speak at the 2004 DevDays event. It was after that event that I was approached about whether I might be interested in a role at Microsoft as a Developer Evangelist.

In short, it’s not an exaggeration to say that much of my success in my career came as a direct result of finding and participating in a rich and robust developer community.

The OutSystems Community

My journey with OutSystems was in some ways a mirror of that with Microsoft in that I started in OutSystems by being hired by them, first as a Solution Architect (technical pre-sales), and later as a Developer Advocate (teaching about the platform, and sharing feedback from developers back with internal folks). In that latter position, I worked closely with the OutSystems community, particularly with the folks who were part of the MVP program.

A big strength of the OutSystems platform is the community that surrounds it. The MVPs are both advocates for the platform, but also passionate critics when there are things that they see that need improvement. Having fans who only tell you what you want to hear is not a great way to have a strong platform over time, so being able to hear feedback that the MVPs provide is really important, even if it wasn’t always comfortable on the receiving end.

The OutSystems community is also really helpful in providing support to one another through the OutSystems Forums, and in sharing reusable solutions and components in the OutSystems Forge. OutSystems helpfully provides a home page for the community at https://www.outsystems.com/community/.

OutSystems Community Home Page

On the Community page, you can find links to relevant information like the Forums, Forge, Documentation, MVP program, and events (including user groups).

I recall that at one of the first OutSystems events I attended as an employee, the NextStep conference in Boston in 2018, I was approached by Mário Araújo, who at the time was running the Developer Relations team at OutSystems, to pick my brain based on the 10 years I’d spent working with developers while at Microsoft. I liked that he (and others I’ve since worked with at OutSystems) wanted to better understand developers and how best to serve them (and how to explain to execs what developer relations is and why it’s important…such activities do require budget and buy-in, after all).

OutSystems has provided good infrastructure (Forums, Forge, several community recognition programs, etc.), and had the savvy to incentivize participation through a bit of gamification of the community sites. Community members receive points for responding to forum posts, but more points for having their answer marked as a solution, which at least in theory incentivizes quality over quantity. Points are also rewarded for publishing components to the Forge, and there are other categories as well. I would agree with those who say there’s room for improvement here, but I do think overall the gamification has strengthened the community by encouraging more consistent participation. OutSystems also has a team dedicated to supporting, understanding, and improving their platform for developers, a team I was proud to be a part of.

Find Your Community

Community has changed a lot since my early days in the developer community. What was once mostly in-person and a some online has shifted to more online with some in-person (if you’re in the OutSystems space, you can find local user groups near you on the OutSystems User Groups website), but there are still plenty of opportunities to get involved, learn more about your chosen technology, and meet folks with similar interests. Even better, you can share what you know, and help someone else who is getting started.

A developer community is a great example of a win-win for a company like OutSystems and the developers working with the platform. OutSystems gets the advantage of a group of enthusiasts sharing knowledge and helping one another be more successful with the platform, and the developer community gets the help they need, and the infrastructure to find one another, ask and answer questions, and find and share software solutions.

I have little doubt that much of the success and joy I’ve experienced in my career in software development and developer education and advocacy can be attributed to my participation in the developer community. The friends I made, the knowledge I gained, the mentorship received, all of these acted as accelerators on the path to improving as a developer and teacher.

Whether you’re an OutSystems developer, or have chosen a different software stack, I encourage you to seek out and be a part of the community for your platform. You can get help when you need it, share knowledge with others, provide feedback on the platform, and be a part of something rewarding!

When You Need A Balloon, A Tooltip Just Won’t Do

If, like me, you started your OutSystems journey prior to the mainstreaming of the Reactive Web and Mobile versions of OutSystems, you may have encountered the Balloon pattern, which was originally a part of the Silk UI framework, and continues to be available in OutSystems UI, but only if you are building Traditional Web applications.

The Balloon…A Superior Tooltip

The Balloon pattern is essentially an enhanced Tooltip with support for more content options than a Tooltip would typically allow. Where a Tooltip supports only a single content area, and is generally used for simple text-based content, the Balloon pattern provides more flexibility with a title, content, and footer area. Both patterns provide a selection of triggers (hover, click, or manual), and the ability to select the position of the element relative to the element that it is related to.

Tooltip and Balloon Patterns in a Traditional Web App

As noted above, though, the Balloon pattern is only available when using OutSystems UI in a Traditional Web application…so if you want the UI flexibility afforded by the Balloon, you’re out of luck…or are you?

Forge to the Rescue!

During a recent project, my team had a need for the kind of functionality the Balloon pattern provided, but we were working with the Reactive Web application type, so the Balloon pattern from OutSystems UI wasn’t an option. What to do? Check the Forge, of course!

If you're not familiar with the Forge already, it's OutSystems' repository of UI patterns, connectors, extensions, sample applications, and more. With more than 5,000 shared assets, if you need to do something that isn't directly supported by the platform, there's a good chance it may already be available on the Forge. It's important to note that the Forge is a mix of assets created by teams at OutSystems (many of which carry the "Supported" designation), as well as those created by the OutSystems community, which are not supported by OutSystems, but may be supported by the creator. Some community-provided assets carry a "Trusted" badge, which means they've gone through a review process to assess quality and more. Details can be found here.

Searching the Forge for “Balloon” returns 3 results:

Searching the Forge

Of the 3 results, 1 is for Traditional Web, so that’s out. When looking for a component or widget on the Forge, I typically look at both the number of downloads and the number of reviews as an indicator of which components are more widely used. I’ll also sometimes check the Support tab in the component listing, and see whether the author has added documentation. Both of the components above for Reactive Web are pretty similar in those areas, so in this case, I reached out to some folks internally to see what they’ve used, and Balloon Tippy.js got the nod.

Using the Component

Once you’ve decided on a Forge component to use, you have two options. You can download the component from the Forge website, and add it to your project by opening the downloaded version from Service Studio or Service Center, or my preferred method, you can go to the Forge tab in Service Studio, locate the desired component, and install it from there.

Balloon Tippy.js Component in Service Studio

Note that some components also include a demo, which can be helpful in understanding how to use the component. Once installed, the component is essentially just another OutSystems application, meaning you can open it up, inspect the UI, flows, JavaScript, etc. to better understand how it operates, tweak it to suit your needs, etc.

Once you’ve installed the component, you’ll need to add a reference to the desired UI blocks, flows, and entities, depending on the functionality exposed, and what you need for your use case. In my case, I’m just selecting everything Balloon Tippy.js has, since it’s a pretty simple component.

Adding Balloon Tippy Dependencies

Once the dependency has been added, using the component is exactly the same as using the Balloon pattern from Traditional Web. Simply locate the Balloon widget in the toolbox, drag it to the desired location on the screen, add the desired Title, Content, and Footer, and set the WidgetId property to the Id of the widget you want to use to trigger the display of the balloon on hover or click.

Using Balloon Tippy.js

Wrap-Up

The moral of the story here is two-fold. One, if you are finding the Tooltip pattern to be a little restrictive, and want more flexibility for your content, the Balloon pattern is there for you if you’re using Traditional Web (and I’m sure some of you still are). Two, if your favorite pattern has been deprecated, or if you’re looking for something that the OutSystems platform doesn’t natively support, it’s worthwhile to check out the Forge to see if OutSystems or the community have provided that functionality for download. Sometimes, as in the case of Balloon Tippy.js, the component may even be essentially a drop-in replacement that works exactly like the one its replacing, making it super-easy for you to implement in your applications.

Would love to hear your favorite components or patterns…feel free to drop them in the comments!