Agile is the process digital technology needs

Allan Kelly from Allan Kelly Associates

1200px-Workers_in_the_fuse_factory_Woolwich_Arsenal_Flickr_4615367952_d40a18ec24_o-2018-07-18-12-19.jpg

In my presentation at Agile on the Beach last week I continued my discussion of Agile and Digital. It is increasingly clear that digital and agile are intrinsically linked. Specifically, business need agile processes to get the most out of digital technology. My “Agile, Digital & the new management paradigms” presentation is online but let me give you the argument here.

There is a long standing model of technology change – so widespread I can’t find the original source – which says change comes in three steps:

  1. First new technology allows the same processes and activities to be done better, faster, cheaper, more efficiently. In this stage new technology is used to do the same things, the processes and practices change little.
  2. Next new technology allows process and practices to be reconsidered and changed to make the most of new technology. Work becomes even better – whether that be faster, cheaper, higher efficiency, superior products, whatever.
  3. Finally new innovations appear because of the technology and new processes. One can see opportunities for new businesses, new business models, the next round of technology innovation and more.

So the whole thing repeats.

Look at the photo above. According to WikiCommons this is a picture of a factory at Woolwich Arsenal sometime in the 1800s. Notice the belts stretching from the ceiling to the workstations. These carried power, or to be more precise motion. Above the workers is the line shaft which turns. The shaft is driven by a central power (motion) source somewhere, probably a water wheel or a steam engine.

This is before electricity. The line shaft and the belts carry the power the factory needs to work. And they break, the longer they are the more prone to breaking they are. Factory design is constrained by the need to have straight lines for the line shaft and short distances between the shaft and the workstation. And factory design dictates layout and processes.

Then came electricity.

Electricity allowed each workstation to have its own motion generator. At first factory owners used electricity to do the same things faster and more reliably. They could dispense with the steam engine and thus the stokers and coal it needed. But at first they didn’t seize all the advantages electricity brought.

It took time to understand how a factory could be laid out more efficiently and how processes could be changed. When they did factories got even more efficient and faster. Some might argue that it took the coming of Lean manufacturing to complete these process changes.

The same story has played out in industry after industry with technology after technology. Think of Word processors: first they helped secretaries do their job faster, then processes changed and everyone wrote themselves, goodbye secretaries. Containerisation in the shipping industry is another. First ships loaded and unloaded faster. Then the shipping companies innovated but more importantly world trade innovated. Some observers claim containerisation was a more significant factor in trade globalisation than free-trade agreements.

Digital technology is like electricity. It changes business, it creates new opportunities for doing things differently. To get the most from digital technology you need new processes. Right now most companies are stuck – even happy – doing things faster. Only when they change processes will they get the full benefits.

Agile processes are that change.

Agile ways of working help companies get more from digital technologies. Without Agile companies using digital technologies are just doing the same old thing faster.

Agile started in software development for two reasons. First software developers had a lot of problems, they had the need to change. Second, programmers had the first access to digital technologies.

Ray Tomlinson, a programmer, was the first person with e-mail. Tim Berners-Lee, a programmer, had the first web-browser. Ward Cunningham, a programmer, had the first Wiki. I could continue.

Software developers created Agile because they needed to and they could.

This is why Agile is taking off in marketing.

Outside of technology itself marketing has probably been more exposed to digital technology than any other part of business. First with digital publishing then with social media. At first digital helped marketing departments do the same work faster. Next it changed what you could do entirely. Marketing is adopting agile because those processes allow marketeers to do a better job when working with new digital technology.

So forget all those arguments about agile being a better way of working (it is but never mind).

Forget all those stories of agile like processes and practices before 1998 (yes they existed but that doesn’t change things).

Forget the debate about waterfall and upfront planning versus agile and just-in-time (that is history).

All you need to know is:

  1. Digital technology is helping you do things faster/better/cheaper.
  2. Agile ways of working allow you to get more from digital tools.
  3. More innovation is coming.

Agile is the process for digital businesses.

Sign-up to receive these posts by e-mail and free eBook of Xanpan

Image of Woolwich Arsenal factory taken from WikiCommons, no known copyright.

The post Agile is the process digital technology needs appeared first on Allan Kelly Associates.

nor(DEV):con 2019 Call For Speakers

Paul Grenyer from Paul Grenyer


nor(DEV):con 2019 Call For Speakers
Thursday 21st to Saturday 23rd February 2019
Kings Centre
63-75 King Street
Norwich
NR1 1PH

