Software development is complex, expensive and time-consuming. Every business wants to get the highest return on projects, yet success remains typically grounded in meeting one’s schedule, scope and budget. We argue that different metrics, focused on the business outcomes of the delivered software, are more realistic measures of success.
1 Jun 2014
An Inception is a collaborative design process for a group of stakeholders to share the same understanding about an upcoming project. It is an activity focusing more on “why we do it” rather than “how we do it”. The methods of conducting an inception continually evolve as we face different situations with each client. A good Inception practitioner should always…
30 May 2014
At Data Geekery, we love Java. And as we’re really into jOOQ’s fluent API and query DSL, we’re absolutely thrilled about what Java 8 will bring to our ecosystem. Java 8 Friday Every Friday, we’re showing you a couple of nice new tutorial-style Java 8 features, which take advantage of lambda expressions, extension methods, and … Continue reading Java 8…
29 May 2014
This week, Timo Westkämper from QueryDSL has announced feature completeness on the QueryDSL user group, along with his call for contributions and increased focus on bugfixes and documentation. Timo and us, we have always been in close contact, observing each other’s products. In the beginning of jOOQ in 2009, QueryDSL was ahead of us. But … Continue reading QueryDSL vs.…
Check out how easy it is to integrate PubNub and your app, in this case, a real-time chat app.
Check out how easy it is to integrate PubNub and your app, in this case, a real-time chat app.
One of my more popular blog entries is on using Ember.js without Ember Data. Recently I’ve been going through my old entries and making sure they don’t have any glaring mistakes, and I realized this would be a good opportunity to convert my emberreddit project to ember-cli. This screencast shows how you can build an Ember.js application without using Ember…
28 May 2014
What if developing an application just took 1-2 days? What if I can create it myself with only 10 clicks? What if I don’t need you developers anymore? Said every manager since the beginning of history. This is what all managers dream of. Click click click, next next next, and you’re done! Easy, right? Time-to-market: … Continue reading What if…
27 May 2014
Recently, Thoughtworks Kampala hosted a seven-week long training program called Level Up, for students at the Makerere University in Uganda. The aim of the program was to teach students best practices in software development as a part of Thoughtworks’ capacity building program. Background
Starting a new airline in today's highly competitive and volatile market is a challenge that comes with substantial market and operational risks.
There is an intriguing ongoing debate between Martin Fowler, Kent Beck and David Heinemeier Hansson (DHH) about Test Driven Development (TDD) and its impact on software design. Though there were strong agreements and disagreements all along the way, one thing stood out to me all the way - there is no right or wrong answer. The answer depends on the…
26 May 2014
Yet Another 10 Common Mistakes Java Developers Make When Writing SQL (You Won’t BELIEVE the Last One)
jOOQ(Sorry for that click-bait heading. Couldn’t resist ;-) ) We’re on a mission. To teach you SQL. But mostly, we want to teach you how to appreciate SQL. You’ll love it! Getting SQL right or wrong shouldn’t be about that You’re-Doing-It-Wrong™ attitude that can be encountered often when evangelists promote their object of evangelism. Getting … Continue reading Yet Another…
This post is intended for people with a little bit of programming experience and no prior mathematical background. So let’s talk about numbers. Numbers are curious things. On one hand, they represent one of the most natural things known to humans, which is quantity. It’s so natural to humans that even newborn babies are in tune with the difference between…
The Code Club program was created early last year in the wake of the unfavorable review of UK high school ICT curriculum. Its aim is to give every child in the UK the chance to learn to code, specifically targeting 9 to 11 year-olds.
No one dreams of spending their Friday night sleeping on the streets of Manchester UK in the cold rain. Yet a team from Thoughtworks Manchester did just that to build awareness and raise money for the UK charity, Action for Children, which helps to tackle the root causes of why young people find themselves on the streets. This annual event…
24 May 2014
Go has several ways to declare a variable. Possibly there are more ways than are strictly required but with the Go 1 contract in effect it’s not going to change. This short post gives examples of how I decide which variable declaration syntax to use. These are just suggestions, they make sense to me, but […]
"Unlock the power of Unix-style modular syncing and encryption."
On our journey to allow for faster delivery times, wowing customers with new features and allowing for quicker support, we made a decision to move Mingle to a 'Software as a Service' on the cloud. We spent a few months architecting Mingle to suit the features and limitations of the cloud and this is the story about that effort.
23 May 2014
At Data Geekery, we love Java. And as we’re really into jOOQ’s fluent API and query DSL, we’re absolutely thrilled about what Java 8 will bring to our ecosystem. Java 8 Friday Every Friday, we’re showing you a couple of nice new tutorial-style Java 8 features, which take advantage of lambda expressions, extension methods, and … Continue reading Java 8…
Developers want to spend less time setting up applications and start working with the code sooner. Setting up applications is error-prone, time consuming and interruptive to the development flow. Often, there are several steps to go from your code or other samples and templates that you find in repositories online, to a running application that […] The post Introducing the…
Over a year of presenting agile fundamentals to teams has taught me that the topic of estimation seems to strike fear and horror into people. The process of estimating seems to go something like this:
Lean product design is a software development process for creating innovative new products. It enables businesses to get their product to market fast, validate it frequently with users, and continuously respond to feedback. The process involves interweaving lightweight design and user research throughout an agile development process, rather than relying on most of the product design and research to be…
22 May 2014
If we want to analyse execution plans on the SQL console, we probably need to find a SQL_ID first, which we can the pass to the DBMS_XPLAN.DISPLAY_CURSOR function. One way to find this SQL_ID is by querying the v$sql table first, e.g.: Now, often, you will then get an error message like: ORA-00942: table or … Continue reading Oracle Tip:…
Go obtains much of its compilation speed from the Plan 9 compiler, of which it is a direct descendant. The Plan 9 toolchain deferred much of the work traditionally performed by a compiler to the linking stage and its performance was summarised in section 8 of this paper The new compilers compile quickly, load slowly, […]
Disruptive thinking, done visually. It’s about making your thought process visible to others to affect change. It’s about corporate graffiti as an influencing technique.
21 May 2014
Today, we are announcing an important addition to the Heroku Platform API: The /apps/:app/builds endpoint. This endpoint exposes the Heroku slug compilation process as a simple API primitive. You can use the endpoint to turn any publicly hosted source-tarball into a slug running on a Heroku app in seconds. Here’s output from a Go program […] The post Introducing programmatic…
Subscribe to this newsletter here Tweet of the Day Our customers, users, and followers are sharing their love for jOOQ with the world. Here are: Chris Martin who has switched jobs and is now really missing jOOQ. Too bad we can’t offer jOOQ for Python, Chris! Moutaz Salem who had been waiting for jOOQ for all these … Continue reading…
UK businesses have been rather slow when it comes to embracing the internet and, more specifically, online payments.
Lalit Pant is a prominent Scala contributor based out of Dehradun. He is the creator of a learning software platform called Kojo. We invited him to give the keynote at the First Annual Pune Scala Symposium where he demoed the power and simplicity of Kojo.
20 May 2014
Today we’re open sourcing the toolchain Heroku uses to design, document, and consume our HTTP APIs. We hope this shows how Heroku thinks about APIs and gives you new tools to create your own. This toolchain includes: An HTTP API design guide, describing how we structure both internal and public-facing APIs and document them using […] The post The Heroku…
Build customizable and interactive user interfaces and a real-time dashboard to monitor your IoT connected devices with freeboard from Bug Labs.
Build customizable and interactive user interfaces and a real-time dashboard to monitor your IoT connected devices with freeboard from Bug Labs.
Heartbleed is a bit over one month old now. A bug significant enough to have its own Wikipedia page. Today, we’re going to look into how wrong we have been in assuming that Open Source software is more secure than commercial software, because of our thinking that source code is open and that many developers … Continue reading Free as…
Innovation is Not Magic
“That which we call a rose by any other name would smell as sweet.” - William Shakespeare Or would it? Despite what Juliet argues in Romeo and Juliet, names do matter. Moving to a new office space in Chicago in 2006 created an opportunity to rebrand the Thoughtworks space and honor progressive innovators and leaders at the same time. Here’s…
19 May 2014
Today, we’re happy to announce General Availability of the Heroku Platform API. Heroku is a platform built by developers, for developers. As developers, we understand the utility of APIs and the power APIs give to speed up and script error-prone manual processes or to combine other services with Heroku into new and exciting products. With […] The post Heroku Platform…
Everything you need to build real-time web and mobile apps with PubNub and AngularJS tutorials, including walkthroughs, and demos.
Everything you need to build real-time web and mobile apps with PubNub and AngularJS tutorials, including walkthroughs, and demos.
Are your customers reluctant to use Direct Debit? We've put together some tips on addressing the two main customer concerns...
This is a quick post to discuss an interesting bug that was recently unearthed by go vet. The following code is a simplified reduction of a larger piece of code. In the original code the if statement was much larger, encompassing several complicated conditions, making the bug hard to spot visually. package main import "fmt" […]
Graphs are among the most interesting and useful objects in mathematics. Any situation or idea that can be described by objects with connections is a graph, and one of the most prominent examples of a real-world graph that one can come up with is a social network. Recall, if you aren’t already familiar with this blog’s gentle introduction to graphs,…
In Part 5 of our interview series with testers who are upping the testing ante, we chat with Justin Rohrman (@JustinRohrman). Justin is a long time tester and an instructor for the Black Box Software Testing classes run by the Association for Software Testing (AST). He is also a Miagi-do black belt, and was part of the review committee for…
17 May 2014
You’ve given a talk. It went great, and now everyone wants to see the slides. Hurray! Before we do anything else: give yourself a high-five. Giving a talk is hard, and you did it! This is something to be proud about. Here’s the thing about slides, though: if you did them right, your slides should be pretty sparse. They’ll have…
16 May 2014
I’ve always found Portable Class Library (PCL) configuration to be a bit of a mystery. In simple cases, it’s simple: start a new PCL project in Visual Studio, select the environments you want to support, and away you go. But what’s going on under the hood, and what do all the options mean? How do … Continue reading Diagnosing Portable…
At Data Geekery, we love Java. And as we’re really into jOOQ’s fluent API and query DSL, we’re absolutely thrilled about what Java 8 will bring to our ecosystem. Java 8 Friday Every Friday, we’re showing you a couple of nice new tutorial-style Java 8 features, which take advantage of lambda expressions, extension methods, and … Continue reading Java 8…
Direct Debit can help you with one-off and recurring payments - both fixed and variable - but there are some types of transaction which you shouldn't ever use it for.
15 May 2014
Bower power! AngularJS is now PubNub-enabled. This blog shows you how to integrate your AngularJS library with your web or mobile app.
Bower power! AngularJS is now PubNub-enabled. This blog shows you how to integrate your AngularJS library with your web or mobile app.
Here’s a guide to help you figure out whether the time is right
Today we’re open sourcing the toolchain Heroku uses to design, document, and consume our APIs. We hope this shows how Heroku thinks about APIs and gives you new tools to create your own APIs. This toolkit includes our HTTP API design guide, the prmd tool for managing JSON schemas and generating API docs, and client […] The post Introducing the…
14 May 2014
This blog post walks you through the different ways to use PubNub and AngularJS for presence user detection.
This blog post walks you through the different ways to use PubNub and AngularJS for presence user detection.
13 May 2014
Today we are announcing the general availability of Salesforce1 Heroku Connect. This new Heroku product is a synchronization service, conceptually similar to Dropbox or iCloud, that synchronizes data between a Salesforce deployment and a Heroku Postgres database. By bringing together the data layers of the Force.com and Heroku platforms–and thus allowing the same data to […] The post Introducing Heroku…
How to add access management to your AngularJS web or mobile app. Manage granular permissions for your real-time apps and data.
How to add access management to your AngularJS web or mobile app. Manage granular permissions for your real-time apps and data.
SQL Server is known to have a very strict interpretation of the SQL standard. For instance, the following expressions or statements are not possible in SQL Server: Strictly speaking, that limitation makes sense because the above ROW_NUMBER() or OFFSET expressions are non-deterministic. Two subsequent executions of the same query might produce different results. But then … Continue reading SQL Server…
We still don’t recommend using Direct Debit for instant payments like e-commerce but Direct Debit is a safe, easy and inexpensive way to collect one-off payments.
It has been roughly 4 years since I quit my industry job and decided to become a consultant. Before making my decision, I remember searching the Internet to see if I could gain any insight into what to expect. Unfortunately, there just didn’t seem to be many people sharing their own experiences about what it was like to go from…
One of our clients, a large media group in Latin America, came to us with a mobile project. Their online television division wanted to ensure viewers could watch their favorite programs at any time, anywhere. After the successful launch of their iPhone app, we were brought in to build an Android application with video-on-demand.
The recent “Is TDD Dead?” hangout between DHH, Martin Fowler and Kent Beck has made the level of dissatisfaction about too much mocking and stubbing when writing automated tests pretty clear. DHH expressed his strong opinions about fundamentalism around tests that can’t access collaborators. This has also been a key point in Martin’s recent post. The three of them claimed…
A design critique session can be tough. Some people don’t feel comfortable enough to give an honest opinion and limit themselves to giving positive feedback. Others will only observe the negatives. And most folks base their critique on their own biased aesthetic viewpoint rather than focusing on the purpose of the design (form follows function, remember?). These and a number…
12 May 2014
Recently, at the office: Bob: I’ve looked into that slow query you’ve told me about yesterday, Alice. I’ve added the indexes you wanted. Everything should be fine now Alice: Thanks Bob. I’ll quickly check … Nope Bob, still slow, it didn’t seem to work Bob: You’re right Alice! It looks like Oracle isn’t picking up … Continue reading The Index…
“Banking is necessary, but banks are not.” - Bill Gates
Gatling is a powerful open-source Performance Test tool released in December, 2011. It was also mentioned in the Thoughtworks Radar 2013 and 2014 as a tool worth trying. Gatling is a lightweight DSL written in Scala that comes with the interesting premise of "treating your performance tests as production code".
Getting a different team to take over the development of an application brings in challenges from multiple perspectives. There will be differences around processes, engineering, as well as culture. Larger transfers would also involve changes to infrastructure. For long, the industry has done a disservice to this field by calling it “Knowledge Transfer”. Knowledge transfer is but a subset of…
11 May 2014
Recently some of my colleagues at Thoughtworks (@TheSubversiveBA, @JessicaKeeney) and I ran a workshop at Harvard's Women in CS WECode Conference. The conference turnout was 350 amazing and talented young women from high schools and universities in Boston and nearby states.
9 May 2014
At Data Geekery, we love Java. And as we’re really into jOOQ’s fluent API and query DSL, we’re absolutely thrilled about what Java 8 will bring to our ecosystem. Java 8 Friday Every Friday, we’re showing you a couple of nice new tutorial-style Java 8 features, which take advantage of lambda expressions, extension methods, and … Continue reading Java 8…
Learn about this procedure for validating sort code and account number combos.
I have updated my unofficial ARM tarball distributions page with prebuilt Go 1.2.2 and Go 1.3beta1 tarballs. You can find them by following the link in the main header of this page.
Let’s talk about the stream. The SoundCloud stream represents stuff that’s relevant to you primarily via your social graph, arranged in time…
For the impatient, TheBot was an experiment to kickstart a hardware engineering culture at Thoughtworks. We choose the Raspberry Pi (RPi) as the prototyping platform and Golang as the language in which to create the firmware. We felt the need for a solid hardware abstraction layer (HAL) which would allow us to not only target the RPi, but soon expand…
With the expansion of the Internet of Things (IoT), and the diversity of products and technologies, the one thing that everyone agrees on is that it's time to start agreeing: the Internet of Things needs standards. Many agree that it needs open standards, like those that underpin the Web.
8 May 2014
ADDACS messages are the messages you receive from your customer’s bank if a mandate has been cancelled or amended by your customer.
Designing a new and innovative product can be a challenging process filled with uncertainties. From a business perspective, you need to explore and keep at the forefront of what is happening in the market, search for unique opportunities and listen to customer’s needs until you discover a meaningful solution. But once you have a new product idea, the design process…
Recent movements have given Product Managers wonderful tools for minimizing waste. Eric Ries has his build/measure/learn loops. Steve Blank calls for us to "get out of the building". Clay Christensen’s Jobs to Be Done framework gives us new ways to think about the roles that our products play in user’s lives. They all tell us that you need to get…
While on vacation, I received the following text from a colleague. “Was another mad week with nights getting home at 3am and lots of people less than happy. But nothing to worry about. I’m on it.” The text got me thinking about those 3am nights. In the 20 years of software development projects, I’ve experienced a number of times when…
Thoughtworks Pune has been using Scala successfully for past couple of years on a few projects. In the spirit of contributing back to the community, we hosted the first ever Pune Scala Symposium on 12 April 2014. The primary goals of the conference were to get practitioners together, share learnings with others, motivate the uninitiated to take a plunge, and…
7 May 2014
I have several projects on the hop at the moment which require control over a serial port, actually a serial port emulated over USB. So for the last few days I’ve let myself be distracted by writing yet another serial package for Go. github.com/pkg/term term is built on a lower level package, called termios which provides […]
I’ve recently stumbled upon this interesting Stack Overflow question, where the user essentially wanted to ensure that resulting records are delivered in a well-defined order. They wrote They got CE367FAACDHCANPH-151556 CE367FAACEX9ANPH-153877 GE526OTACCD3ANPH-149839 NI564FAACJSFANPH-162605 They wanted CE367FAACDHCANPH-151556 CE367FAACEX9ANPH-153877 NI564FAACJSFANPH-162605 GE526OTACCD3ANPH-149839 Very often, according to your business rules, sorting orders are not “natural”, as in numeric sortin
An AUDDIS report is triggered when there is a problem during mandate setup. We thought it might be useful to explain some common pitfalls and how you can avoid or resolve them.
Implementing a deployment pipeline does not have to be difficult, and this article will show you how to use Thoughtworks' SnapCI to deploy a static website to the cloud using Amazon Web Services (AWS).
Big Data Pipeline powered by Scala Session presented by Rohit Rai, tuplejump Rohit is a founder and the CEO of tuplejump Inc. Rohit is a true polyglot with experience in a number of programming languages. He is also a prolific open source contributor. He has been working in Scala, Akka, Play and the ecosystem for over 4 years. Tuplejump is…
Mushtaq is probably the biggest Scala enthusiast and evangelist in all of Thoughtworks! He has been programming in Scala for a long time, and has also been coaching for quite some while. (Keep an eye on @punescala for our Scala training programs.)
Scaling your startup's data platform using Akka, Scalding, and Spark - Session presented by Rajesh Muppalla, Indix Rajesh is a co-founder and director of engineering at Indix, a product intelligence platform for retailers and brands. He leads a team responsible for collecting, organizing, and structuring all the product related data collected from web. His main areas of focus are big…
Promise of a Better Future - Session presented by Rahul Goma Phulore and Pooja Akshantal, Thoughtworks Pooja and I have been working on a large scale Scala project at Thoughtworks for more than a year now, and have been using Scala, Play, and a teensy bit of Akka successfully. We have been using future-based concurrency, which is what this talk…
Scala in Practice: 3 years later - Session presented by Patric Fornasier, Springer Patric, a former Thoughtworker, is now a technical principal at Springer where he primarily writes code and helps teams deliver software effectively. He has experience with wide range of tools, languages, and technologies. Three years ago, Springer decided to use Scala on a large, strategic project. This…
Number Crunching in Scala - Session presented by Chris Stucchio, BayesianWitch Chris is one of the founders of BayesianWitch, a web analytics company built almost entirely on Scala. He is currently focused on improving the scientific computing ecosystem in Scala.
Keynote talk: Kojo, a Scala based learning environment for children - Session presented by Lalit Pant, Kogics Lalit Pant is a software architect cum teacher based out of Dehradun. He spends his time creating educational software , and teaching computer programming and math to children. In addition, he runs an NGO called Kalpana learning center.
6 May 2014
Today, we’re excited to announce public beta of two-factor authentication for Heroku accounts. With two-factor auth enabled, an authentication code is required whenever you log in. The code is delivered using an app on your smartphone, and access to your phone becomes a required factor (in addition to your password) to access Heroku. An attacker […] The post Two-factor Auth…
An ARUDD report is triggered when a payment fails. In this article, we explain the two most common reasons for payments failing and how you can avoid or resolve them.
There is a certain connotation with the word estimate. People think of cost and time. Think about the last time a mechanic fixed your car or you hired a painter to put a fresh coat of paint on the third floor windows. You are thinking about time and cost aren't you? When we start thinking about a software project we…
5 May 2014
Every now and then, I miss SQL’s three-valued BOOLEAN semantics in Java. In SQL, we have: TRUE FALSE UNKNOWN (also known as NULL) Every now and then, I find myself in a situation where I wish I could also express this UNKNOWN or UNINITIALISED semantics in Java, when plain true and false aren’t enough. Implementing … Continue reading Three-State Booleans…
4 May 2014
Gophers gather for insightful talks on Go's best practices and innovations.
Now that go1.3beta1 has been released I’ve updated the autobench-next branch to track Go 1.2 vs tip (go1.3beta1). Using autobench is very simple, clone the repository and run make to produce a benchmark on your machine. % cd devel % git clone -b autobench-next https://github.com/davecheney/autobench.git % cd autobench % make You can stay up to date with […]
3 May 2014
Javascript is a fantastic example of how something, despite having visible warts and very poor design, can dominate the tech landscape. Nobody uses Javascript because it’s a beautiful language; they use it because it’s ubiquitous. Its warts are now well understood and most have workarounds. An amazing omission in Javascript’s design is the lack of a built-in module system. As…