jefframnani + software   201

Tech Notes: Why not add an option for that?
Good advice about the maintainability of a system long term. Options have real costs and can be a maintenance and usability burden.
design  ux  product  programming  software  usability 
3 days ago by jefframnani
10 years of the App Store: The design evolution of the earliest apps | 9to5Mac

Few contemporary innovations have changed how we live our lives and interact with the world around us more than iPhone apps. The creators of the first 500 available at launch had the unique opportunity of shaping the design direction and interaction methods of the millions of apps created since.

To celebrate the App Store’s 10th anniversary, let’s study the visual evolution of 10 original App Store apps.
design  software  ios  evolution  history 
8 days ago by jefframnani
GitHub - dear-github/dear-github: An open letter to GitHub from the maintainers of open source projects
Companies that focus solely on user or platform growth often neglect their best users. Github took $350m in venture capital money, and yet managed to ship nothing that helped these people.

However, many of us are frustrated. Those of us who run some of the most popular projects on GitHub feel completely ignored by you. We’ve gone through the only support channel that you have given us either to receive an empty response or even no response at all. We have no visibility into what has happened with our requests, or whether GitHub is working on them. Since our own work is usually done in the open and everyone has input into the process, it seems strange for us to be in the dark about one of our most important project dependencies.
github  opensource  business  culture  software  quality 
16 days ago by jefframnani
Why I left Mac for Windows: Apple has given up - Charged
A long time Windows user moves to the Mac. After years of lackluster updates to Mac hardware, he’s gone back to Windows.

This, and seeing all the progress Microsoft was making with the Linux subsystem, as well as Apple’s lack of any meaningful progress, made me decide to make the jump back. I’m not a hater, I’m just tired of not being able to get a machine worth using.

“Those complaining about Apple’s current Mac lineup are not haters, they’re lovers. They’ve spent 10+ years and 5+ figures on Macs.”
windows  microsoft  apple  hardware  osx  software  quality 
16 days ago by jefframnani
Michael Tsai - Blog - On Paying for Software

One of the reasons that I switched from Linx to OSX was so that I could pay for more of my software. Why? Because then I more of the software I used could be maintained by someone who had the time to dig into bugs and UI problems and to fix them.
osx  software  business  opensource 
5 weeks ago by jefframnani
Ersatz Free Trials | Bitsplitting.org
Apple charges developers 30%, but are in fact creating more work for developers. A bad deal for Mac apps especially.

I think it’s particularly important, in the face of all the celebration this week about Apple’s perceived changes to the App Store, to understand the many ways in which this solution falls short of what many developers still hope for: bona fide support for real free trials in the App Store.

In summary: none of the mechanics of supporting ersatz free trials are substantially supported by the App Store. Every aspect of the solution is bolted on to a system which was not designed for, yet is somewhat admirably being used to simulate real support for free trials. Let me elaborate by listing several shortcomings and how they affect both users and developers in significant ways.
apple  business  software  ios  mobile 
6 weeks ago by jefframnani
After 5 years and $3M, here's everything we've learned from building Ghost
About the product and engineering.

We spent a very long time trying to compete on convenience and simplicity. This was our biggest mistake and the hardest lesson to learn - because user feedback told us that this was what was most important. We deliberately limited flexibility in the product to try and make it more simple. But it ended up being still not simple enough for the average user, and not powerful or flexible enough for the professional user — the worst of both worlds.

So the biggest takeaway after 5 years is that we have been moving, and will continue to move up market, toward professional users who value power and flexibility over ease of signup. This is where we can win compared to the competition.

On being a fully remote team.

The stuff which is actually hard, nobody ever asks about. For instance: How do you know when someone is in a bad mood? How do you deal with loneliness? How do you foster camaraderie? How do you achieve urgency? How do you ever get to know people outside of work when you never spend time with them outside of work?

On being an open source product. An interesting observation about GitHub being too transactional between maintainers and contributors.

The least fun part of working on Ghost is dealing with Github, which is really sad.

Everyone has their pet issue, whether design or accessibility or security or internationalisation or performance or SEO or or or... the list goes on. Everyone thinks theirs is most important and that we should work on right now and they can't believe that we would ignore it. It's always absolutely outrageous.
business  opensource  nonprofit  software  saas  publishing  blogging 
8 weeks ago by jefframnani
Introducing Git protocol version 2 | Google Open Source Blog
An interesting case study in how to evolve existing software. How to safely signal new servers that you want the new protocol version, in a way old servers will ignore.

The Git project has tried on a number of occasions over the years to either limit the initial ref advertisement or move to a new protocol altogether but continued to run into two problems: (1) the initial request is rigid and does not include a field that could be used to request that new servers modify their response without breaking compatibility with existing servers and (2) error handling is not well enough defined to allow safely using a new protocol that existing servers do not understand with a quick fallback to the old protocol. To migrate to a new protocol version, we needed to find a side channel which existing servers would ignore but could be used to safely communicate with newer servers.
git  programming  dvcs  refactoring  evolution  software 
9 weeks ago by jefframnani
Addressing Your Concerns | Shifty Jelly's blog of mystery
As a PocketCasts user I’m filing this under claim chowder.