nor(DEV):con, the Norfolk Developers Conference is back for 2019 and stronger than ever with new tracks and an updated format. nor(DEV):con is Norfolk and Norwich’s premier and most well attended conference for everyone involved in software development and business.

Call for Speakers

The call for speakers is open from now until Friday 28th of September 2018. To submit a proposal, please send an email to paul@norfolkdevelopers.com with the following:

  • Session Title
  • Session abstract
  • Session topics: Pre-conference workshop, Tech, Process. Workshop, Stephen Fry, Business, Lightning talk
  • Session length: 45 min presentation, 90 minute presentation, 90 minute hands on workshop, Full day hands on workshop, 5 minute Lightning talk
  • Technical level: Beginner, Intermediate, Advanced, Business
  • Speaker(s) Bio
  • Availability for Thursday 21st (full day workshops only), Friday 22nd and Saturday 23rd February.

Further information will be required if you proposal is accepted.

Conference Topics

Pre-Conference Full Day Workshops - We’re looking for three full day pre-conference hands on workshops. These should be on a software development or process theme and we’re looking for one beginner, one intermediate and one advanced workshop. Pre-conference workshops attract between 5 and 30 people.

Tech Track - We’re looking for 45 minute and 90 minute beginners, intermediate and advanced presentations primarily on coding, techniques and libraries. This year we’re particularly keen to include a few Blockchain sessions.

Process Track - Rather than just concentrating on Agile, this year we have a process track for any type of software development process. Yes, you can even propose a session on Waterfall if you’re feeling brave!

Stephen Fry Track - Software Development is more than just code and practices. It’s about people. And people are not logical entities that follow easily understood rules. We’re illogical, irrational, and tend to shy away from difficult subjects like mental illness, inequality, and bias. This track looks at the softer side of Software Development, at the people, how they interact, and how we can work with the whole gamut of humanity, because it’s not just Stephen Fry who has  manic depression.

Workshop Track - We’re looking for 90 minute hands on workshops for up to 20 people. These can be on any of the topics above and delegates bring their own laptops.

Business Track - The business track is the track for everyone! We’re looking for business based sessions with a technical slant.

Lightning Talks - On the Friday evening during the wine reception, which will be in the main hall, we’ll also be opening the floor to lightning talks. A lightning talk is a 5 minute presentation and we encourage new speakers as well as experienced speakers to present.

Speakers Package

  • Free entry to the Friday and Saturday sessions at the conference
  • Free entry to the Friday night speakers dinner
  • Travel and accommodation at the discretion of the conference organise


Filters to help decide who might be a software developer

Derek Jones from The Shape of Code

How do you find people who are likely to be good software developers?

I use the filter approach: start with whoever is available, filter out those who are not likely candidates and go with those that are left (if any).

The first filter is a question: which language do you like to program in?

This question is positive, in that it assumes the other person is a developer; asking for the name of a language makes it a difficult to dodge question for those who don’t know any language. The language itself is irrelevant, apart from as a lead in to further discussion.

Learning to program is easy and a fun thing to do, at least if you are the kind of person likely to become a good developer. Cheap computing hardware has been available since the 1980s, the extra ingredients are a desire to write software and some degree of the necessary skills.

The next filter is a discussion about the largest software system they have written.

The theme of the discussion is how they solved the problems encountered during the implementation. Do the problems sound like something a developer of the person’s experience ought to find a problem? How much perseverance was shown in solving the problems, were they flexible in trying alternatives, what was their approach to problem solving?

Building systems is all about solving problems. People who cannot solve problems will fail, those with problem solving abilities might succeed.

What about paper qualifications?

Demand for developers continues to outstrip supply, creating an opportunity for turkeys to fly.

When getting a university degree was intellectually challenging, it was a sign of cognitive firepower. The stated aim of the UK government is for 50% of 18-year olds to study for a degree, which means that courses requiring high cognitive firepower are dumbed down (otherwise the failure rate goes through the roof and a University’s ranking suffers). If the only option is a turkey shoot, a degree in a subject requiring lots mathematical thinking (e.g., physics, chemistry, some psychology subjects, …) is obviously a much better filter than Medieval French, Modern History, etc.

There are people whose path through life has kept them away from computers when they were younger and university when they were a bit older. Software carpentry seems to be doing good things for such people; I don’t have any direct experience of working with those who have gone that route, and so cannot say anything about it.

Will this filter approach work for you? Well, it depends on the characteristics required of a good developer in your line of work.