Concern 6: If all of the above is true, why would 4 of the biggest radio producers even bother to buy Pocket Casts?

That’s an easy question to answer for those that know a bit about the podcasting industry. The industry is amazing because it’s open. Anyone can publish a podcast and distribute it everywhere. No podcast is treated differently than another. However, “open” is not the default state of markets as they mature, as we’ve seen in other content businesses. When power is consolidated into the hands of just a few closed platforms, creators rarely win. And we care deeply about the fate of podcast producers everywhere.

It’s our mission to ensure that this doesn’t happen. If we succeed, we all benefit. ...
podcast  business  software  ios  npr 
10 weeks ago by jefframnani
The Elevation of Privilege (EOP) Card Game
Elevation of Privilege (EoP) is the easy way to get started threat modeling, which is a core component of the design phase in the Microsoft Security Development Lifecycle(SDL).

The EoP card game helps clarify the details of threat modeling and examines possible threats to software and computer systems.
security  tutorial  software  design  ThreatModel  game 
11 weeks ago by jefframnani
Prelude to a Profession - The Clean Coder
Written after the Volkswagen emissions scandal. Uncle Bob talking about a software professional oath.
programming  ethics  legal  software 
11 weeks ago by jefframnani
Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS & SSL Proxy / Reverse Proxy

Charles is an HTTP proxy / HTTP monitor / Reverse Proxy that enables a developer to view all of the HTTP and SSL / HTTPS traffic between their machine and the Internet. This includes requests, responses and the HTTP headers (which contain the cookies and caching information).
http  debugging  network  software  ios  osx  macos  linux  ssl 
march 2018 by jefframnani
The Identity Management Method – Joel on Software
An effective management technique for high-trust environments. Give people information they need to make good decisions. In a way that enhances intrinsic motivation.

The Identity Method is a way to create intrinsic motivation.

To be an Identity Method manager, you have to summon all the social skills you have to make your employees identify with the goals of the organization, so that they are highly motivated, then you need to give them the information they need to steer in the right direction.

In general, Identity Management requires you to create a cohesive, jelled team that feels like a family, so that people have a sense of loyalty and commitment to their coworkers.

The second part, though, is to give people the information they need to steer the organization in the right direction.

Interesting insight into how to build a high-trust culture and hiring people from outside your region. Their internship includes features that allow the prospective team members to visualize what it’s like to live in NYC.

I’m probably going to freak out some of our summer interns by admitting this, but one the goals of our internship program is to make people identify as New Yorkers, so they’re more comfortable with the idea of moving here after college and working for us full-time. We do this through a pretty exhausting list of extra-curricular summer activities: two Broadway shows, a trip to the Top of the Rock, a boat ride around Manhattan, a Yankees game, an open house so they can meet more New Yorkers, and a trip to a museum; Michael and I host parties in our apartments, both as a way of welcoming the interns but also as a way for interns to visualize living in an apartment in New York, not just the dorm we stuck them in.
management  leadership  programming  software  business 
march 2018 by jefframnani
The Command and Control Management Method – Joel on Software

the military uses Command and Control because it’s the only way to get 18 year olds to charge through a minefield, not because they think it’s the best management method for every situation.
programming  management  leadership  software 
march 2018 by jefframnani
Designing Windows 95’s User Interface – Socket 3

The development of the user interface for a large commercial software product like Microsoft® Windows 95 involves many people, broad design goals, and an aggressive work schedule. This design briefing describes how the usability engineering principles of iterative design and problem tracking were successfully applied to make the development of the UI more manageable. Specific design problems and their solutions are also discussed.
microsoft  windows  design  history  ui  usability  evolution  software 
march 2018 by jefframnani
Apple's next big software thing
Thought provoking conversation about the future of the Mac and native apps in general.
A surprising take on the success of open web tools for native apps that work on many platforms.

After the Life and Death of Twitter for Mac episode, the recorders kept rolling and all the big brains — John Gruber of Daring Fireball, Loren Brichter of Tweetie, Paul Haddad of Tweetbot, Craig Hockenberry of Twitterrific, Ben Sandofsky of Halide, and Greg Pierce of Drafts — shared their thoughts on the rumored "Marzipan" iOS and macOS cross-development platform. Christina Warren of Microsoft joins to add context to everyone's hopes, dreams... and fears.
apple  mac  software  business  web  audio  podcast  vector 
march 2018 by jefframnani
Michael Tsai - Blog - The Experts Have Taken Over
Some accounts of how Apple’s culture of quality changed after Jobs / Forestall era.
apple  software  quality  ios  osx  macos  audio  podcast 
february 2018 by jefframnani
Michael Tsai - Blog - Apple Delays Features to Focus on Reliability, Performance
A nice reminder that things weren’t all wine and roses in the snow leopard days.

While High Sierra experienced a couple of fairly serious security vulnerabilities and has its share of irritating bugs, Snow Leopard — the go-to example of a refinement-oriented release — wasn’t exactly immune.
apple  software  quality  osx  macos 
february 2018 by jefframnani
Move slow and break nothing
This touches on some good points about the complexity of systems, but then points at the heavily regulated airline industry as an example of stability. It’s a good comparison, but doesn’t take into the costs necessary for that level of reliability.

Reliable systems do exist. The United States has not had a casualty from an airplane crash since 2013, and on a domestic carrier since 2009. There were 823 million passengers in the United States in 2016 alone. Clearly highly-redundant and reliable systems can be produced if we want them to and build the right culture of maintenance, safety, and reliability.
technology  software  quality  complexity  programming  risk 
february 2018 by jefframnani
Michael Tsai - Blog - iOS Auto-Correction From Contacts
Jeebus. I thought I was going crazy when I saw some of the dumb iOS autocorrects in iOS 11. Now I know why. But it’s still a dumb idea.
programming  apple  ios  MachineLearning  software  quality 
february 2018 by jefframnani
Tesla Is A Software Company
File under: Software is eating the world.

Software companies understand deeply the value of incremental delivery and out-of-band data gathering to validate theories.

Tesla plans to obtain this statistical evidence by running its full self-driving software in “shadow mode.” The software will not control the car, but will receive input from its sensors and simulate steering, braking, and accelerating. The software’s decisions will then be tested against the driver’s actual input to determine which is safer.
tesla  software  automobile  cars  manufacturing  business 
february 2018 by jefframnani
Bad Apple #1: iCloud Photo Library Re-uploading - TidBITS

we’re starting a new TidBITS column, called Bad Apple. Read that name however you like — in the context of one bad apple spoiling the whole barrel or like the imperative “Bad dog!” In Bad Apple, we’ll dive into a particular aspect of something that Apple got wrong.
apple  software  quality  cloud  osx 
january 2018 by jefframnani
The Modular Monolith: Rails Architecture – Dan Manges – Medium
How to evolve a monolith into a modular application inside a big framework line Rails. Uses the concept of services, but these services are just PORO’s using traditional software modularity principles.

Rails engines helps enable this architecture.
ruby  architecture  design  patterns  software  rails  DDD  programming 
january 2018 by jefframnani
Birdcage liners – Joel on Software

Both Twitter and Facebook’s selfish algorithms, optimized solely for increasing the number of hours I spend on their services, are kind of destroying civil society at the same time. Researchers also discovered that the algorithms served to divide up the world into partisan groups. So even though I was following hundreds of people on social networks, I noticed that the political pieces which I saw were nevertheless directionally aligned with my own political beliefs. But to be honest they were much… shriller. Every day the Twitter told me about something that The Other Side did that was Outrageous and Awful (or, at least, this was reported), and everyone was screeching in sync and self-organizing in a lynch mob, and I would have to click LIKE or RETWEET just to feel like I had done something about it, but I hadn’t actually done anything about it. I had just slacktivated.

What is the lesson? The lesson here is that when you design software, you create the future.
facebook  twitter  social  design  software  MachineLearning  culture  technology  SiliconValley 
january 2018 by jefframnani
GOTO 2017 • Beyond Developer • Dan North - YouTube
Dan talks about the breadth of things you need to care about to be a great developer.
programming  career  software  business  video  goto  management  agile 
december 2017 by jefframnani
Michael Tsai - Blog - Rushed iOS 11.2 Update to Fix Date Crasher
I think this quote from SwiftOnSecurity is insightful.

Again and again, Microsoft employees and observers tell me how much the company was shook by 2000s-era bugs, and remolded by Bill Gates’ Trustworthy Computing memo. I’m not saying it’s the same, but I really wonder if there are lessons for Apple now.
apple  software  quality  ios 
december 2017 by jefframnani
MakeMKV - Make MKV from Blu-ray and DVD
MakeMKV is your one-click solution to convert video that you own into free and patents-unencumbered format that can be played everywhere. MakeMKV is a format converter, otherwise called "transcoder". It converts the video clips from proprietary (and usually encrypted) disc into a set of MKV files, preserving most information but not changing it in any way.
dvd  media  backup  drm  archive  software 
december 2017 by jefframnani
iPhone crashing on Dec. 2? Here's the fix! | iMore
Apple has had serious bugs with their recent software releases. If this continues they risk losing customer trust such that they never update. Like Microsoft back in the day.
apple  software  quality  ios 
december 2017 by jefframnani
Michael Tsai - Blog - Why Little Bugs Need to Get Fixed
Another laundry list of issues with Apple’s recent software.