Perhaps you need a regular Joe, who does the job, nine-to-five, and sticks to the tried and trusted approached; a solid person who keeps systems reliably maintained and customers happy.

The independent, frontier, mentality that thrives in ‘new’ fields is becoming a less tolerated in software development. The frontier shrinks as more and more software becomes good-enough and those with money to pay for change, spend it on something else.

SYNC THE CITY 2018 – SAVE THE DATE & NEW VENUE

Paul Grenyer from Paul Grenyer

We are really pleased to announce that Sync the City 2018 will be held on November 15-17th at OPEN, Norwich.

This will be our 5th year in which we challenge attendees to Build & Launch a Startup in 54 Hours - for fun or profit.   Last year the event sold out in 9 days, subscribers to this list will be notified of ticket sales 24 hours ahead of public sale (early September).

OPEN Norwich - its BIG, its BEAUTIFUL



Experience the highs, lows, fun, and pressure that make up life at a startup.

Do you have an idea that could be solved using technology? Or perhaps want to know more about how technology startup businesses become the next Facebook?

SyncNorwich's flagship event is Sync the City 2018 is a 54-hour event that brings together entrepreneurs, developers, business managers, marketing gurus, graphic artists, and students to pitch ideas for new startup companies, to form teams around those ideas, and to develop a working prototype, demo & presentation.

In just 54 hours, you will experience the highs, lows, fun, and pressure that make up life at a startup.

CONNECT with people driven to build something new.

DISCOVER where you are on the Entrepreneur's Journey.

LEARN what it really takes to start a company. No book, panel, speaker will teach you what you need to know.

START It’s that simple. Sync the City is designed to get you going, FAST. So grab your ticket syncthecity.com and let's do this.



From Work Experience to Oxford University

Paul Grenyer from Paul Grenyer


"It was an invaluable and pretty unique experience"

Here at Naked Element we’re big into supporting the future of tech, and that means young people. One work experience recruit was Chelsea, an ambitious school student who went on to be accepted at Oxford to study Computer Science. We couldn’t be more proud! Here she tells us a little about her journey and what inspired her to take up tech and join Naked Element for some real world experience.

How did you start your work experience with Naked Element?

One of my teachers at school was friends with Paul Grenyer (MD of Naked Element), and I was looking around for any work experience in the tech/computing/software industry. I had begun thinking about what I wanted to do in the future and had begun thinking of going into a technology based career. I was introduced to Paul and he asked me what I wanted out of the experience and offered me work experience. After completing a week, he offered to let me come and do another week of paid work!

What skills did you bring to Naked Element do you think?

Not sure I brought too many skills but I had some previous programming experience with python and a tiny bit in Java. I’d done my fair share of teamwork and group projects but this was definitely my first experience in a ‘work’ / ‘professional’ environment.

What did your work experience entail?

I was really surprised when I arrived on my first day and was given a real project to work on, and actual code to edit. It was a vastly different experience to other placements I had done and I loved the hands on experience. I got to work on a couple of projects including one that would manage your social media posts. What was really interesting for me was seeing the difference between the theory we learn in class and how it’s actually implemented in real life, such as client and server side processing. When I came in I thought I would be completely out of my depth, but even though I didn’t understand Java to start with everyone at Naked Element was willing to take the time to explain to me how something worked and what it was doing. Even being given a task as simple as going through previous code and fixing mistakes or inefficient parts was a useful experience for me and has helped in me checking to make sure my A Level coursework is as efficient as possible!

Were there any stand out moments during your time with the company?

Definitely the best part about the work experience was the hands on nature of it. I definitely had never had work experience that was so hands on, it would often just be tours of the departments etc. But with Naked Element I actually got to look and work on code for live projects.

What did you learn while at Naked Element?

I learnt a lot on my work experience. I got a serious introduction to Java and experience with JavaScript and CSS as well as what a career in Software Development could entail. As well as the actual tech aspects of the experience. I learnt a lot about the business management side of things and it was interesting going to one of the talks and training sessions and learning how to better advertise the company. It was also brilliant being introduced to other tech companies around Norwich and seeing how they interact.

What made you choose Oxford?

I’ve always been pretty ambitious, and I wanted to apply for Oxford on the chance I got in. The opportunities a degree from Oxford would provide would be almost unmatched and I adore the city. I’d also enjoyed looking round on the open days and the taster lectures I had. I currently hold an offer to study Computer Science at Jesus College, I just need to get the grades now!!