If Apple can’t fix bugs faster than it creates them, the only possible outcome is operating systems and apps that get buggier and buggier. This is a vicious cycle that is demoralizing for customers, and especially for the people who send in bug reports for free. If Apple can’t pay off this technical debt in a time of record earnings, stock price, and expansion, when can it?
apple  software  quality 
november 2017 by jefframnani
In My Pocket
Joe Cieplinski on how it sucks to copy your music onto an iPhone using iTunes.

I know I’m in the minority here, but I like having all my music on my phone. And I mean downloaded, ready to play, regardless of network connectivity. I ride the subway a lot, and thus I often find myself in a position of no internet connectivity. And I like to decide what I want to listen to in the moment, not ahead of time. It’s very frustrating for me to be in the mood for a song, go to play it on my phone, and nothing happens.

You would think this would be easy, copying my entire library, since all my music is on my Mac, and thus a simple USB cable would be all I'd need to copy all that music over to my new phone. If you think this is true, you clearly haven’t been reading my blog for very long. For several years now, as Apple has ignored users in my situation, the process of getting my songs onto my phone has resulted in doubled tracks, missing tracks, incorrect album artwork, songs that simply never copy, songs that appear to be on the phone but refuse to play, and on and on. It has been a nightmare for a geek like me who makes an effort to have a very orderly library and who likes to listen to entire albums.

But if you have lots of tracks that you ripped from CDs back in the Stone Age, or you purchase songs from places other than iTunes occasionally, and you haven’t yet surrendered your entire music flow to streaming services, you may be experiencing many of the difficulties I have with iTunes over the past five or more years.
apple  music  software  quality  itunes 
november 2017 by jefframnani
Living on the Plateau - Clean Coder Blog
File under: The end of Moore's Law and Exponential Hangover.

Uncle Bob explains it. There's even a slide from Intel talking about how 28mn is the most cost-effective for mid-range computers.
But the 8 core processors never came – at least in the laptop space. We’re still waiting. And it’s looking more and more as though Moore’s law for density has hit the wall.
I think it is quite realistic to expect that the speed and density of computers have reached their practical limits. It’s just possible that we have been living on the plateau for the last decade; and that we will remain on this plateau for the foreseeable future.

Then he looks down the road and asks what else might be affected? I think he's right that the Cambrian Explosion of programming languages are over. We're settling into a stable basis for the future. The only one he's missing is Kotlin.
If we aren’t going to see 1024 core processors in the near future, what need have we of functional programming languages? Oh, don’t get me wrong. I think functional programming is a good idea. Every programmer should learn it. But the crisis that we anticipated – the crisis that drove the current infatuation with functional languages – seems not to be occurring. And that may well mean that functional languages never achieve the ascendency that we had anticipated for them. It may just be that Java/C#, and Ruby/Python, and Swift/Dart/Go are, and will be, sufficient.

If Moore’s law was the driver of our language evolution, what will drive it now? Could it be that we are living at the beginning of a period in which language evolution will slow it’s frenetic pace? Will we see the number of languages cease it’s relentless rise, and begin to decline? Will our industry gradually abandon the exuberance of adolescence and settle down into a stable period of adulthood and middle age?
programming  language  evolution  MooresLaw  FunctionalProgramming  hardware  software 
november 2017 by jefframnani
Introducing Nullable Reference Types in C#
A good story of evolving a language to add a useful feature in the face of a large install base. A thoughtful approach to adding this feature.
csharp  programming  software  evolution 
november 2017 by jefframnani
Entering the Quantum Era—How Firefox got fast again and where it’s going to get faster – Mozilla Hacks – the Web developer blog
Another great story about how to evolve a large existing code base with a large user base.

This is the opportunity that the Chrome engineers foresaw. We saw it too, but we had a bumpier path to get there. Since we had an existing code base we needed to plan for how to split up that code base to take advantage of multiple cores.

Electrolysis laid the groundwork for Project Quantum. It introduced a kind of multi-process architecture similar to the one that Chrome introduced. Because it was such a big change, we introduced it slowly, testing it with small groups of users starting in 2016 before rolling it out to all Firefox users in mid-2017.

File under: browsers are becoming operating systems. In this case Firefox is adding their own preemptive scheduler to prioritize tasks.

Even when you split up the content windows between cores and have a separate main thread for each one, there are still a lot of tasks that main thread needs to do. And some of them are more important than others. For example, responding to a keypress is more important than running garbage collection. Quantum DOM gives us a way to prioritize these tasks. This makes Firefox more responsive. Most of this work has landed, but we still plan to take this further with something called pre-emptive scheduling.
firefox  browser  refactoring  performance  software  evolution 
november 2017 by jefframnani
Amazon Revokes Delicious Library API Access
We are writing to tell you that effective as of today’s date, Amazon is terminating your Associates account. Under the terms of the Operating Agreement, we may terminate your account at any time, with or without cause. This decision is final and not subject to appeal.
business  monopoly  amazon  software 
october 2017 by jefframnani
The Software Apocalypse - Tools Are Not The Answer

And right there, ladies and gentlemen, you can see both the cause of the apocalypse, and the obvious solution.

The cause:

1. Too many programmer take sloppy short-cuts under schedule pressure.
2. Too many other programmers think it’s fine, and provide cover.

The obvious solution:

1. Raise the level of software discipline and professionalism.
2. Never make excuses for sloppy work.

This is the point that the author of the Atlantic article missed entirely. The one thing he failed to consider was that the reason we are facing bugs that kill people and lose fortunes, the reason that we are facing a software apocalypse, is that too many programmers think that schedule pressure makes it OK to do a half-assed job.
programming  craftsmanship  culture  testing  quality  software 
october 2017 by jefframnani
Daring Fireball: Bill Gates Now Using an Android Phone 'With a Lot of Microsoft Software'

While I”m at it, it occurs to me that Apple is the only company left where all its employees are using only systems made by their own company. Microsoft employees need to use phones running iOS or Android. Google employees need to use MacOS or Windows (there might be some administrative jobs where they can use Chromebooks, but I doubt there are any engineers or designers getting by with Chrome). But at Apple, it’s MacOS on your PCs, iOS on your phone and tablet, WatchOS on your watch, and even tvOS on your set-top box. Microsoft use to have a slogan “Windows everywhere”. Apple doesn’t have one OS that runs everywhere (although it’s close with iOS — WatchOS and tvOS are really just offshoots of iOS with different UI layers), but there is a sort of cultural “Apple everywhere” mindset that I worry could lead to the sort of insularity that blinded Microsoft in the early ’00s.
apple  microsoft  business  monopoly  software  quality 
september 2017 by jefframnani
The 4-letter-word word that makes my blood boil

Gerald Weinberg calls “just” an example of Lullaby Language, which “lulls your mind into a false sense of security, yet remains ambiguous enough to allow for the opposite interpretation.”
software  programming  culture  communication  management 
august 2017 by jefframnani
Why we’re switching Ulysses to Subscription – Building Ulysses – Medium
The software business is changing. Paid upgrades are dead in a post App Store world. Subscriptions seem like the only / best option going forward.

Let’s map this onto Ulysses for a moment: If you bought Ulysses at its launch in April 2013, you will now have received nine major feature releases. For free, at no additional cost. At least 80% of that originally purchased app have since been scraped and replaced. Its functionality has quadrupled during the same time.

Each of these nine updates required a considerable amount of time on our part, which of course translates into a considerable amount of development cost. But with customers ever only paying for the development of the current version — how did we manage to finance new versions then?

The answer is simple: New users.
Or in economic terms: Expanding our market.

Now, as long as there was a strong-enough flow of new customers every month, development costs could be covered by those sales. But since ours is a growing product (updates!), it hence needs a growing team (more code), which means growing development costs (devs need food), which in turn means we need an ever-growing stream of new users.

Needless to say, solely relying on new customers to keep your business going, is a very unstable idea — at the very least, there will come a time of full market saturation, right? ...
software  business  saas  productivity  apple 
august 2017 by jefframnani
Why we’re switching Ulysses to Subscription – Building Ulysses – Medium
The software business is changing. Paid upgrades are dead in a post App Store world. Subscriptions seem like the only / best option going forward.

Let’s map this onto Ulysses for a moment: If you bought Ulysses at its launch in April 2013, you will now have received nine major feature releases. For free, at no additional cost. At least 80% of that originally purchased app have since been scraped and replaced. Its functionality has quadrupled during the same time.

Each of these nine updates required a considerable amount of time on our part, which of course translates into a considerable amount of development cost. But with customers ever only paying for the development of the current version — how did we manage to finance new versions then?

The answer is simple: New users.
Or in economic terms: Expanding our market.

Now, as long as there was a strong-enough flow of new customers every month, development costs could be covered by those sales. But since ours is a growing product (updates!), it hence needs a growing team (more code), which means growing development costs (devs need food), which in turn means we need an ever-growing stream of new users.

Needless to say, solely relying on new customers to keep your business going, is a very unstable idea — at the very least, there will come a time of full market saturation, right? ...
software  business  saas  productivity 
august 2017 by jefframnani
'THIS IS NOT A DRILL:' A Hacker Allegedly Stole $32 Million in Ethereum - Motherboard
Imagine your money is controlled by software. Software has bugs. Bugs that can cost you all your money.
ethereum  money  finance  software  quality  blockchain 
july 2017 by jefframnani
Apple, Google and other Nasdaq Stocks Swing Wildly in After-Hours Trading - Bloomberg

An error at Nasdaq Inc.’s computer systems caused confusion among traders Monday, as Wall Street closed early for the July 4 holiday.