Do you think your time with Naked Element helped with your application?

I definitely think it helped, it was an invaluable and pretty unique experience that helps make you stand out from the thousands of others who apply. I know a lot of people don’t have the opportunity to get work experience.

Do you have any plans for your career future yet?

I’m not sure about a career future. After my work experience I’m definitely looking at software development. I also like the idea of working in cyber security or even AI. I think Computer Science opens up a vast field of job prospects and I haven’t quite got around to choosing one just yet. Luckily I don’t have to.

Do you have any advice for other young people interested in tech?

Firstly go out and get experience. It’s not easy but there’s no harm in asking and you’re not going to find what you enjoy or what you’re good out without trying things out. I don’t think there is any harm in broadening your skills and any experience is good experience.

Allow drag-to-side, but not drag-to-top in Ubuntu MATE (Marco)

Andy Balaam from Andy Balaam's Blog

I love the “tiling” feature in many window managers including Marco that means I can drag windows to the side of the screen and get them covering one half.

However, I never use the similar feature that allows dragging a window to the top, and it often triggers when I just want to move a window upwards.

Today I discovered that Marco (the non-fancy window manager in Ubuntu MATE and probably other places) does allow me to have one without the other, even though the UI configuration tools don’t expose the option.

Here’s what I did:

gsettings set org.mate.Marco.general allow-top-tiling false

Now my windows can be dragged to the side for half-screen maximisation, but not to the top for full-screen!

Optimistic SQL

Chris Oldwood from The OldWood Thing

One of the benefits of learning other programming languages is the way it teaches you about other paradigms and idioms. This is the premise behind the “Seven Xxx in Seven Weeks” range of books. Although I have the database one on my bookshelf I’ve only ever skimmed it as at the time I bought it I suddenly found myself leaving the world of the classic RDBMS behind and working with other types of DB for real; most notably the document-oriented kind.

Although some of these products like MongoDB and Couchbase have come a long way from their early beginnings as highly available key-value stores they often still lack the full-on transaction support of the old stalwarts like SQL Server and PostgreSQL. Coupled with a high-availability service you have to think differently about how you react to concurrency conflicts as explicit locking is almost certainly never the answer [1].

The impetus for this post was going back into the world of SQL databases and being slightly bemused by a stored procedure that appeared to implement an “upsert” (an UPDATE or INSERT depending on whether the row already exists) as I realised it wasn’t how I’d approach it these days.

The Existing SQL Approach

Initially I was somewhat flummoxed why it was even written the way it was as there appeared to be no concurrency issues in play at all, it was a single service doing the writing, but I later discovered that an accident of the implementation meant there were two writers internally competing and they chose to resolve this in the database rather than remove the root source of concurrency in the service.

The upsert was basically written like this:

  • Try SELECTing the existing row.
  • If it exists, UPDATE it.
  • If it doesn’t exist, INSERT it.

In the service code there were a number of comments describing why the transaction level was being bumped up to “serializable” – it was effectively to deal with the concurrency they had introduced within the code by creating two competing writers. On top of that the initial SELECT statement in the upsert applied a HOLDLOCK which also effectively makes the transaction serializable because it puts a range lock on the row’s key (even if that key doesn’t exist yet).

The Document DB Approach

The last few years away from the relational world meant that I was used to dealing with these kinds of conflicts at a slightly lower level. Also, dealing with document updates in the service rather than writing them as SQL mean that updates were done in a server-side loop rather than pushing the concurrency issue down into the database, hence it would look more like this:

  • Try selecting the document.
  • If it exists, update it and try writing it back.
  • If it doesn’t exist, try creating it.
  • If any write fails start over from the beginning.

Due to the lack of transactions and locking, write conflicts are commonly detected by using a version number attribute that gets used in the update predicate [2]. (A write failure, via a “document not found” error, means the predicate failed to match the specific document and version and therefore a conflict has occurred.)

Another SQL Approach

So what does all this have to do with upserts in SQL?

Well, what I found interesting was that my gut reaction was to question why there is the initial select there as I would have written it as:

  • Try to UPDATE the row.
  • If no rows were updated, then INSERT it.

This particular order makes an assumption that updates are more prevalent than inserts and as a I rule I’d say that checking @@ROWCOUNT to see if anything was written is far less ugly than adding a TRY…CATCH block in T-SQL and attempting to verify that the insert failed due to a primary key violation.