The exchange operator was conducting a test of its pricing data feed that led to some third-party providers showing wild moves in shares including Google Inc. and Microsoft Corp. that never occurred, according to spokesman Joe Christinat. Nasdaq is working with the providers to resolve the issue, he said.
software  finance  exchange  testing  outage  Nasdaq  markets 
july 2017 by jefframnani
The Half-Life of Code — Sandi Metz

In my experience, most applications are a mess. Successful business rely on long-lived applications that endure a constant barrage of new requirements. Changes are commonly made under urgent time pressure, which drives applications towards disorder. As entropy increases, it becomes harder and harder to add features except by way of one more hack. The accumulated mess leads to hacks, hacks lead to more hacks, and then you're in a loop. Velocity gradually slows, and everyone comes to hate the application, their job, and their life.
programming  quality  software  design 
june 2017 by jefframnani
The Four Elements of Simple Design
By JB Rainsberger

I claim that developing strong skills of detecting duplication, removing duplication, identifying naming problems, and fixing naming problems equates to learning everything ever written about object-oriented design.
software  design  tdd  programming  oop 
may 2017 by jefframnani
The Clean Architecture | 8th Light
By Uncle Bob. A synthesis of the hexagonal and screaming architectures.
programming  design  architecture  software 
may 2017 by jefframnani
Damage - Matt Gemmell
Matt is calling out Apple here, but I put Google in the same camp. In fact, it was Google who did the research on how much more engagement you got when you priced at zero.

No company has done as much damage to the perceived value of software, and the sustainability of being an independent developer, as Apple.

Not that other companies wouldn’t have done the same thing — they would have. It’s just that Apple was the successful one.

It’s resolutely the fault of us as consumers, and it’s actively encouraged by the App Store.
programming  business  apple  google  software  economics 
may 2017 by jefframnani
Education of a Programmer – Hacker Noon

one of the hardest problem for a system designer is to determine how to divide responsibilities between components of a system. This ends up being a discussion that involves weighing the pros and cons as you divide up functionality, isolate complexity and try to design a reliable, performant system that will be flexible to evolving requirements. There is no simple set of rules to follow.

On architecture and software layers:

It is almost a truism that a component you adopt will have more functionality than you actually require. In some cases, the decision to use it is based on leveraging that functionality for future uses. You adopt specifically because you want to “get on the train” and leverage the ongoing work that will go into that component. There are a few consequences of building on this highly functional layer. 1) The component will often make trade-offs that are biased by functionality that you do not actually require. 2) The component will embed complexity and constraints because of functionality you do not require and those constraints will impede future evolution of that component. 3) There will be more surface area to leak into your application. Some of that leakage will be due to true “leaky abstractions” and some will be explicit (but generally poorly controlled) increased dependence on the full capabilities of the component.

As soon as you have defined a layer, it starts to accrete functionality. The layer is the natural throttle point to optimize for your usage patterns. The difficulty with a thick layer is that it tends to reduce your ability to leverage ongoing innovation in underlying layers. In some sense this is why OS companies hate thick layers built on top of their core evolving functionality — the pace at which innovation can be adopted is inherently slowed.

On performance:

A key thing to recognize about this exponential change is that while all components of the system are experiencing exponential change, these exponentials are divergent. So the rate of increase in capacity of a hard disk changes at a different rate from the capacity of memory or the speed of the CPU or the latency between memory and CPU. Even when trends are driven by the same underlying technology, exponentials diverge. Latency improvements fundamentally trail bandwidth improvements.

On complexity:

I have struggled with complexity my entire career. Why do systems and apps get complex? Why doesn’t development within an application domain get easier over time as the infrastructure gets more powerful rather than getting harder and more constrained? In fact, one of our key approaches for managing complexity is to “walk away” and start fresh. Often new tools or languages force us to start from scratch which means that developers end up conflating the benefits of the tool with the benefits of the clean start. The clean start is what is fundamental. This is not to say that some new tool, platform or language might not be a great thing, but I can guarantee it will not solve the problem of complexity growth. The simplest way of controlling complexity growth is to build a smaller system with fewer developers.
programming  career  management  software  design  architecture 
april 2017 by jefframnani
Complexity and Strategy
A retrospective from years of working on Microsoft's Office products.

Great essay on the trade-offs between a product's functionality (the sum of its features), and it's essential complexity (how those features interact).