That all seemed fairly obvious but I had forgotten that with the document DB approach you tend to expect, and handle, write failures as part of handling concurrency, but in this case if two connections both attempted the insert concurrently it’s theoretically possible that they could both fail the UPDATE step and then one of the INSERTs would succeed and the other would fail resulting in a primary key violation. However the code in the service was not written to detect this and retry the operation (as you would with a document DB) which is why the initial SELECT is there – to lock the “unwritten row” up front which ensures that another transaction is blocked until the row is then inserted or updated. This way no client logic needs to handle the concurrency problem.

However I believe we can still achieve the same effect by adding the same HOLDLOCK hint to our initial UPDATE so that if the row does not exist other writers will be blocked by the range lock until the subsequent INSERT goes through. Hence the initial SELECT is, I believe, redundant.

The MERGE Approach

At this point I remembered that way back in the past SQL Server introduced the MERGE operation which effectively allows you to write an upsert with a single statement as you factor both the hit and miss logic into different branches of the statement. This caused me to go looking to see what the start of the art in upsert techniques were, possibly with performance comparisons to see how much faster this must be (given that SQL Server clearly has the potential to optimise the query plan as it better knows our intent).

I started digging and was somewhat surprised when I came across the page “Performance of the SQL MERGE vs. INSERT/UPDATE”. I was expecting to have my hypothesis validated but discovered that the answer was far from clear cut. Naturally I then googled “SQL Server upsert performance” to see what else had been written on the subject and I discovered this wasn’t an anomaly so much as a misunderstanding about what problem the MERGE statement is really intended to solve.

You should of course never take performance improvements at face value but “measure, measure, measure” yourself. I wasn’t avoiding doing that, I was looking to see if there might be any pitfalls I needed to be wary of when benchmarking the approach.

At this point I haven’t gone any further with this as it’s more of a personal investigation (there is no actual performance issue to solve) but it just goes to show that writing SQL is as much an art as it’s always been.

 

[1] Some document databases, such as Couchbase, do support locking of documents, but there are heavy restrictions so you tend to find another way.

[2] In the particular example I was looking at no version number was needed in the SQL predicate because the data had a total ordering independent of the write order (it was tracking the minimum and maximum of a value over the day).

Super Simple Named Boolean Parameters

Simon Brand from Simon Brand

Quite often we come across interfaces with multiple boolean parameters, like this:

cake make_cake (bool with_dairy, bool chocolate_sauce, bool poison);

A call to this function might look like:

auto c = make_cake(true, true, false);

Unfortunately, this is not very descriptive. We need to look at the declaration of the function to know what each of those bools mean, and it would be way too easy to accidentally flip the wrong argument during maintainance and end up poisoning ourselves rather than having a chocolatey treat.

There are many solutions which people use, from just adding comments to each argument, to creating tagged types. I recently came across a very simple trick which I had not seen before:

#define K(name) true

Yep, it’s a macro which takes an argument and gets replaced by true. This may look strange, but it enables us to write this:

auto c = make_cake(K(with_dairy), !K(chocolate_sauce), !K(poison));

// or using `not` if you prefer
auto c = make_cake(K(with_dairy), not K(chocolate_sauce), not K(poison));

Of course, it’s up to you whether you think using a macro for this kind of thing is worth it, or if you think that macro should have a name which is less likely to collide. Personally I think it’s quite a neat trick to solve this issue in a low-overhead manner.

A guess I need to come up with a marketing name for this. Since we already have X Macros, I hereby dub this trick “K Macros”.

Even the smallest job deserves dedication!

Paul Grenyer from Paul Grenyer

We don’t just create industry-changing software for big businesses, we can also pick up smaller jobs that need a quick result. Naked Element recently completed a minor job for Thyngs, a digital consumer engagement company based in Norwich. With our flexible team, experienced in development and design, we were able to turn the work around in a matter of hours.

Niall, head of marketing at Thyngs, said “we needed some urgent, short-term support with some updates we needed to make to our website. We know Paul and the team, and he was responsive and eager to help.”

Our designer/developer Shelley stepped in to get the job done. “Thyngs wanted some new pages added to their existing website, all in the same format, and they wanted their homepage amended slightly. Niall was lovely, easy to talk to and clear in what he wanted, which meant there were no snags or issues to worry about!”

Even though it was only a few hours work, Naked Element still have a reputation for quality. “Everyone was very professional and proactive” said Niall, “I would absolutely recommend Naked Element to companies in need of similar support”

Even the smallest job deserves dedication!