I enjoyed this take on the enthusiasm for new technologies by early adopters.
This perspective does cause one to turn a somewhat jaundiced eye towards claims of amazing breakthroughs with new technologies. Managed code was one that we argued about for a long time during this period. Leveraging open source also has some of the same dynamics. What I found is that advocates for these new technologies tended to confuse the productivity benefits of working on a small code base (small N essential complexity due to fewer feature interactions and small N cost for features that scale with size of codebase) with the benefits of the new technology itself — efforts using a new technology inherently start small so the benefits get conflated. Additionally, these new technologies (Java, C#, NodeJS is the latest one) start out with a much more functional initial set of base libraries and rich frameworks, certainly compared to what we saw in C and C++ and in the early days of either Mac or Windows application development.


This is about the framework code that Office is built upon, but it feels equally true about Rails and Django, et al.

The dynamic you see with especially long-lived code bases like Office is that the amount of framework code becomes dominated over time by the amount of application code and in fact frameworks over time get absorbed into the overall code base. The framework typically fails to evolve along the path required by the product — which leads to the general advice “you ship it, you own it”. This means that you eventually pay for all that code that lifted your initial productivity. So “free code” tends to be “free as in puppy” rather than “free as in beer”.


On competing with Google Docs.
Browser-based application delivery solved the deployment problem which was a huge issue for PC applications in the days before app stores. This enabled continuous delivery of new features as well as ensuring that everyone was up-to-date with the latest version.

One thing that was clear to us was that the cloud/browser development strategy did not offer a breakthrough in the constraints of essential complexity like I am discussing here. In fact, the performance challenges with running large amounts of code or large data models in the browser and managing the high relative latency between the front and back end of your application generally make it harder to build complex applications in a web-based environment.


Positive affirmation of how Microsoft enforces their monopoly intentionally. This comes right after a paragraph criticizing Google Apps for not being more compatible with Office.
The final decision to build the “Word Web App” rather than “a new web-based word processor from Microsoft that is not fully compatible with Word” (and similarly for Excel, PowerPoint and OneNote) was strongly driven by the belief that the file formats continued to serve as a critical competitive moat with immensely strong network effects. In fact, an argument can be made that the Office file formats represent one of the most significant network-based moats in business history (with Win32 and the iOS APIs as two others).
microsoft  programming  software  history  msoffice 
march 2017 by jefframnani
Gerald M. Weinberg: Writer - Consultant OFFICIAL WEBSITE
Author of The Secrets of Consulting. For some reason it was hard to Google his actual web site where I can buy his books somewhere other than Amazon.
programming  agile  consulting  business  book  author  quality  software 
march 2017 by jefframnani
How to Crash Systemd in One Tweet
The bug is remarkably banal. The above systemd-notify command sends a zero-length message to the world-accessible UNIX domain socket located at /run/systemd/notify. PID 1 receives the message and fails an assertion that the message length is greater than zero. Despite the banality, the bug is serious, as it allows any local user to trivially perform a denial-of-service attack against a critical system component.
linux  security  systemd  software  quality 
february 2017 by jefframnani
Why Every Element of SOLID is Wrong // Speaker Deck
SOLID has been a guide for Object Oriented Programmers for years. Challenging these principles is thought provoking.
programming  architecture  design  software  oop 
january 2017 by jefframnani
Bitter iCloud Truth | Bitsplitting.org
This is fucking awful. How does the company that gave us Time Machine screw up backup and restore so badly.

The overarching lesson here is that when it comes to iCloud-synced data, you cannot count on local data, and worse: you can’t count on local archives.
osx  apple  software  quality  backup  sync 
january 2017 by jefframnani
Blog | Documenting Architecture Decisions | Relevance
By Michael Nygard. He proposes adding lightweight RFC style documents to be added to the documentation of your project that document important architectural decisions.
agile  programming  architecture  documentation  communication  software 
january 2017 by jefframnani
/dev/lawyer The MIT License, Line by Line
Great summary of and commentary on the MIT open source license.
license  software  legal  copyright  opensource 
october 2016 by jefframnani
A Declining Trajectory - Matt Gemmell

Courage is apparently what it takes to remove a headphone port, according to Phil Schiller. I can only imagine which laudable value might lead to slowing down, making the upgrade cycle biennial, and focusing once again on quality and dependability above all.

The practical impact of all this for me is small, but meaningful: I don’t trust this stuff anymore. It was the very reliability of it — in user-friendly design, as well as stability of functionality — that was the basis of my choice in the first place, and continued choices for decades since. I don’t care about the brand itself, and I have no intellectual investment in the platforms as a developer anymore. I just need things that work, and that I can rely on working.
apple  software  quality  osx  ios  iwatch 
october 2016 by jefframnani
Providing the best possible App Store experience - The Omni Group
Omni is making their pro Mac apps free to download with in-app purchase for the Standard and Pro features. The free version of the app acts as a read-only document viewer.

The evolution of the software business continues. I wonder how this will work for OmniFocus?
apple  software  business  ios 
october 2016 by jefframnani
Episode #54 Enterprise Software with Python - [Talk Python To Me Podcast]
Defining "enterprise software". I liked their discussion about customization and the lack of scale that it results in.
business  software  podcast  python  programming 
june 2016 by jefframnani
Separate, support, serve - bitquabit
I may need to update my thinking about Microsoft.

This leaves us with two conclusions. First, empirically, Embrace, Extend, Extinguish failed; if it hadn’t, Windows would still be a monopoly. For Microsoft to be continuing this strategy, you have to believe they were not merely evil, but also unrecoverably stupid.

Second, it can’t work in an environment where Microsoft is an underdog. For nearly all shops out there, leaving Windows is honestly pretty trivial at this point; it’s adopting it that’d be an uphill battle. If I pick “Linux”, I can trivially integrate OpenBSD, Illumos, OS X, and any other Unix-like environment into my workflow with few or no issues. I can pick amongst AWS, GCE, Digital Ocean, and others for my hosting. I can pick virtually any language and database I want, use virtually any deployment tool, and migrate amongst all of these options with relative ease.
software  microsoft  business  culture  windows  monopoly 
may 2016 by jefframnani
ITunes Library on a NAS | Apple Support Communities
It looks like I'm not the only one experiencing this problem with iTunes corruption when the files are hosted on a NAS.

@BemApo you are describing my issue exactly.... right down to The Talking Heads. My library is messed up, though I'd prefer to use stronger language when talking about it. I'll click one song and another will play. Some videos have turned into podcasts, music, etc. In many cases actual files have moved. The songs on an album will be contained in one folder and the rest in another random folder
apple  software  quality  itunes 
may 2016 by jefframnani
In Oracle v. Google, a Nerd Subculture Is on Trial

But ever since a bunch of normals at the Federal Circuit decided in 2014 that the structure, sequence, and organization of the Java APIs are copyrightable, copyrightable they are—and now Google witnesses are struggling to explain their actions as part of a long shared history in an insular community of nerds with their own language, their own mythology, their own intuitions about software and intellectual property.
software  copyright  api  legal  oracle  google 
may 2016 by jefframnani
An Apple Music plea
This is what it sounds like when you start losing your customers trust. In this case, customers are losing trust in Apple's software quality.
apple  software  quality  business  itunes 
may 2016 by jefframnani
Apple Music Deletes Personal Music Files
iTunes is a fucking garbage fire. After turning on iCloud Music Library, my entire local music library was corrupted including the music files themselves.

"My takeaway from all the people commenting is that no one seems to fully understand how it’s intended to work, or whether it works as intended, so it’s best to stay far away."
apple  software  quality  cloud  itunes 
may 2016 by jefframnani
Consultants Ate My Unit Tests
A concrete example of unprofessional behavior by programmers. A professional programmer completed a project. He had automated unit tests. The business owner then started using cheaper consultants, who deleted the unit tests and created a mess. This is predictable, but sometimes you need concrete examples to show people why testing is important.
business  testing  consulting  programming  quality  software 
march 2016 by jefframnani
What no indie developer wants to hear about the App Store
"We're in the app equivalent of the industrial age, where mass production and departments stores have changed the way the industry works. Where developers are fighting for shelf space like toothpaste tubes at Walmart and have as much an idea who's buying their products as Coke does a can at 7/11."
ios  software  business 
march 2016 by jefframnani
« earlier      
per page:    204080120160

related tags

acm  advertising  agile  ai  amazon  api  apple  archaeology  architecture  archive  art  audio  author  automobile  backup  BestOf2018  blackberry  blockchain  blog  blogging  book  browser  budget  build  business  career  cars  cloud  collaboration  communication  compiler  complexity  computers  conference  consulting  continuousdeployment  continuousintegration  copyright  craftsmanship  creativity  crowdsourcing  csharp  culture  DDD  debugging  design  development  devops  distributed  documentation  drm  dvcs  dvd  economics  emulator  energy  engineering  entrepreneurship  estimation  ethereum  ethics  evolution  exchange  facebook  finance  firefox  fraud  FunctionalProgramming  funding  game  git  github  gnu  google  goto  government  gpl  hardware  history  hosting  hp  http  humor  internet  ios  itunes  iwatch  java  language  law  leadership  legal  library  license  linux  mac  macbook  MachineLearning  macos  malware  management  manufacturing  marketing  markets  media  meditation  mercurial  messaging  microsoft  mobile  money  monopoly  MooresLaw  msoffice  music  nasa  Nasdaq  network  nonprofit  npr  nyse  oop  openbsd  opensource  oracle  organization  os  osx  outage  patents  patterns  payments  performance  philosophy  photoshop  pinboard  planning  podcast  policy  politics  privacy  product  productivity  programming  projectmanagement  publishing  python  quality  rails  rake  refactoring  reference  ReleaseManagement  research  risk  ruby  saas  sales  scifi  scm  search  security  SiliconValley  smartgrid  social  software  space  ssl  startup  startups  surveillance  sync  sysadmin  systemd  tags  tdd  technology  tesla  testing  ThreatModel  tools  TouchBar  transparency  tutorial  twitter  ui  unix  usability  ux  vector  video  vpn  web  wiki  windows  writing  zfs 

Copy this bookmark:



description:


tags: